13 Oct 2014 is a network jukebox that allows members to play music out of the speakers in the ACM Office. It’s one of my largest personal software projects to date. How it works Users log into the Beats web frontend and queue up songs to be played, which can be either songs that have been loaded into the application, or any video on YouTube. Songs in the queue are scheduled using an algorithm known as. This algorithm is intended for scheduling network packets, but I adapted it for music scheduling by equating songs to packets and song length to packet size.
PGPS allows for a service (in this case, play time on Beats) to be distributed fairly to multiple users. It takes into account song length, the user that queued the song, and the time at which they queued it to determine the order in which to play songs on the queue. This scheme allows for different users to be given different weights, which would grant them a larger or smaller proportion of a given amount of play time, but in my implementation all users are given equal weight. Thus, songs queued by different users will be scheduled in such a way that all users on the queue at a given point in time get a similar amount of play time per unit time, or in other words, a similar “rate” of Beats usage. In Beats, however, users can also vote for songs, which increases their individual weights and can potentially bump them in front of nearby songs in the queue. This functionality is a feature of Beats, not part of the actual PGPS specification.
[![Beats artist view](/images/2014/10/beats-artist-screenshot.png)](/images/2014/10/beats-artist-screenshot.png) _Artist view. Album art support has [yet to be implemented](The Beats backend itself is written as a REST API server in Python using Flask. It uses Python bindings for media player integration, and the Python library is used to retrieve YouTube stream URLs and metadata. Song metadata and queue data are stored in a MySQL database. The PGPS scheduler is implemented. The frontend is an AngularJS application largely written by, an ACM member who graduated last year and narrowly avoided the responsibility of maintaining the system. User authentication is handled by ACM’s Atlassian Crowd server, which checks a user’s credentials against the UIUC Active Directory server and also verifies that the user is an ACM member.
Manual po remontu akpp u660e. Che Kung Temple at Sha Tin is always visited by a large number of devotees who come to worship the god and spin the fan-bladed wheel of fortune for good luck on the third day of the lunar new year.
Beats replaced the Acoustics Media Player, a similar system that became unmaintained over time and was eventually retired last year. I began developing Beats in February, and deployed it at the beginning of this semester. It’s been serving ACM faithfully since August, and currently has over 18,000 songs in its library. The software supports multiple players with separate queues and a shared music library, and thus Beats instances are currently deployed in two of the three rooms in the ACM Office. The project itself has already seen a number of pull requests, so I am hopeful that Beats will continue to be maintained after I graduate.
22 Jul 2014 This past weekend was the Khan Academy Healthy Hackathon. Check out for details about what exactly the Healthy Hackathon is and what makes it special, but in a nutshell, we were required to be “healthy hackers.” In other words, we had to eat healthily (no junk food) and sleep well every night. To that end, everyone is kicked out of the office at 11:45 pm and let back in the next morning at 9:30 am.
My team’s goal was to make “a beautiful new ‘KA today at a glance’ dashboard” for our soon-to-be new office. Each member of my team was in a different part of the US — Mountain View, Princeton, and Boston — but we still managed to be very productive thanks to science (read: HipChat).
After three days of long-distance hacking, this is what we ended up with: The Khan Academy Dashboard (a.k.a. The KAshboard) The KAshboard is essentially a web application optimized for a 1080p display. The web frontend is built entirely with, and the backend uses. The backend exists mainly to make the variety of API calls necessary to retrieve all the relevant information (Twitter, GitHub, Google BigQuery, etc.). It also does some caching for website analytics data obtained using BigQuery.
Here are some details on a few of the widgets on the dashboard. Fingers crossed All of our commits require in the commit message. When a change is either trivial or not testable locally, we usually write 'Fingers crossed' for the test plan. Khan Academy Stories The widget at the top right cycles through recent submitted to Khan Academy. We did some here because no, none of us are interested in applying for a loan at the moment. Current experiments This widget showcases ongoing experiments on.