Giter VIP home page Giter VIP logo

displaymonkey's Introduction

DisplayMonkey

Digital Signage Solution for Everybody, Anywhere

Website | Community | Documentation | Binaries | Installation | Twitter | Linked-in

Display Monkey is an awesome and easy to use browser based digital signage solution that can spread the gospel in stores, hallways, conference rooms and shop floors.

Display Monkey is written with the following products, frameworks and technologies:

As of this writing Display Monkey server components run on IIS 7 and the front-end side supports the following browsers:

  • Firefox
  • Chrome
  • Safari
  • IE (8 end up)
  • Raspberry Pi Epiphany
  • Samsung Smart TV browser (6-series and up)

Why

Display Monkey provides an affordable yet powerful and modern alternative to commercial digital signage solutions that can improve communications in most organizations and corporations.

Current features

Display Monkey comprises Management (a.k.a. DMM) and Presentation (a.k.a. DMP) applications. Current features include:

  • Frame caching
  • Location-specific frames
  • Custom frame templates
  • Multi-culture, multi-language
  • Frames supporting the following content:
    • SQL Reporting Services (SSRS) reports
    • Pictures
    • Local videos
    • YouTube videos
    • Your own HTML
    • Simple memos
    • MSO Outlook calendar with quick booking
    • Text and graphical face clock
    • Yahoo weather
    • Power BI
  • WYSIWYG Editor to design presentation layouts
  • Management of Displays
  • Management of Media (images and videos)
  • Online help
  • Dashboard
  • UI for Application Settings

Check the latest Change Log document for more details.

Contributing

We encourage contributions. Please feel free to send us pull requests. We need help with the following:

Programming tasks

  • Improve DMM navigation flow. Currently server-side request referrer is used as a basis for navigation for CRUD actions. It would be nice to switch to client-side cookies, or similar.
  • Fix YT iframe being pegged because of unreleased event handlers installed by YTPlayer causing memory leaks (possible solution here).
  • Implement custom ICacheProvider service instead of System.Web.Caching.Cache, which would allow share cache between multiple application pool workers, also double as display activity statistics provider.
  • Implement activity graph for DMM home page using D3 or similar library.
  • Implement RSS news feed frame type.
  • Implement Twitter feed frame type.
  • Implement Instagram feed frame type.
  • Implement FaceBook feed frame type.
  • Implement PowerPoint frame type.
  • Implement Panel layer funtion for overlapping panels.
  • Implement sorting and paginations in the frame list page grid.
  • Implement persistent cookie-based display auto-discovery key instead of the IP address (possible solution here).
  • Transform DMM EF data model from data-first to code-first for simpler maintenance and database deployment.
  • Improve frame and panel preview user experience by means of javascript.
  • Migrate DMP canvas from Prototype 1.7 to AngularJS.

Non-programming tasks

  • Translate language resources to other languages.
  • Test with browsers not yet known to be supported and provide your valuable feedback.
  • Report issues here.
  • Spread the word around, give us a star!

License

Display Monkey is licensed under the terms of MIT License. See full terms here.

displaymonkey's People

Contributors

displaymonkey avatar hanskatsman avatar johnmonstertrx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

displaymonkey's Issues

Power BI reports not listed

Hi ,

I have created reports in Power Bi and make them as public. I have configured the Azure account in display monkey as per your documentation.
I try to create a new frame with Power Bi reports "Remote server returns 404" issue has been thrown.
Can you please help me to resolve this issue?

Regards,
Rameshkumar Arumugam.

No events today

I've added an Office 365 account and setup a frame to display the events, but I'm not seeing events listed even though they exist on the account's calendar. I have it set to show 10 events. Not having any luck.

Wrong Display at locations

I have around 20 conference rooms that are being put into production. The first 11 went without a hitch, but my conference rooms 12-15 are all showing the same content as conference room 11. All share the same canvas but have different locations set up and different outlook calendar frames set (each with the correct designated location and unique mailbox). It also isn't just the calendar that is wrong, the whole title is wrong. I also looked in the database to see of anything obvious and don't see anything there. I can't see what is wrong.

We are on v.1.5.2.162.

Attached are some screenshots for room 12 (which shows 11 instead of 12).

Thoughts on where to look next?

Alan
locationinfo
outlooksetup
roomdisplay

Frame ready timeout not working

Hi Guys,

I have some doubts in Frame ready time out. As you mentioned in the document, Frame ready event timeout is preloading the next frame. I have created the display with 3 frames with each has 1 min duration and 30 sec for frame ready event. But next frame not loaded at 30 sec before it will be loaded 10 sec before the next frame.
Can you please provide more detail about Frame ready event timeout?

Regards,
Rameshkumar Arumugam.

Azure Account Can't Login

After working for months, my DM PowerBI account is failing to login with a "AADSTS50126: Invalid username or password" response. I wonder if Microsoft have changed something?
-Password hasn't expired, and PBI licence is fine.
-Changing the password didn't help.
-Using a different account, with a new app registration has the same problem.
-DM is up to date.

Error is like:
AADSTS70002: Error validating credentials. AADSTS50126: Invalid username or password, Trace ID: c738f926-5ca3-40e3-9beb-21ce8f4f2000, Correlation ID: 968cca79-936b-4330-81c2-c1d4799d741b, Timestamp: 2018-06-15 15:17:01Z

Then becomes like:
AADSTS70002: Error validating credentials. AADSTS50053: You've tried to sign in too many times with an incorrect user ID or password., Trace ID: 5fc3240f-f784-4d94-8e96-46af8c2a2000, Correlation ID: 0f4211a6-4d87-4d2d-99f2-76101fca1191, Timestamp: 2018-06-15 15:17:46Z

If it makes any difference, my domain is federated with AAD, using ADFS.

Cheers,

Thad

Problem with Configurations

Hello, when I want to change any numeric option in Setup-->Other-->Configurations like Caché Expiration,Max image upload size... I receive an error. In this case, this is the error when I want to increase the maximum image upload size:

Source -- Setting/Edit
Message -- Source array was not long enough. Check srcIndex and length, and the array's lower bounds.

StackTrace

at System.ComponentModel.ReflectPropertyDescriptor.GetValue(Object component)
at System.Web.Mvc.AssociatedMetadataProvider.<>c__DisplayClass3.b__2()
at System.Web.Mvc.ModelMetadata.get_Model()
at System.Web.Mvc.DataAnnotationsModelValidator.Validate(Object container)
at System.Web.Mvc.ModelValidator.CompositeModelValidator.d__1.MoveNext()
at System.Web.Mvc.DefaultModelBinder.OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
at System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Object model)
at System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
at System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
at System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor)
at System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.b__19

Thank you.

Problems with Video content

Hi, I am having problems getting video frames to play reliably in Chrome. In IE the videos always play, but in Chrome, when I first browse to the display URL, I just get the poster gif (the "4,3,2,1" animation) for the duration of the frame. However if I then press F5 to refresh, the display restarts and the video then plays perfectly. The video is 4.5MB in MP4 format. Does anyone know what I can try to get this working correctly?

(I am using Chromebits to show Display Monkey content and so switching browser isn't an option)

Thanks

Media Location?

Where is media stored that is uploaded in DisplayMonkey, I've tried to look everywhere and can't find it, Any help would be great.

Exchange EWS error

Hi

I am getting "Exchange Web Services are not currently available for this request because none of the Client Access Servers in the destination site could process the request." error while connecting to EWS. but normally I can connect from https://domain.com/EWS/service.aspx directly with the same username and password. what can be the reason?

regards,

Unique CSS for new Outlook Frame Template

We are wanting to have a set of outlook calendars all displayed on one panel. This will change the CSS from the existing (which I want to stay as is for our individual room layouts). I created a new frame template and copied in the simplified version as a base. I then copied all of the .outlook class into my custom.css file renaming the class to calmult. I then changed the Div in the template to use the calmult class. When I do this, the display on the canvas shows:

Error: Cannot set property 'id' of undefined
Where: _initFrame
When: 2017-11-02T12:30:56-05:00
Info: {frameId:25,panel:8}

Is this not possible to do or am I just missing something somewhere.

Thanks

Alan

Tips on display size settings

Good morning,

We have just implemented DisplayMonkey in the hopes of using it instead of suppliers such as ViewNeo.

It looks like it will do everything we need it too. The only issue we have is that on our demo display screen, we always seem to have trouble getting the entire image we have uploaded to fit on the screen. We've tried various file sizes, crop/fill/fit, etc.

I'm not sure what we're doing wrong with the canvas or display size but it makes our simple images look a bit rubbish...

GIf that get uploaded not animated

anyone know how to fix this? any gifs that are being uploaded only show the first screen and not the animation. seems to be lost in the upload.

Multiple Days in Outlook Calendar view

Is there a way to get multiple days in the Calendar View? We are trying to show upcoming project ship dates which we keep in an Outlook calendar for our floor staff. Today is great, but being able to see the next week's worth of ship dates would be great.

mp4 video not found - alternative video

hi, I can't understand why when I load a video mp4 in the media then I can't see it and tells me alternative video with the animation 1-2-3, the mp4 format must be supported by the right video frame?
then the page is blocked and I have to restart the webserver in order to reuse the management.
did I do something wrong?
and I add that it is not even eliminable from the media.
thanks.

Very long video publishing.

Creating new frame with video type. Is it normal that 25mb .mp4 video publishing takes with no end or it's taking 2-3 hours with 80% cpu usage? Computer I5 6500, 8 ram, SSD.
Thank you

Quick Book and Event Label

Is there a way to change what is put in as the event label with a quick book. Currently, it is hard coded to "Test" which isn't quite what I would want in production. :-)

Thanks

Alan

Max Recurrence Interval not workign

According to the documentation for Full-screen panels:

A Max recurrence interval may be set on the Full-screen Panel to limit the number of seconds before the presentation should go into Full-screen mode.

However, when we tried to use this to switch our displays over to a full-screen video, it did not work. For example, if we set it to 60s, we would notice that the display would go all black shortly after a minute later, like it was going to change to the full-screen video, but then it would quickly re-load the regular multi-panel view.

We could only get it to switch to full screen by reducing the frame times on the other panels so that the maximum was 5 minutes. After 5 minutes, the display did correctly switch to full screen and stay on that for the duration set in the full-screen frame (which, even without Max Recurrence Interval, really is a cool feature!)

Video or youtube frame on background

i have four panels, first one confgured fullscreen with video/YT/images frames, other three small panel with HTML frame on top. when picture turns evrerything it's ok, when video or YT turns, hides all other panell. where is error?

Install Errors

2018-08-07_13-54-31
I'm trying to install Display Monkey and getting errors:

Server Error in '/DisplayMonkey_Management' Application.
Runtime Error
Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed.
Details: To enable the details of this specific error message to be viewable on the local server machine, please create a tag within a "web.config" configuration file located in the root directory of the current web application. This tag should then have its "mode" attribute set to "RemoteOnly". To enable the details to be viewable on remote machines, please set "mode" to "Off".
http://localhost/DisplayMonkey_Management
Notes: The current error page you are seeing can be replaced by a custom error page by modifying the "defaultRedirect" attribute of the application's configuration tag to point to a custom error page URL.
AND:
http://localhost/DisplayMonkey/Account/Login.aspx?ReturnUrl=%2fDisplayMonkey%2f
Server Error in '/DisplayMonkey' Application.
The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.
Requested URL: /DisplayMonkey/Account/Login.aspx
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.7.2558.0

Japanese dates in datepicker control on google chrome

when running the management modules on a google chrome browser the calendercontrol shows japanese names for the days and months.
This is only on google chrome (IE works fine)
We have this on both of our production servers in the company. local language is dutch and afrikaans

I could not reproduce the problem when running the project direct from visual studio in Chrome,
Then it displays without a problem and shows english dates
Thanks Hans Katsman

Power BI Gateway

Hi DM,

I switched one of my Power BI datasets to use an Enterprise Gateway and now get a "filterError" on DM, instead of my tile:

image

I'm running v.1.4.0.145, local windows server.

Thanks,

Thad

PowerBI frame renders (when trying to delete) but does not render in presentation

I was able to successfully connect to powerbi (through azure setup..etc).
I added 1 canvas, 1 panel, one powerbi frame. I noticed that when I try to delete the frame, the page asks me for confirmation and renders the powerbi report correctly on the side. (See picture2). Both Management and presentation are running on the same pc.
When I try to register and select the monitor, it show me this error :
image

with the power bi logo coming in and out but nothing else.

Picture 2
image

Error connecting with Exchange 2016 + Adhoc meeting Event

I am trying to connect to an Exchange 2016 calendar. It seems when I put in the account information that it is OK, but when I go to the display, I have the following error:

Error: Server error
Where: Outlook::callBack::onSuccess
When: 2017-08-17T12:41:13-05:00
Info: {Error:The SMTP address has no mailbox associated with it.,Data:{FrameId:1405,PanelId:123,DisplayId:41,Culture:en-US}}

The other minor thing is that when I do a quick booking, the event description is "Test". Is there a place I can change that to occupied or on demand meeting, etc. ?
Thanks!

Alan

Exchange erro

Hi,

I am getting below messages while connecting to exchange server account. what can be the reason? do you have an idea?

Regards,

Error: Server error
Where: Outlook::callBack::onSuccess
When: 2017-03-10T09:02:30+03:00
Info: {Error:Object already exists.\r\n,Data:{FrameId:1398,PanelId:117,DisplayId:41,Culture:}}

Translate in french

Hello,

I would like to change the text in French, but I don't know how. Is there a solution ?

Thank you.

Jérémy

Just Black Canvas

As an Output I just get an black canvas. If I change the background of the canvas (picture or background colour) there's no effect. No Panels as well.

Any ideas? Or paid support? I've written 2 mails but no reaction...

Error logging?

I'm trying to determine what isn't working with my connection to our SSRS report server, and I'm stumped as to how I can diagnose the issue. The "Report Server Accounts" area in the management console doesn't appear to do any validation of the configuration, so I can't tell if there is a connection or login problem. And when I add a frame with a link to a report, I get a question mark preview icon, but no error message. On the actual display, all I see is a broken image icon with the "alt text" name of the frame.

Is there any optional logging I can turn on to try to figure out what is happening? Or something already available that I just can't find in the documentation?

Runtime Error

I'm trying to set up this Digital Signage software for the company I work for but I ran into an error and I'm unsure on the next steps to get around it, The error is as following:

2018-08-02_13-19-41

I followed the steps given and made a DisplayMonkey user in Server Management Studio but it didn't work so I went about trying to make another two users but didn't work either, I gave them db_owner permissions.

mstsc_2018-08-02_13-26-09

I edited the web.config file for both DisplayMonkey_Management and they have the same details in them and I have them as the following:

mstsc_2018-08-02_13-31-06

At this point I was slowly losing hope and had no idea what to do, I added a new user in the server rather than the database with a password (as shown above) and user mapped it to the DisplayMonkey database, Seen below:

mstsc_2018-08-02_13-35-56

I'm completely out of ideas, I'm using Windows Server 2012, Not sure if it's something I haven't configured properly or if it's something I haven't installed in Server manager/Roles and features.

Thanks.

Error: Object already exists. when displaying Power BI frame

Error: Object already exists.
Where: Powerbi::callBack::onSuccess
When: 2017-02-03T01:32:54-08:00
Info: {Error:Object already exists.\r\n,Data:{FrameId:1403,PanelId:119,DisplayId:41,Culture:en-US,Details:null}}

I have managed to get the BI report display once, but after i wipe and reinstall DisplayMonkey, it stops showing the charts now.

Invalid date on BeginsOn and EndsOn form fields

Hi,

I'm trying out Display Monkey and have hit a problem with Enering dates in the memo frame for begin and end. I'm in the uk so the forms input field calender show the firleds in a DD/MM/YYYY format. But when I enter 23/08/2018 I get an error like this:

The field Begins on must be a date.

if I change it manualy to 08/23/2018 I get this error:

The value '08/23/2018' is not valid for BeginsOn.

What do I need to do to get this from to accept dates?

Thanks,
Simon

Outlook display organizer instead of subject

Hi,

Would it be possible to display the organizer name instead if the subject in the Outlook frame?
This would make this solution more acceptable on our meeting rooms so sensitive subjects aren't displayed.

Tnx!

SSRS Report Path

We are having a bear of a time trying to get this working with SSRS.

Our Report server URL is
http://yeti.jamestowndistributors.com/ReportServer
though we have tried

SSRS | http://yeti.jamestowndistributors.com/ReportServer | jamestowndistributors.com\liamk | Delete
ssrs2 | http://yeti.jamestowndistributors.com/reports | jamestowndistributors.com\liamk | Delete
Yeti | https://yeti.jamestowndistributors.com/ReportServer | jamestowndistributors.com\liamk | Delete
Yeti1 | http://yeti.jamestowndistributors.com/ReportServer? | jamestowndistributors.com\liamk | Delete

From there we have tried our path. as instructed by the documentation.

/Warehouse/Orders+Waiting+To+Be+Releaed+To+Pick

I have tried copying the url from the report page itself, not that I thought that would work.

But even using the server url and the path in a browser as suggested by your docs only brings me to the root of the report server not the actual report.

Anyone have any hints as the documentation does not provide a lot to go on?

Installation Issue

Hi, I am having an issue across both the presentation and management applications. On the presentation application, I see a name reference to displaymonkeyDB in the web.config however your instructions say the DB should be called "displaymonkey". When I launch the presentation url, I do see the webpage and header, but also the error "Object reference not set to an instance of an object.". Can you breakdown the composition of the web.config connection string? What could be the cause for this error?

A second issue I am having is with the Management application, where it simply gives me an IIS runtime error. I am seeing in the web.config a reference to "displaymonkeyentities", but there is no mention in your documentation as to whether this is the DB or instance name. Kindly advise.

Thanks.

YouTube AutoLoop

I assume the AutoLoop setting for YouTube video is intended to restart the video for as long as the fram duration is set. If this is correct, then it doesn't appear to be working. Turning the AutoLoop option on/off has no impact to the video.

Am I missing something?

Installation error

I am having installation issues on server 2012 R2 with SQL express 2014. Are there any known issues as I can't load the management interface (displaymonkey_management? I get a runtime error ...

Deployment to Azure Webapp + SQL

I just setup Azure webapp + SQL and deployed via Github.
I edited the DB connection in web.config and managed to see the Presentation successfully.

However, the Management folder wasn't deployed. I tried to deploy manually but it just won't work.

Play a sound on event state change Outlook

Hi,

Would it be possible to play a sound when an event is started, ends or changes?
This way attendants will be reminded there time is up when this is used as a meeting room presentation background.

Tnx!

Problem with Database

Hello, I found 2 bugs with Database.

If you run anyone of the SQL Files to create the database, is there a problem with the foreign keys. If you want to delete a Canvas that is related to a Display, the program return a SQL Error.

And if you run the SQL Script without demo data, there is a problem with the Dashboard, that fails until you insert one thing of each type.

Thank you very much for your software.

Reuse of frame in multiple panels/canvases

I am not sure if this is the general forum site or only for bugs, etc. Sorry if it is the wrong thing.

We are looking at having several displays with the exact same layout but a few different items. So, for things like an HTML frame, I would like to have that same HTML frame on multiple panels/canvases so that when we need to change it to say something else, it would be deployed to all locations. It seems a frame is tied to one and only one canvas. Maybe the frame templates do this (I could handle that possibly with an HTML frame type but without the WYSIWYG editor) but I am not sure. We could live without some of the "extras" but it would be nice at each of our rooms (we are looking at room entry booking/displays) to be able to have some content that can easily be edited for the day or week but not have to edit each frame individually.
Thanks
Alan

Weather API: Yahoo GEO place finder YQL not supported

This call:

http://query.yahooapis.com/v1/public/yql?q=select+*+from+geo.placefinder+where+text%3D%2233.52068%2C-86.81176%22+and+gflags%3D%22R%22

Results in the following XML:

<?xml version="1.0" encoding="UTF-8"?>
-<query yahoo:lang="en-US" yahoo:created="2017-02-03T18:46:49Z" yahoo:count="0" xmlns:yahoo="http://www.yahooapis.com/v1/base.rng">
<!-- total: 2 -->
<!-- prod_bf1_1;paas.yql;queryyahooapiscomproductionbf1;8055ca03-e7ed-11e6-bcc3-d4ae52974741 -->
<meta>
<message>geo.placefinder table is no longer supported</message>
</meta>
<results/>
</query>

PowerBI detailed documentation

Hi,

I like to use DisplayMonkey to display PowerBi charts in our office.
But I have some trouble to make an Azure Account inside DisplayMonkey.
I always get the errors message that my username or password is not valid.
With the same credentials I can login into my PowerBi account.

I tried to follow the instructions for generation a new app inside the Azure backend but the screenshots on the instructions page looks different to the pages that I see. And I'm not shure how the PowerBi links should look like to display them inside DisplayMonkey.

Is it possible to get a more detailed example?

I need to know is the needed login URL this one: https://app.powerbi.com
And how looks like the redirect URL? Like this: https://app.powerbi.com/redirect

Where can I enter the URL to the specific chart that I want to display?

thanks in advance
Frank

Upload file size

I've set the max upload size for pictures to around 50mb
When uploading even a 200kb jpeg, it alerts me that the max filesize is 50mb and prevents me from uploading.
Any tricks I'm missing?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.