Skip to content

Instantly share code, notes, and snippets.

v213V2rX9DDV3QkKvfIcyHlemhiPe3coD3zMD2zUpf8padb)dzdMkLhyp(6d(EKV3Zz75CUgmHgzHYdvQsrv9pHOOO0O8epeLx4b7KiEGxw1NUQsGLHuxHceHYdvQIGu)oNZ(D2V7SZS7AfTXFUZ8z((9Z8DMDMzND2dR9tELlC6x)K)JN7SN)v249UW2dV803CNHtU88)Tn(pE3XBglvIyD(JD8PtMV3UdV0oJMND6P7nzXGt(pT348DhnzXkwjkE(FZ5hn8kqkZZo1OzxAE2Rngm2L2z60DroY8hZHZ5hpF8KRm4f2z6SRJS0nS0PhoB203C20PR8Monko)B4W5eJgUy7bhBNPZNVYHPrjjIg0U44RmENV98bVY0zBT9sAXmjp)VJwdF1fJ3z8IRp4CtxmgsEWtp45MSy8rV4Ojt3DowgrXdGqzfmn)rPw64t39sdxGgcjPkEyeQTW0OkyCfKvb5vqrfmPckZFqQZF(Dgo)QOttvfhUeQsYpYZnB3PZGk2RnAy(0jdo90lp(ngV1WLYmRmXZoEhS0kzXtIWu3MhWmN8TwmB4wlS0vfFleQTqDufmUcYQG880wf2zZn)7WDgC8zdFJfMooOswzbEum2uWJtA0n6mJVY2lMd9XhvYHXZp4stn6YdEHrdNL9kZgp5QJSMtyBE4jrvW4kOT5HdTFORtf5hQMzp3odxmAWYQw(3e5S5MXBkv6On5BQ3ugTjtVjNTjpAtrurA70KlPP7GMicPH6kbkXHq8MBUjZXPnZt6AcjXPYvovL2SkO7IMSrnTfAe)NskrATsKKei2K2QmrdRiLqvwIKwJMuFORf)f66LiaTGTM(O1W)ksWtf5rXn7n1gnIHJjLi2uI0yv7k2lns9)qv0c1PJKNmCEnJcmySB69ARg4y(Zo4cBpE0ox2m60zFJ34ONYmPMvUmF1kmo8Qw3YAiPxfDlNqJ7uR0EZddAwtiaAOGeHfueXAI6EIl9LNngz9ucHwZ7TT0KebjdkOAov2IGKnASdNhrfP
@canibanoglu
canibanoglu / Procfile
Last active November 29, 2019 10:42 — forked from troygoode/Procfile
basic example node.js (+express +jade) application configured to run in Heroku(views_layout.jade and views_home.jade should just be "layout.jade" and "home.jade" inside the "views" subdirectory)(public_home.js should just be "home.js" inside the "public" subdirectory)
web: node server.js

What is this about?

Even though most of us have a general idea , I still think that a problem description is a good thing.

We want to achieve gapless playback on our apps. This is especially important for classical music (at least I think so) because there are works that actually don't have any stops between movements. Currently, we have a best-effort approach to having a gapless playback experience for users. What this means is that we preload the audio but we're not doing anything to ensure gapless playback.

This is where Media Source Extensions (MSE) API comes in. You can read more about MSE API here but in short it gives the developers a finer level of control over what gets played by the `` tag. This really gives the developers a lot of power and enables us to directly manipulate the audio stream. An important implication of this is that we can make sure that there is only one audio stream and append next

Sonos Funnel

General Description

The Sonos funnel is how a Sonos user connects their Sonos and Idagio accounts.

The process starts in the Sonos app, where they find our service and try to add it to their Sonos system. From there they are either routed to the Join funnel (found at /sonos/join) or the Login funnel (found at /sonos/login?linkCode=freshCakes). Sonos knows about both of these URLs and they use them to route the users to the correct sub-funnels. As such, changing these URLs should be avoided as much as possible (I don’t actually know if it is a lot of work for the backend team to update these URLs in their configuration but it should at least be kept in mind that URL changes involve changes to the backend as well).

The actual authorisation happens in the Login funnel, where do user clicks a button to post two values to our backend.

# coding=UTF-8
import curses
import locale
import time
locale.setlocale(locale.LC_ALL, '')
code = locale.getpreferredencoding()
class AddCharCommand(object):
def __init__(self, window, line_start, y, x, character):
"""