ProgrammableWebDaily API RoundUp: Klear, SocialInviter, TwitchTV, and Goodreads Libraries

Every day, the ProgrammableWeb team is busy, updating its three primary directories for APIs, clients (language-specific libraries or SDKs for consuming or providing APIs), and source code samples.

Matt Webb (Schulze & Webb)Filtered for coherent narratives


The Phantom Time Hypothesis suggests that the early Middle Ages (614-911 A.D.) never happened the implication of which is that Charlemagne was a fictional character and that the year is not 2015, but actually 1718. Somebody jumped the calendar forward; documents were forged.

Mixtape of the Lost Decade: evidence is mounting that points to a 'lost decade' between what we now remember as the 1970s and 1980s. Art, toys and music are all rediscovered -- a distinct era, the 19A0s.

The Internet was better during the 19A0s.


The city of Guntrum at OpenGeofiction, a Google Maps-style collaborative fictional world...

This world is set in modern times, so it doesn't have orcs or elves, but rather power plants, motorways and housing projects. But also picturesque old towns, beautiful national parks and lonely beaches.

(About.), founded 1999, was a web search engine that mapped results to a virtual reality representation of the continent of the same name. More:

The display of search results was a 3D landscape, complete with clusters of structures (related topics) and multilevel buildings (important sites).


The impetus for the Visual Net is Mr. Bray's long-held belief that users find a shared landscape a comfortable, intuitive way to explore various types of information ... a "shared landscape" makes complex arrangements of data usable by the human mind.


A timeline of events in the history of the Pokemon world.

Transformers: A History.


Surkov is one of President Putin's advisers, and has helped him maintain his power for 15 years.

Adam Curtis on Vladislav Surkov and non-linear warfare [video]:

[Surkov] came originally from the avant-garde art world ... what Surkov has done is to import ideas from conceptual art into the very heart of politics. His aim is to undermine peoples' perceptions of the world, so they never know what is really happening.

[creating a politics where] no-one was sure what was real or fake ... A ceaseless shape-shifting that is unstoppable because it is undefinable

A war where you never know what the enemy are really up to, or even who they are.

[using] the conflict to create a constant state of destabilized perception, in order to manage and control.

We live with a constant vaudeville of contradictory stories that makes it impossible for any real opposition to emerge, because they can't counter it with any coherent narrative of their own.


Surkov published a short story in 2014, just before the Russian invasion of Crimea, Without Sky, set in the future, after the 'fifth world war.' Review in the LRB:

It was the first non-linear war. In the primitive wars of the 19th and 20th centuries it was common for just two sides to fight. Two countries. Two groups of allies. Now four coalitions collided. Not two against two, or three against one. No. All against all.

Surkov: The only things that interest me in the US are Tupac Shakur, Allen Ginsberg and Jackson Pollock. I don't need a visa to access their work. I lose nothing.

Russia. Pollock. Modern art was a CIA weapon -- The Central Intelligence Agency used American modern art - including the works of such artists as Jackson Pollock, Robert Motherwell, Willem de Kooning and Mark Rothko - as a weapon in the Cold War. Why?

Because in the propaganda war with the Soviet Union, this new artistic movement could be held up as proof of the creativity, the intellectual freedom, and the cultural power of the US. Russian art, strapped into the communist ideological straitjacket, could not compete.


The centrepiece of the CIA campaign became the Congress for Cultural Freedom, a vast jamboree of intellectuals, writers, historians, poets, and artists which was set up with CIA funds in 1950 and run by a CIA agent.

Several inches were cut from Jackson Pollock's Mural by Marcel Duchamp in 1943, so it would fit in Peggy Guggenheim's apartment.

Those inches of canvas have never been found.

ProgrammableWebTop 10 Sports APIs: Nike+, Yahoo Fantasy Sports, Fitbit

The use of technology in the sports industry has risen rapidly in recent years. More and more professional and amateur sports teams are using technology for scorekeeping, team management, team statistics, live game updates, sports analytics and more.

Uche & Chimezie OgbujiAnythink lit up on Libhub

Following the launch of Denver Public Library and Arapahoe Library District, another Colorado library system has gone live. Anythink is the public library system serving residents of Adams County, with branches Brighton, Commerce City, Thornton and nearby. It's been fun to work with a library with sch a track record of innovation, including its 2009 rebranding looking to revolutionize how people think of libraries, and its commitment to green practices. Anythink's 216,000 or so records have become almost 1.5 million new resource pages.

And about those resources, here are some fun starting points for you.

Stay tuned for more libraries coming along soon.

Uche & Chimezie OgbujiArapahoe Library District goes live and lit up on Libhub

A second library has joined Denver Public Library in going live on the Libhub project. The Arapahoe Library District is another Colorado institution, with branches in the south and east Denver area. Their Libhub landing page has a bit more detail, and most importantly links to the various sorts of the million or so resource pages generated from their catalog. Their own announcement has some more details on their participation.

But as ever, it's all about the resources, all about the data. Here are some fun examples to get you going.

With the American Libraries Association coming along, we're excited to keep the initiative expanding to put libraries back where they can be found on the Web.

ProgrammableWebHack Your Ride Hopes to Increase Connected Car Opportunities

Hack Your Ride, hosted by connected hardware maker Mojio, is an app challenge running from now until Aug. 10.

ProgrammableWebGoogle Announces Classroom API

Google released Classroom last year to encourage and assist with collaboration between teachers and students. Recently, Google released a developer preview of the Classroom API. The API empowers administrators to manage classes at scale and enables developers to integrate third-party applications with Classroom.

Amazon Web ServicesAWS Week in Review – June 29, 2015

Let’s take a quick look at what happened in AWS-land last week:

Monday, June 29
Tuesday, June 30
Wednesday, July 1
Thursday, July 2
Friday, July 3

New & Notable Open Source Packages

  • Cheddar – Java framework for enterprise applications on Amazon Web Services (AWS) using domain-driven design (DDD).
  • Moto – Mock library that allows Python tests to easily mock out the Boto library.
  • Awstools – Tools to play with AWS.
  • EC2-userdata – Gets the user data from an EC2 instance, programmatically or via the command line.

Upcoming Events

Upcoming Events at the AWS Loft (San Francisco)

Upcoming Events at the AWS Loft (New York)

  • July 6 – AWS Bootcamp (10 AM – 6 PM).
  • July 7 – Dr. Werner Vogels (Amazon CTO) + Startup Founders (6:30 PM).
  • July 7 – AWS Bootcamp (10 AM – 6 PM).
  • July 8 – Sumo Logic Panel and Networking Event (6:30 PM).
  • July 9- AWS Activate Social Event (7:00 PM – 10 PM).
  • July 10 – Getting Started with Amazon EMR (Noon – 1 PM).
  • July 10 – Amazon EMR Deep Dive (1 PM – 2 PM).
  • July 10 – How to Build ETL Workflows Using AWS Data Pipeline and EMR (2 – 3 PM).
  • July 14 – Chef Bootcamp (10 AM – 6 PM).
  • July 15 – Chef Bootcamp (10 AM – 6 PM).
  • July 16 – Science Logic (11 AM – Noon).
  • July 16 – Intel Lustre (4 PM – 5 PM).
  • July 17 – Chef Bootcamp (10 AM – 6 PM).
  • July 22 – Mashery (11 AM – 3 PM).
  • July 23 – An Evening with Chef (6:30 PM).
  • July 29 – (6:30 PM).
  • August 5 – Startup Pitch Event and Summer Social (6:30 PM).
  • August 25 – Eliot Horowitz, CTO and Co-Founder of MongoDB (6:30 PM).
  • AWS Summits.

Help Wanted

Stay tuned for next week! In the meantime, follow me on Twitter and subscribe to the RSS feed.


ProgrammableWeb: APIsKlear

The Klear REST API allows developers to access and integrate the functionality of Klear with other applications. Some example API methods include looking up users, retrieving user information, and retrieving audience demographics. Klear (formerly Twtrland) is a social media analysis tool.
Date Updated: 2015-07-06
Tags: [field_primary_category], [field_secondary_categories]

ProgrammableWebNasdaq Goes With Blockchain API Provider For Private Market Arm

The process of handling transactions and shares of private companies has cost stock exchanges millions of dollars over the last few decades.

ProgrammableWebLGA Opens up API to Local Government Partners

This article is a company-provided press release and ProgrammableWeb cannot vouch for the accuracy of the statements within. If you have questions regarding the information below, please contact the company that issued the press release.

The Local Government Association has launched an Application Programming Interface (API) for local government and its partners to easily 'plug in' to the local, regional and national data it holds.

ProgrammableWebWhy Your Go-To Security Tools May Not Cover APIs

The rise of APIs has driven innovation and growth in almost every sector. However, according to a recent article by Jeff Williams for Dark Reading, web APIs are just as vulnerable to attack as traditional web applications.

ProgrammableWebPlex Launches Plex Connect Open Integration Framework

This article is a company-provided press release and ProgrammableWeb cannot vouch for the accuracy of the  statements within. If you have questions regarding the information below, please contact the company that issued the press release.

ProgrammableWebHow Pixel Lab Used Microsoft Edge to Build a Flight Simulator

Several of Microsoft Edge’s platform features were showcased recently during Microsoft’s Build conference. According to a post on the Microsoft Edge Dev Blog, Pixel Lab created a flight simulator using features of the new web platform.

Matt Webb (Schulze & Webb)Filtered for bad things


Mountains that talk about bad things.

It's weird:

two friendly mountains loudly reciting tweets from around the world. ... [a tweet using the word 'bad'] is picked up and converted by a text-to-speech engine, then loudly recited by the mountains in realtime.

You can also visit this world by using a smartphone to have a 360 degree VR experience as one of the villagers living below the mountains.

Bit shonky in that sometimes the voice of the mountains disappears for me, or the tweets doesn't come through. Reload and retry.


Osper is mobile banking - and a credit card - for kids. Jeez, I'd happily use this.

There's a new mobile-only bank coming to the UK, called Atom.

I'm into this. Unbundle the banks. Experiment with different interfaces for consumer banking.


Hey, so what if the dinosaurs were raptured? Like they were all good Christians and they all ascended and the mammals and birds are the Left Behind and it wasn't a meteor after all.

That's what I thought this book was about, but it turns out Rapture of the Raptor is dinosaur erotica instead.

See also: Taken by the T-Rex.


Crystal shows you the best way to communicate with any coworker, prospect, or customer based on their unique personality.

It's an email plug-in that tells you what phrases to change.

Crystal analyzes public data to tell you how you can expect any given person to behave, how he or she wants to be spoken to, and perhaps more importantly, what you can expect your relationship to be like.

Jeremy Keith (Adactio)100 × 100

For 100 days I wrote and published a blog post that was 100 words long. This was all part of the 100 Days project running at Clearleft. It was by turns fun, annoying, rewarding, and tedious.

It feels nice to have 10,000 words written by the end of it even if many of those words were written in haste, without much originality and often without much enthusiasm. There were many evenings when I was already quite tired and then remembered that I had to bash out 100 words. On those occasions, it really felt like a chore, but then, that’s the whole point of the exercise—that you do it every day regardless of how motivated or not you feel on that day.

I missed the daily deadline once. I could make the excuse that it was a really late night of carousing, but I knew in advance that I was going to be out so I could’ve written my 100 words ahead of time—I didn’t.

My exercise of choice wasn’t too arduous. Some of the other Clearlefties picked far more ambitious tasks. Alas, many of them didn’t make it to the finish line, probably because they set their own bar so high. I knew that I wanted to do something that involved writing, and I picked the 100 words constraint simply because it sounded cute.

Lots of people reading my posts thought that 100 words was the upper limit in the same way that 140 characters is the upper limit on Twitter. But for me, the whole point of the exercise was that each post needed to be 100 words exactly. Now I kind of want to write a Twitter client that only lets you post tweets that are exactly 140 characters.

Writing a post that needed to be an exact number of words long was where the challenge lay, but it was also where the reward was found. It was frustrating to have to excise words or even whole sentences just to make the word count fit, but it was also very satisfying when the final post felt like a fully-formed thing.

I realised a few weeks into the project that the piece of software I was writing in (and relying on for an accurate word count) was counting hyphenated phrases as one word. So the phrase “dog-eat-dog world” was counted as two words, not four. I worried that maybe I had already published some posts that were over 100 words long. Later on, I tried to avoid hyphenating, or else I’d add in the hyphens after I had hit the 100 word point. In any case, there may be some discrepancy in the word count between the earlier posts and the later ones.

That’s the thing about an exercise that involves writing exactly 100 words; it leads to existential questions like “what is a word anyway?”

Some of the posts made heavy use of hyperlinks. I wondered whether this was cheating. But then I decided that, given the medium I was publishing on, it would be weird not to have any hyperlinks. And the pieces still stand on their own if you don’t follow any of the links.

Most of the posts used observations from that day for their subject matter—diary-like slices of life. But occasionally I’d put down some wider thought—like days 15, 73, 81, or 98. Still, I suspect it’s the slice-of-life daily updates that will be most interesting to read back on in years to come.

Daniel Glazman (Disruptive Innovations)Il y a des coups de pieds au cul qui se perdent chez Orange

Orange vient de se faire remarquer en poussant une mise à jour absolument lamentable des Livebox résidentielles. Elle a visiblement eu lieu cette nuit sur ma Livebox Play fibre. Que l'on en juge :

  • Le mot de passe de ma Livebox, que j'avais évidemment changé du mot de passe par défaut « admin » vers quelque chose de plus raisonnable a été changé d'office. Il reprend les 8 premiers caractères de la clé WiFi. Si je ne conteste pas ce changement chez les usagers qui, par ignorance ou flemme, avaient conservé le couple admin/admin, il est ridicule et honteux pour les usagers qui avaient changé le mot de passe par défaut.
  • Alors que je n'ai reçu aucune mise à jour de mes Conditions de Service, Orange s'est arrogé le droit d'ouvrir sur ma Livebox un WiFi partagé sous le SSID "orange". Je l'ai évidemment immédiatement désactivé. J'ai d'ailleurs découvert à cette occasion deux autres fonctionnalités activées par défaut : "paiement en ligne avec Internet+" et "paiement en ligne avec Contact+". Ceci est un scandale ! De tels changements ne doivent JAMAIS être gérés en opt-out mais uniquement en opt-in avec une alerte unique au premier contact à la console d'administration et/ou un mail à l'administrateur du service (en général le client sur son mail préférentiel). Mais non, cela a été fait à la hussarde, sans avertissement ni interrogation. NON, je ne souhaite pas que mon accès fibre devienne le hotspot du quartier et que cela perturbe mon dernier hg clone ou mon upload de 400 Go de compilations diverses et variées. Zut à la fin.

Je ne sais pas quel est le décideur chez Orange qui a décidé d'une telle méthode de MàJ mais c'est lamentable et il y a des coups de pied au cul qui se perdent. Pour ceux que cela intéresse, vous trouverez ci-dessous une copie d'écran (cliquable) de la page permettant de désactiver tout ça. Il est à noter que les livebox professionnelles - j'en ai une au bureau - ne semblent pas touchées pour l'instant.

Je me demande désormais quelles modifications intempestives et surtout non désirables cette mise à jour a induites. Je regrette infiniment ma Freebox sur laquelle ce genre de comportement stupide, irrespectueux de l'usager et techniquement complètement crétin, était tout de même plus rare. Je ne parle même pas de la liste des fonctionnalités de la Freebox, sans commune mesure avec cette crasse de Livebox sur laquelle un an de location du lecteur de disque coûte plus cher que le plus cher des lecteurs à la Fnac (et je ne l'ai évidemment pas).

Orange, vous êtes vraiment parfois nuls.

Copie d'écran Orange

ProgrammableWebDaily API RoundUp: Yammer, Medable, Google Distance Matrix Libraries

Every day, the ProgrammableWeb team is busy, updating its three primary directories for APIs, clients (language-specific libraries or SDKs for consuming or providing APIs), and source code samples.

ProgrammableWebThomson Reuters Launches Open Source Market Data APIs

This article is a company-provided press release and ProgrammableWeb cannot vouch for the accuracy of the statements within. If you have questions regarding the information below, please contact the company that issued the press release.

ProgrammableWeb10 Tips To Becoming A Better Programmer

Becoming a complete programmer involves building experience across a range of development tasks, including algorithms, data structure and OOPS, to name a few, over many years.

ProgrammableWebYelp Announces API Console and Will Soon End V1 Endpoints

As Yelp prepares to end version 1 of the Yelp API, the local business data provider announced an API console that allows developers to explore response details returned by the API without writing any code.

Jeremy Keith (Adactio)Baseline

Jake gave a great talk at Responsive Day Out 3 all about nuanced progressive enhancement, with a look at service workers in particular (a technology designed with progressive enhancement at its heart).

To illustrate the performance gains, Jake used his SVGOMG site as an example—a really terrific resource for optimising SVGs.

SVGOMG requires JavaScript for its core functionality (optimising an SVG file). That was a deliberate choice. Jake could’ve made the barrier-to-entry as low as any browser that supports input type="file" but he decided that for this audience (developers) it was a safe assumption that JavaScript would be available.

Jake talked about this in an interview with Paul about the site:

I’m a strong believer in progressive enhancement, but also that each phase of the enhancement needs a user.

I agree completely with this approach. It makes sense to have a valid reason for adding any enhancement. But there’s something about this particular example that wasn’t sitting right with me. It took me a while to figure it out, but I now realise what it is.

Jake is talking about making it work on the server as an enhancement. But that’s not an enhancement, it’s a fallback.

Thinking in terms of fallbacks is more of a “graceful degradation” approach (i.e. for every “full” feature, thinking of a corresponding fallback). That’s not how I like to think of progressive enhancement. I like to think in terms of a baseline. And that baseline, in my mind, does not require a user to justify its existence. That’s because the baseline isn’t there to cover the use cases we can think of, it’s there to cover the use cases we can’t predict.

That might seem like a minor difference in wording to the graceful degradation approach but I think it’s actually a fundamentally different way of approaching the situation.

When I was on the progressive enhancement panel at Edge Conf, Lyza asked how low the baseline should be. I said “as low as possible.” Some of my fellow panelists took issue with this saying it varies from project to project, and that’s completely true, but I think I should’ve clarified that when I talk about a baseline, I’m not talking about browsers. I don’t think about a baseline in terms of “IE4 and above, Android 2.1 and above, etc.”—I think about a baseline in terms of “the minimum required technology to allow a user to accomplish the core task” (that qualification about core tasks is important—the baseline does not need to cover tasks that are nice-to-have; those can safely require more sophisticated technology).

That “minimum required technology” often turns out to be a combination of a web server, HTTP, and some HTML.

So to take SVGOMG as an example, I would begin with the baseline of “allowing a user to optimise an SVG file”. The minimum required technology is a web server running a programme that does the optimisation, and an HTML document that contains a form element with input type="file". Once that’s in place, then I can start applying Jake’s very sensible approach of thinking about enhancements in terms of specific user benefits. In this case, it’s pretty clear that 99.99% of the users would benefit from not having that round-trip to the server and have the SVG optimisation happen in the browser using JavaScript.

There’s an enhancement provided for the use case that I can imagine. But—and this is the subtle but important distinction—there’s a baseline for all the use cases that I can’t think of. I need to recognise that I won’t be able to predict all the possible use cases, and that’s okay—as long there’s a solid baseline in place, I’ve got an insurance policy for unforeseen circumstances. It’s still not perfect, but it lowers the risk somewhat by reducing the number of assumptions being built in at that baseline level.

Going back to Jake’s chat with Paul, he says:

I thought about making the site work without JS by doing the SVG work on the server, but this would be slow and a maintenance burden.

The maintenance burden is a very valid point. This is something that Stuart talked about a while back:

It is in theory possible to write a web app which does processing on the server and is entirely robust against its client-side scripting being broken or missing, and which does processing on the client so that it works when the server’s unavailable or uncontactable or expensive or slow. But let’s be honest here. That’s not an app. That’s two apps.

Leaving aside the promise of isomorphic/universal/whatever JavaScript, this issue of developer convenience is big issue. When I use the term “developer convenience” to label this problem, I am not belittling it in any way—developer convenience is incredibly important (hence the appeal of so many tools and frameworks that make life easier for developers). I still believe that developer convenience should be lower on the list of priorities than having a rock-solid baseline, but I can totally understand if someone doesn’t share that opinion. It’s a personal decision and if the pain involved in making a more universal baseline is greater than the perceived—and, let’s face it, somewhat abstract—benefit, I can totally understand that.

Anyway, that’s my little brain dump about progressive enhancement and baseline experiences. Something about treating the baseline experience as an enhancement was itching at my brain and now that I’ve managed to scratch it, I can see what was troubling me: thinking about the baseline experience in the same way as thinking about enhancements doesn’t work for me.

Personally, I’m going to strive to keep the baseline as low as possible. I’m also going to strive to apply Jake’s maxim about every enhancement requiring a user.

ProgrammableWebDaily API RoundUp: Vault, Ciiva, WaniKani, Plus Fitbit and Twilio Libraries

Every day, the ProgrammableWeb team is busy, updating its three primary directories for APIs, clients (language-specific libraries or SDKs for consuming or providing APIs), and source code samples.

ProgrammableWebHow To Manage APIs with Restlet's APISpark

Conceiving, planning and building useful APIs often requires serious time and effort. But if your API ends up being useful at all, managing your API throughout its life can be equally important. Fully hosted and managed by Restlet, APISpark is a Platform-as-a-Service (PaaS) solution dedicated to the creation, hosting, management and consumption of Web APIs. APISpark helps you host apps, manage existing APIs and document APIs. APISpark is free to use for an unlimited number of APIs with up to 10 concurrent clients.

ProgrammableWebMicrosoft Updates Windows 10 SDK Ahead of General Release

Microsoft is only weeks away from releasing the final build of Windows 10 to OEMs, businesses and consumers. In order to ensure the highest degree of app compatibility, Redmond this week updated the Windows 10 SDK Preview with a handful of new media-focused APIs.

ProgrammableWebMicrosoft Announces Two New Azure Billing APIs

Microsoft has announced the public preview release of two Azure billing APIs: the Azure Usage API and the Azure RateCard API. Cloud computing has long been touted as a way to cut major capital investment in IT infrastructure. However, data confirming such savings is often hard to come by at the individual enterprise level.

ProgrammableWebSpeechTrans API Provides Instant Translation Functionality

SpeechTrans is a universal translator service that allows for instant communication in more than 44 languages. With no need for an interpreter, cross-language conversations can become a part of everyday life. The SpeechTrans API lets developers and companies access this functionality and customize it to suit their needs.

ProgrammableWebDaily API RoundUp: Tableau, Sense360, and PromisePay

Every day, the ProgrammableWeb team is busy, updating its three primary directories for APIs, clients (language-specific libraries or SDKs for consuming or providing APIs), and source code samples. Integration Improves Performance for Campaign Monitor Customers

This article is a company-provided press release and ProgrammableWeb cannot vouch for the accuracy of the statements within. If you have questions regarding the information below, please contact the company that issued the press release.

ProgrammableWebWhy It’s OK To Design Imperfect APIs

This article was prepared by a guest contributor to ProgrammableWeb. The opinions expressed in this article are the author's own and do not necessarily reflect the view of ProgrammableWeb or its editorial staff.

Perfectionism will only get you so far, especially when it comes to API design.

ProgrammableWebPromisePay API Provides Digital Payment Functionality

Powerful payment engines that offer security and an easy and efficient way to pay and get paid are what enables the online marketplace to thrive. It’s what enables businesses to exceed their growth expectations and consumers to get the choice and convenience they desire. With this in mind, PromisePay has set out to create a powerful payment engine that it believes will greatly enhance e-commerce in general.

ProgrammableWebIs Bitcoin the Future of API Monetization?

One of the major areas of friction between application programming interface providers and API consumers is undoubtedly the subscription process. And as your target audience spreads around the world and you add more currencies and taxes, it only grows more complicated.

ProgrammableWebAPI Design Considerations for The Internet of Things

Since the application programming interface, or API, is the circular system running throughout the Internet of Things, you could ask how API design is affecting IoT. Given the constraints inherent to IoT and the potential of its impact, you could also ask how IoT is affecting API design.

Amazon Web ServicesIn the Works – AWS Region in India

We seem to have AWS customers in just about every corner of the world (190 countries at last count). We have offices in many countries, localized content on the AWS web site, and a broad array of certifications and accreditations to give those customers the assurances that they can run many different types of workloads on the AWS Cloud.

Coming to India
As part of our AWS Enterprise Summits in India, we have announced our intent to open an AWS Infrastructure Region there in 2016. With tens of thousands of customers in India already making great use of AWS to drive cost savings, accelerate innovation, speed time to market and expand their geographic reach, I am confident that this new region will become a great home for startups, small-to-medium businesses, enterprises, and the public sector.

AWS customers (and their users) in the region are already taking advantage of our Amazon Route 53 and Amazon CloudFront edge locations in Chennai and Mumbai. Other edge locations that serve the general area in Asia are located in Hong Kong, China, Manila, the Philippines, Australia (Melbourne and Sydney), Japan (Tokyo and Osaka), Korea, Singapore, and Taiwan.

AWS Customers in India
While I’ve got your ear I’d like to tell you about several AWS customers in India.

Tata Motors Limited is a leading Indian multinational automotive manufacturing company headquartered in Mumbai, and is part of Tata Group. The company’s customer portals and its Telematics systems, which lets fleet owners monitor all the vehicles in their fleet on a real time basis, are running on AWS. Tata Motors recently built a parts planning system to forecast spares demand by using ordering and inventory patterns. They use AWS for development landscapes immediately after the project kicks off, which shaves four to six weeks of setup time in a typical project cycle.  Jagdish Belwal (Chief Information Officer of Tata Motors) told us:

Whenever we plan on rolling out a new project or experimenting with a new technology, AWS helps us in quickly provisioning the required infrastructure and enables us in getting up and running at a fast pace. AWS has helped us become more agile and has drastically increased our speed of experimentation and therefore, innovation.

To learn more, watch the Tata Motors AWS Case Study.

NDTV is India’s leading media house with TV channels watched by millions of people across the world.  They have been using AWS since 2009 to run their video platform and to host all of their web properties.  During the May 2014 general election, AWS helped NDTV to handle an unprecedented level of web traffic, scaling 26x from 500 million hits on a normal day to 13 billion hits during election day, and regularly peaked at 400,000 hits per second. Kawaljit Singh (CTO of NDTV Convergence) told us:

We have been an early adopter of AWS and the benefits that we experience is beyond just cost savings, it is the agility that enables us to move fast with new projects that makes a positive impact and real difference to our business. We are very impressed with the staff and tech support teams of AWS, who have been most helpful in providing support and guidance throughout our cloud journey. They worked hand-in-hand with our team so that we are able to handle the massive scale and unpredictability of workloads for the general election event last year, and as a result, the entire process took place without any hitch at all.

To learn more about their record-setting traffic on election day and their cloud journey, read CTO Perspectives I: Building a Media Empire from Scratch and CTO Perspectives II: Handling 13 Billion Hits a Day.

Ferns N Petals is a leading flower and retailer in India with 194 outlets in 74 cities and delivery across 156 countries worldwide. Before using AWS, Ferns N Petals was running its IT infrastructure in a traditional data center.  They turned to AWS in the year 2014 when their business grew rapidly and decided to move their entire online business to the AWS Cloud.  Since moving to AWS, they are able to manage traffic that grows by 80 percent during the festive seasons. Manish Saini (Vice President of online business) had the following to say:

Our experience with AWS over the past year has been excellent.  AWS is now the cornerstone in our growth strategy. We have recently launched two new businesses that include new overseas expansion that are all running on AWS. We are now able to spend more time and resources in areas that matter to our customers such as new mobile app development that will enhance their buying experience.

To learn more about how they use AWS, read Blossoming in the Cloud.

Novi Digital is a wholly owned subsidiary of STAR India, one of the largest media and entertainment companies in India. The company uses AWS to run hotstar, a flagship OTT platform for drama, movies and live sporting events. With more than 20 million downloads in four months, hotstar has seen one of the fastest adoptions of any new digital service anywhere in the world. In fact, during one of the Cricket World Cup matches, hotstar and combined reached a record total of over 2.3 million concurrent streams and more than 50 million video views. Ajit Mohan (Head of Digital, STAR India) had the following to say:

The reliability of the highly scalable AWS cloud platform has enabled hotstar to break many records in the last four months. AWS has been a key partner in helping us deliver a compelling and seamless experience for millions of users.

You can read YouTube of Sports in India, to learn more.

Stay Tuned
I’ll have more information on the new region as we get closer to launch time.

If you are already an AWS developer, you probably know how to take advantage of new regions already. If you are not an AWS developer, why not sign up now and take advantage of the AWS Free Tier?


Jeremy Keith (Adactio)Edge words

I really enjoyed last year’s Edge conference so I made sure not to miss this year’s event, which took place last weekend.

The format was a little different this time ‘round. Last year the whole day was taken up with panels. Now, panels are often rambling, cringeworthy affairs, but Edge Conf is one of the few events that does panels well: they’re run on a tight schedule and put together with lots of work in advance. At this year’s Edge, the morning was taken up with these tightly-run panels as usual, but the afternoon consisted of more Barcamp-like breakout sessions.

I’ve got to be honest: I don’t think the new format worked that well. The breakout sessions didn’t have the true flexibility that you get with an unconference schedule, so there was no opportunity to merge similarly-themed sessions. There was, for example, a session on components at the same time as a session on accessibility in web components.

That highlights the other issue: FOMO. I’m really not a fan of multi-track events; there were so many sessions that sounded really interesting, but I couldn’t clone myself and go to all of them at once.

But, like I said, the first half of the day was taken up with four sequential (rather than parallel) panels and they were all excellent. All of the moderators did a fantastic job, and I was fortunate enough to sit in on the progressive enhancement panel expertly moderated by Lyza.

The event is called Edge for a reason. There is a rarefied atmosphere—and not just because of the broken-down air conditioning. This is a room full of developers on the cutting edge of web development technologies. Being at Edge Conf means being in a bubble. And being in a bubble is absolutely fine as long as you’re aware you’re in a bubble. It would be problematic if anyone were to mistake the audience and the discussions at Edge as being in any way representative of typical working web devs.

One of the most insightful comments of the day came from Christian who said, “Yes, but this is Edge Conf.” You’re going to need some context for that quote, so here it is…

On the web components panel that Christian was moderating, Alex was making a point about the ubiquity of tools—”Tooling was save you”, he said—and he asked for a show of hands from the audience on who was not using some particular tooling technology; transpilers, package managers, build tools, I can’t remember the specific question. Nobody put their hand up. “See?” asked Alex. “Yes”, said Christian, “but this is Edge Conf.”

Now, while I wasn’t keen on the format of the afternoon with its multiple simultaneous breakout sessions, that doesn’t mean I didn’t enjoy the ones I plumped for. Quite the opposite. The last breakout session of the day, again expertly moderated by Lyza, was particularly great.

The discussion was all about progressive enhancement. There seemed to be a general consensus that we’re all 100% committed to the results of progressive enhancement—greater availability, wider reach, and better performance—but that the term itself is widely misunderstood as “making all of your functionality work even with JavaScript switched off”. This misunderstanding couldn’t be further from the truth:

  1. It’s not about making all of your functionality available; it’s making your core functionality available: everything else can be considered an enhancement and it’s perfectly fine if not everyone gets that enhancement.
  2. This isn’t about switching JavaScript off; it’s about any particular technology not being available for reasons we can’t foresee (network issues, browser issues, whatever it may be).

And yet the misunderstanding persists. For that reason, most of the people in the discussion at Edge Conf were in favour of simply dropping the term progressive enhancement and instead focusing on terms like availability and access. Tim writes:

I’m not sure what we call it now. Maybe we do need another term to get people to move away from the “progressive enhancement = working without JS” baggage that distracts from the real goal.

And Stuart writes:

So I’m not going to be talking about progressive enhancement any more. I’m going to be talking about availability. About reach. About my web apps being for everyone even when the universe tries to get in the way.

But Jason writes:

I completely disagree that we should change nomenclature because there exists some small segment of Web designers unwilling to expand their development toolbox. I think progressive enhancement—the term—remains useful, descriptive, and appropriate.

I’m torn. On the one hand, I agree with Jason. The term “progressive enhancement” is a great descriptor. But on the other hand, I don’t want to end up like that guy who’s made it his life’s work to change every instance of the phrase “comprises of” to “comprises” (or “consists of”) on Wikipedia. Technically, he’s correct. But it doesn’t sound like a fun way to spend your days.

I guess my worry is, if I write an article or give a presentation, and I title it something to do with progressive enhancement, am I going to alienate and put off the very audience I’m trying to reach? But if I title it something else, am I tricking people?

Words are hard.

Ben Buchanan (200ok)wdcode 2015 - the Big Stonking Post™

The ansarada frontend crew headed to Web Directions Code in Melbourne, to heckle^H^Hsupport Clark while he was speaking and generally to fill our brains with web goodness. Much fun and coffee was had!

#ansarada crew with Elijah Manor, at Cup of Truth. Fun coffee mission from #wdcode :)

A photo posted by Ben Buchanan (@200ok) on <time datetime="2015-06-26T04:02:49+00:00" style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;">Jun 25, 2015 at 9:02pm PDT</time>

<script async="async" defer="defer" src=""></script>

(The G+ auto-animated version of Elijah's photobomb is even funnier!)

Day one

Alex Russell – The future of the web

When asked to talk about this topic Alex worried at first … Does the web have a future? Is the trajectory good? Truism “future has arrived but is not evenly distributed” is especially true in software.

There are great new feature for the web but many new ideas can't be used universally. Web components was better in the sense that it used the existing platform to extend, rather than building everything from scratch. So what about other parts of the platform?

With TC39 they did a sort of archeology. So he went back and looked at the question what did we think the web was going to look like, back in 2006?

Slide: “WE WON ON DESKTOP” … we did really well with the web on desktop, but just in time for mobile to eat the world. The web is not doing as well on mobile as it did on desktop.

Web users spend 14% of their time on sites and 86% of their time in apps.

The return of ObjectiveC shows that it's not the technology that drives these things. Nobody would have predicted ObjectiveC back in 2006.

We aren't asking the right questions about why the web is not doing better on mobile. Case in point... the W3C's own mobile tech resources aren't responsive!

Google just had to put a graphic on their blog...


It's not about technology, it's about our expectations.

In the dialup era, going online was an occasion. You explicitly decided to sit down at a computer, plug in a modem and get online. You knew it would be slow and just dealt with it.

These days we expect things to work. So when the web fails, when the core tenant that “everything is a click away” fails, we fail the user. From the user's perspective we're a flaky friend that you can't rely on when you need them.

The web has no application model. You cannot tell what is a page, a URL or application. Apps with one single URL break the basic tenants of the web. But then if we make everything the old way with separate URLs will it still work offline?

Our platform currently cannot differentiate page from apps. It's a question the platform simply doesn't answer.

With all these problems... what explains all the e-commerce success? Most of the time and money on mobiles is spent on social and gaming apps. However all the e-commerce happens on sites – in browsers, not apps!

Meanwhile it's expensive to get native app users. $1-2 per install; $9 per signed-in user. That's what you have to spend on advertising/promotion to get people to install AND use your app.

There's also the problem of zombie apps – unmaintained, apps with tiny user bases (a couple of dozen)... the majority of app developers don't make enough money to pay for the tools they need to create apps. “Developer poverty”... where devs are below the poverty line of their ecosystem.

Alex thinks of app development like buying a lottery ticket – it's a chance, a very small number of people get rich. The people who win do make a lot of money. The rest make nothing. “It's sad!”

Because people are desperate to get users into apps, they do really bad things like put full-page blocking interstitials over their website – trying to get the user to install an app instead.

Users use 12-20 apps per month, but visit more than 100 distinct sites per month. (Data from opted-in chrome users)

Distribution is an extremely hard problem in software. It used to be much worse, when you had to sell floppy disks! We don't do that now.

It's the friction that really kills us now. There's a 20% drop-off for apps for every action the user needs to take to get an app working. The web has nailed this – you go to a URL, the site works.

So what's missing?

  1. homescreen access – less typing, more tapping. Chrome can now suggest a user adds a regularly visited site to their home screen. Then you can launch that website full screen. They've moved lots of stuff out in the manifest - <link rel=”manifest” href=”manifest.json” />. “Progressive apps” - you start using them as sites, they start working like apps as you use them.
  2. push notifications – equal access to system UI matters hugely to devs. Chrome can now let a site prompt the user to ask if they want notifications. The notifications work even when Chrome is closed. This doesn't require an install step.
  3. offline support – it isn't an app if doesn't start when you tap. Google Gears and appcache were failures as they assumed far too much about what an app was going to look like. Now they're doing something different, with service workers. Service workers load asynchronously after the first site load, then they can intercept new network requests and show the user a response even if the network isn't available. You can still load the shell of the app. (works in chrome and firefox). Service workers are network progressive enhancement. The sites still work in browsers that don't support service workers. They don't intercept the first load experience, you still need that to work. After that, you can extend users' patience for that initial load time – they can see a response quickly even if there's latency going on.


Alex Sexton – front-end ops (update!)

Quick recap: Alex' article appears in Smashing Mag in 2013; FeOps conference in 2014; then people starting hiring roles called frontend ops... naturally naming front-end ops was the hardest part.

So what is front-end ops? Serving web pages is really hard. Front-End Ops is the collection of things you can do to make serving web pages easier.

It frees other devs from having to think about deployment stuff all the time. Developers split time between writing their app, and working on a great deal of other stuff which is not the app but still has to be done to get the app live.

FeOps also addresses the problem where it's considered normal for frontend developers NOT to be monitoring their application in production. For backend devs that would be insane, so why is it normal for frontend? Particularly now that app logic is being pushed to the client via client-side MVVM/MVC/etc.

Backend programmers habitually automate stuff like error logging, lifecycle logging, application measurement over time (eg. is the app getting faster or slower?)

Performance is the basis of UX; speed is how we measure that. Everything can be measured and tracked, but it's important to read that information correctly.

Tools not rules.

Make computers do the hard work. Use tools to evaluate things you are concerned about. There are testing tools for pretty much everything.


Step 1: forget everything you know because it's wrong. All the stuff yslow taught you is wrong.

Step 2: it's probably the network

Step 3: read Browser Networking by Ilya to fix that...

(missed the others)

Then http2 will come along so we'll have to forget it all over again!

Use Chrome dev tools to simulate slow networks. “If you throttle everything to 3G all the time, you'll do a pretty good job of fixing speed problems...”

Theoretical graphs (timelines):

  • show the load time of different devices on a scale (ie. Laptops are quicker than mobiles..)
  • show the load time of different geographical regions
  • show the load time of different network types (wifi, 3g..)

Theoretical graphs:

  • plot the load times of desktop and mobile separately

Measure twice, optimise once!

Make a dashboard. Get this stuff visible and easy to read:

  • speed index over time (...and then mark commits/deployments)
  • graph your competitors speed index over time!
  • Page weight over time
  • File requests over time
  • Errors IF YOU TAKE ONE THING AWAY... log errors! eg. New Relic
  • Build time over time / general speed of tools
  • Cache everything – don't do the same thing twice

Speed of development = developer happiness.

Use component libraries.

  • They let you focus on re-use, adaptability, performance, test things thoroughly, etc...
  • Use your best days to build up your components, so you don't ruin your app on your worst days.
  • Build responsiveness and accessibility into your component library.
  • Combine documentation and code samples
  • bonus: you get consistency for internal apps

How to make one:

  • choose a preprocessor (they liked kfcss for light preprocessing, Suit CSS for scoping styles and linting them)
  • add your own tests and checks – eg. CSS Colorguard, you can test css!
  • Alex created a tool that converts :hover to .pseudo-hover so they were easier to test. Don't ship that CSS, it's just for testing.
  • Tool to automatically check in a screenshot of the changes that result from code changes.
  • Then... convert your CSS components into JS components (for your JS app) – that is, template it. Never use the patterns directly!

Spare no expense in your tooling! Automate everything, cache everything!

Future considerations: http2 support, async loading, non-js dependencies, web components...

The ultimate idea here is to have machines take the load off the humans, so they can focus their energy on the people using the application rather than the application itself.

(refer to slides for the huge list of tools)


Q: are there any really good resources to learn the deep depths of Chrome Dev Tools.

A: follow talks from Addy Osmani and Paul Irish, they do a good job showing off the shiny stuff.


Chris Roberts – offline with the service worker

Australia is still a very disconnected country. We have large areas with no data network. So Chris's example of needing to check a hotel booking on a plane is pretty common and will be a massive issue for many regions as they start getting online.

Expedia's site stores the user's most recently accessed information, as it's likely they will want it again.

Offline First: the next progressive enhancement technique. “Or perhaps it should be 'unreliable connection first'...”

Don't think of offline as an error situation – we have responsibility to handle the case. Time will not solve this problem – as time goes on, we won't suddenly have 100% of people on great connections. As time goes on people connect in more and more different ways.

Offline strategies:

  • reduce reliance on the server
  • sync when possible – make use of good connections
  • gracefully resolve conflicts
  • query device APIs

Great person to follow on this stuff is Jake Archibald. Also check out his book the “offline cookbook” from 2014 (on his website).

Service worker life cycle:

  • registration
  • installation/cache open
  • proxy the network
  • termination

Browser support:

  • Chrome and Opera yes, now!
  • Firefox soon
  • IE under consideration for Edge
  • Safari no

(John Allsopp notes afterwards – a great way to influence browser vendors is to use things and show the need and demand. Also as this is an enhancement you don't have to wait for full coverage to start giving the benefit to people who can use it.)


Q: do any frameworks have good support for service workers?

A: there are some, but in the meantime work on identifying the shell of your app that you should be serving while offline.

Q: any restrictions on what or how much you can cache?

A: pretty much any http request can be handled; noting CORS impacts


Simon Knox – media streams api (beyond video chat)

We need to escape the reliance on apps for video/access to the camera. Why do we need an app to read the humble QR code?

WEBRTC101 – lets browsers do live video and audio. You can also do screenshots and animated gifs. The API is a bit messy (use a polyfill) interface is a little variable but it's great for things like profile photos – we can't assume users have avatars sitting on their device.

Audio API hooks in really well.

These APIs let you do lots of really cool stuff right now – get in there and play with them!


Jonathon Creenaune – web components

Web Directions Code 2015
(JC won the tshirt stakes. Photo by Steven Cooper.)

Works at Atlassian on their style guide and the UI library that implements it (AUI).

His message: you can start using web components today!

Demo: JC's meme generator web component. “Y U NO PUT STRUCTURE IN DOM!” (bitbucket:jcreenaune/meme-or-die)

It's all DOM. The structure, events and methods are all DOM.

So why would you do this stuff?

The raw markup of a library has a lot of boilerplate and code you can't change. It's nice to abstract that away so people just supply the information you actually need to supply to make things work; and to make the API clear.

[Aside: essentially web components are a universal templating option. Otherwise you need to build out a set for every stack that needs it.]

Web components spec is pretty huge – currently they're just using Custom Elements.

Atlassian created skate.js (IE9+). They're not providing an API to style the component, because that's directly opposed to having a style guide.

So... what sucks about this stuff?

  • Client-side performance – a lot of Atlassian's products have very big DOM views (think Bitbucket diff pages). They had to do heaps of optimisation.
  • Server-side rendering – still an unanswered question, SEO could be a problem
  • Trying to link the original API to the exploded component, eg. For ARIA attributes which need to use common IDs to link elements together.

Web components = separation of interface and implementation of HTML.



Mark Nottingham - HTTP/2 for front-end devs

“in one slide...”

  1. A fully multiplexed binary protocol
    • one connection per origin (better network utilisation)
    • browsers don't have to guess when/where to send requests
  2. ...with header compression
    • many requests in one packet
  3. ...and server push
    • put a response in the browser cache before it knows it needs it

Just by turning it on you can expect ~5-15% performance improvement in most cases. You can do much better by tweaking and tuning.

HTTP/2 is the same for APIs, headers, methods, etc.

You might need new URLs – it requires an encrypted connection, which means in effect https.

Recommendation: move to https now.

HTTP/1 optimisations that no longer work:

  • spriting, inline, concatenation
  • these things reduce the granularity of your code
  • that means this hurts you with http2

You can either serve differently to http2 capable browsers; or you can aggressively push on with http2, but the recommendation here is to get a strategy in place.

Think about prioritisation... in http1, browsers are responsible for deciding request priority and ordering. Http2 gets the server to do it. Look for APIs, data and studies. We don't have a lot of knowledge in this area yet as we haven't had access to do it. You can get this really wrong! It's a lot like chunking... get it wrong and you do a lot of harm.

Server push – in theory can save you a round trip by putting something into cache before the browser needs it. This is so new we don't have any data on how best to use this. Try it, measure, but be careful.

Header compression – it is coarse grained, it works on an entire header. Any header variation blows this up and you don't get any compression. Avoid header variability.

Quick points...

  • TLS – this needs tuning.
  • Client certificates don't work with http2

More reasons you might need new URLs...

Spreading traffic to multiple hosts hurts perf in both http1 and http2. Sharding etc can cause flooding and congestion. You can use connection coalescing if DNS and certificate agree. Recommendation: there can be only one (hostname).

DoS Protection – the bad news is http2 needs more state. The good news is it lets you bound connection.

Connections are long-lived in http2, so you need to architect to accommodate this. It can mess up DNS load balancing (use GOAWAY and soon ALTSVC to manage this).

More servers or less? It's not totally nailed down yet. Twitter was able to reduce their servers; but it's so situational proceed with caution.

Key point: we are just getting started. Give this a year and people are going to have heaps more data, open source tools, frameworks etc.

(lots of deep detail in these slides, if you need the details definitely look this up)

Rhiana Heath – pop-up accessibility

Websites use modals and popups a lot... but screen readers tend not to know about them as there's no really standard way to do them.

Working on a project was using bootstrap – which has been improving, but still isn't perfect.

Tested JAWS and NVAccess NVDA – these two form about 70% of screen reader users. Voiceover is also quite popular; Chromevox is nice but less than 1% usage.

WAI-ARIA sends extra information to the browser, which helps with non-standard interactions and content.

Bootstrap has <div class="modal" role="dialog"> …advice was actually remove the dialog role as it forces all-in-one reading. Otherwise you need to also insert role="document" to reinstate the usual fine-grained control.

Mistake: used aria-hidden="false" and display:none together... it didn't work on the big screen readers. Correction: use the clip rect visually hidden style.

Aria-label is useful for giving extra cues, similar to title but without triggering tooltips.

ARIA implementation is often as simple as updating your existing show/hide functions so they also update aria-hidden's boolean. It's not hard at all.

To keep focus inside the dialog – focusable hidden element at start and end of the dialog, plus a third to close it.

Screen readers read things fast – it's hard to get used to when you don't use a reader all the time, but people who do use them run them even faster than the default.

(check slides for a demo of NVDA in action)


Warwick Cox – Console dot

Awesome things you might not be using right now in Chrome dev tools:

  • console.clear()
  • console.count(label)
  • console.dir(object) – prints out a DOM object
  • console.dirxml(object) – same thing with xml
  • console.error and console.warn – these are useful debuggers
  • – the following console output will be grouped, so you can create a collapsed set of debug information
  • console.groupEnd() - closes a group. Optional but lets you control things nicely.
  • console.profile() and console.profileEnd() - sends data to the profile tab.
  • console.time(label) and console.timeEnd(label) - sends data to the timeline tab.
  • console.table(object) – needs an array of objects, prints them out in a table with their keys. Doesn't print nested objects. You can control what's printed.
  • console.log() - prints a string. You can use %s and %d etc for fine grained control.
  • console.log("%cHack","color:red") You can also style the output (expedia have a console easter egg using this).

Just google “console api” as you'll never remember the URLs in the slides!


Simon Swain – Canvas

16ms to jank! That's our budget.

Canvas transform/translate commands are the key to really understand how to get canvas to do cool stuff. They let you do transforms with a minimum of mathematical calculations.

Classic example is the swarm simulation: you don't define the behaviour, you define the conditions that the actors will respond to and what they will do. Then you see emergent behaviour.

This is how you can build up the Cold War game, where the nation states have a variety of weapons and counter-weapons. You can then run your simulation without actually knowing the result.

(look up the video for this one!)


Rachel Nabors – State of the Animation

Web Directions Code 2015
(photo by Steven Cooper)

Flash may be gone, but the era of web animation has just begun. We still really think of animation as decorative rather than useful.

“Animation is the high road to the brain's GPU – the visual cortex.”

Large companies are now putting serious effort into their design guidelines for animation – Google, Apple, IBM all have detailed guidelines.

Kinds of animation:

  • static – they run from start to finish without variation (start → end) (spinners are static. Start-end-loop)
  • stateful – (default → event → predefined state)
  • dynamic – multiple factors affect events, so there are multiple possible results rather than a predefined state. They determine their own behaviour and end state.

Multi-state animation is not dynamic. You can think of a venn diagram, with stateful animation in the intersection of static and dynamic.

CSS devs naturally gravitate to stateful animation as they work well with classes; which means they degrade gracefully.

Animation libraries (just mentioning two as there as so many) – Greensock (GSAP) is the most flash-like. Velocity.js is very familiar to jQuery users.

There are a lot of organisations with great internal animation libraries... but they tend to have a commercial advantage to keeping them internal, so they don't end up being open source.

A spec you probably haven't heard of: Web Animation API. It adds lots of features that simply aren't available in CSS animation. It's a long spec though - “it's a two international flights spec...”

Naturally there is a polyfill:

Performance is important, as jank breaks the benefits of animation for cognition. Hence Flipboard's 60fps requirement, as they consider non-janky animation to be an accessibility issue. But they used canvas which left people with nothing on other accessibility issues.

The Web Animation API accesses the same rendering engine as CSS, it will have much better performance.

Reflows are a rendering engine problem. The vendors are working on it.

The css property will-change is important to learn at this point.

The various players need to work together:

  • UI Designers – get up to speed on the libraries
  • Devs – check out polyfills, give feedback
  • Animation library devs – read the spec, give feedback
  • Animation spec authors – find better ways of taking feedback, meet people in the field

Discrimination between roles is harmful. People leave the conversation and community, then we end up reinventing and re-learning lessons.

Special announcement – Rachel is an invited expert for the W3C WG for Animation. You can talk to her. She is listening!



(Comment during this time) We are not our tools! We should identify ourselves according to what we make, not the tools we use.

Q: how do you avoid annoying animation?

A: if people notice it then it probably needs to be reviewed.

Day Two

Elijah Manor – Eliminating JS Code Smells

Convoluted Code Smell – too many statements, too much depth, too complex. But what does “complex” mean? JSHint can tune for these factors and give a complexity score. It can throw errors when there are too many arguments or callbacks, etc... Then when you write tests and refactor, you can put numbers on the reduction in complexity.

Copy Paste Code Smell – duplication in code. There are tools like Jsinspect, JSCPD, CodePen which can detect copy+paste code. You can adjust how exactly it needs to match.

Switch Statement Smell – when code violates the Open/Closed Principle (OCP), one of Uncle Bob's SOLID Principles. Instead you can use the Strategy Design Pattern to add new code without touching existing code. Sadly... no tooling for this.

Edge cases? ESLint and JSHint can be disabled for a few lines if you need to.

The This Abyss – this=that, etc. Alternatives... bind, second param on forEach, ES6 fat arrow =>...

Long string concatenation smell – ugly string concatenation with lots of quoting. Alternatives? Tomas Fuchs tweet sized js templating engine. ES6 template strings, including multiline! Or use a full templating or mvc option.

Jquery Inquiry – excessive use of fluent code, where everything is chained. Problem is silent error handling vs long chains of code. Instead refactor out to use delegated events. Put less in document ready.

Temperamental Timer Smell – use of setInterval; which then gets out of sync. Use settimeout with a callback instead, so you can't get out of sync.

Repeat Reassign Smell – repetition. Lots of options, although many feel just as repetitive... Using reduce works... but ended up using lodash flow.

Incessant Interaction Smell – code that needs to be debounced (autocompletes, listening to scroll events, etc). This is better than throttling as it waits for a pause from the user before making calls.

Anonymous Algorithm Smell – when there are anonymous functions used in ways that mess up stack traces, code reuse, etc. Wherever you currently use an anon function, you can name it.

Last thoughts... Eslint is pluggable, so if you want to test something in particular you can write your own (or just as likely someone else has already done that). There are plugins for angular, react, backbone... npm search for eslint plugins!

(lots of code in this one, if you are interested look up the slides)



Q: what's the worst code smell you've encountered?

A: have done all of them... but the most teachable would be the this=that. Most are subjective, best to treat them as learning opportunities.

Q: is there a code smell for “over engineering”? Too much abstraction, etc?

A: yes... although there's a balance of needing to ship vs understandable code; and there are few smells that are always wrong.

Clark Pan – ES6 Symbols

Web Directions Code 2015
(photo by Steven Cooper)

To understand symbols you need to go back to basics of how objects work... and not work!

The ways js handles objects and strings can create unintended effects (presso shows example with values being overridden).

Symbols are a new primitive type – ie. Calling typeof will return “symbol”.

Symbols protect the values they contain and require you to access them via the symbol.

Use cases?

Because symbols are unique, there is no risk of collision. This makes them useful for storing state within web components; and can be used to make private values – that is, avoid polluting your public API. It is much like using jQuery's .data but simpler.

ES6 has also defined built-in symbols. They allow you to hook into language features being exposed in ES6:

  • for of loop (discrete from for in, doesn't need to access index)
  • symbol.iterator
  • instanceof
  • more to come as the language evolves

Biggest use case is encapsulation without (ab)using closures. The people consuming your code don't necessarily want to see everything, you don't want everything in your public API. To hack this, we have been closures to make things psuedo-private. That has lots of side effects – hard to unit test, hard to debug, bad for code re-use, small performance penalty.

Symbols solve encapsulation nicely, letting you set a const and refer to it via symbol. (see slide for pattern)

Browser support – great except for IE :( Useful in io.js or node with the --harmony flag


Ben Teese – ES6 Promises

Why promises? What problem are we trying to solve here? JS is fundamentally asynchronous; and async is hard to do well.

Quick overview...

What's a promise? The formal definitions are very dry and not always easy to understand. A good way to understand is to compare code with/without promises. Compare ye olde jQuery ajax vs the newer fetch API (fetch/then/catch example)... not hugely different.

But then you get into nested ajax calls... and you quickly get into Callback Hell(tm) aka the callback pyramid of doom. Nesting a fetch call is cleaner – (fetch/then with return fetch/then/catch).

Browser support? Latest browsers have them; and there are polyfills, transpilers and frameworks. Commonly people do use them in Node as well.

Deeper dive...

Chaining... then() and catch()

Composition... then and catch only take functions. They can return a promise; return an exception; or return a value.

Throw an exception... so long as you return correctly, you can pass meaningful errors.

Note that when you start getting something that looks a like the pyramid of doom, you can use Promises.all to simplify the code.

A side effect is you can clearly document things in terms of inputs and outputs, and be really clear on the conditions that will affect it.

Unit Testing... because we are focusing on inputs and outputs, testing can be pretty clean. You can dummy up a response easily by using Promise.resolve(), which creates an immediately-resolving promise.

Promises are awesome!

  • chainable & composable
  • resinstate input/output semantics
  • testable & documentable

They are definitely here to stay, it's definitely time to get across them!


James Hunter – Async & Await

Web Directions Code 2015
(photo by Steven Cooper)

Warning to functional programmers: this talk is all about side effects. Sorry!

Talking about code styles as personified friends... pretty funny ;)

But why does async have to be so hard? Why can't we write nice simple async code?

Well you can, eg. With libraries like bluebird to set up coroutines.

But then... what is this black magic? IT'S A HACK!

Three main points....

  1. iterators (control the rate data is returned)
  2. generators
  3. generators again! They have an advanced mode where you can feed values back in as well as get values out

ES2016 brings in async and await to make things much clearer and easier to write (and understand).

function  steve (x) {
const  y = inc()
return  x + y


async  function superSteve (x) {
const  y = await inc()
return  x + y

(Lots of code examples, easier to look up slides!)


Domenic Denicola – Async Frontiers

Usual thing is the four quadrant sync/asyc singular/plural. But this is such a gross over-simplification it's not really useful.

Two axes of interestingness:

  • asynchronicity
  • pluralness

Promises represent the eventual result of an asynchronous action, but they are not a representation of the action itself.

Promises are multi-consumer; but consumers can't cancel the action.

Cancellable promises (“tasks”), appearing in fetch first. Promise subclass where consumers can request cancellation, while still allowing branching etc.

Also adding finally() to all promises (then/catch/finally). Finally always happens where then and catch may not.

Plural+Async... I/O streams, directory listings, sensor readings, events in general... this combination is actually pretty common.

(Extremely concept-dense talk so get into the slides. Lots of good detail on the design decisions that go into writing specs; including the evergreen “how to name it” problem and how to deal with the different points of view... eg. the python mindset vs the C mindset on the committee.)

Lots of inspiration:

Is all this urgent? Mostly not. Streams are pretty urgent so they are working on that as fast as they can go; but many other considerations are interesting and potentially useful but we have usable options in the meantime.


Mark Dalgleish

(Mark Dalgleish – couldn't use laptop during this one, but will be worth reviewing on video!)

Alex Mackey - Maths in Javascript

One person suggested this talk should be “don't use JS for maths...”

The most reported bug in js: 0.1 + 0.2 != 0.3 (eg. 0.30000000000004) what is actually going on here?

A brief history of maths... we have had different number systems through history; and new understandings and rules on how to use them.

Humans like to count in 10s. Nobody really knows why but it's probably to do with having ten fingers. Computers prefer 2s (powers of two underpin binary).

IEEE-754: a not-free standard that defines formats for numbers, interactions, and so on. It's used in lots of modern programming languages and devices. It is a little bit like scientific notation. 5.6 x 10(power of -9)

  • The sign: positive or negative (1bit)
  • Exponent: exponent – bias (very hard to write this bit down!)
  • Mantissa: (always assumes it is preceded by 1. - one-dot)
  • Special values: NaN, Infinity, 0, -Infinity, -0.

There is an IEEE-754 calculator online which helps understand this system. So why do we care?

All numbers in JS are 64 bit IEEE-754 floating point values.

Value Representation

Original Stored as
0.5 0.5
0.25 0.25
0.1 0.100000000014351 (not the real number used in presentation)

Some numbers don't store quite right. Think of it like trying to produce 43c in Australian currency – you simply cannot do it, because we don't have the coins to add up to that value (no 1c or 2c).

So we get some calculation problems.

Integers are always stored exactly, but people tend not to work purely in Ints because it's a little clunky. Much better to use a library:

  • bigdecimal.js (beware: not easy to read or understand)
  • math.js
  • decimal.js
  • big.js

Issues with this? Speed. The libraries are not as fast as native. Also you can't generally do things you'd expect like x+y, you have to things like sum(x,y) or similar syntax.

Comparing numbers can be made more predictable by including a margin of error (noting small differences usually noted with the epsilon symbol, so expect to see that in examples.)

But what about the future? These things aren't great... so what might happen:

  • Decimal type: long standing debate in the ECMAscript community. Has been discussed since v3. But lots of concern about interoperability.
  • Value types proposal
  • ES2016? Unlikely.

Other issues not even discussed...

  • rounding
  • exceeding limits (eg. Number.MAX_SAFE_INT+2)
  • problems parsing json
  • parseInt, parseFloat radix param


  • all numbers stored in IEEE-754, no matter what anything ever tells you
  • some values can't be represented in IEEE-754
  • libraries can help
  • one day the value type proposal could enable quite a lot of new things



Andy Sharman – Classes in ES6

Let's remember a little JS history:

  • Inline scripting used to be the thing (embedded in markup).
  • Then we started using the prototype.
  • Then we started using JS to fix browser shortcomings (jquery).
  • Then we started building on top of JS itself (client-side mvc, templating)

Through these latter stages the libraries were creating classes – but they weren't true classes, so to speak.

ES6 Classes give...

  • inheritance
  • constructors
  • supers
  • getters/setters
  • default params
  • rest params (allows you to receive an unknown number of params)
  • arrow functions (=>)

Isn't all this just syntactic sugar? Yes... to an extent... but it helps create clean, understandable code. While this is possible in prototypal JS it's easy to go wrong, or it takes a lot of time.

Support? Evergreen browsers, IE edge, node/io... but there is a lot of red in the support chart.

You end up needing transpilers, but there are transpilers (babel, traceur) so why not?


Jess Telford – scope chains and closures without the hand waving

Web Directions Code 2015
(photo by Steven Cooper)

1. Scope

  • var – lexical scoping
  • let – block scoping
  • const – block scoping

1.5 Hoisting

  • JS does 2 pass parsing.
  • First pass (hoisting) gives scope – variables get 'hoisted' up to the top of the function.
  • This is where lots of confusing bugs begin. Google this if you aren't comfortable with it.

1 Scopes...

  • Scopes can be nested
  • You can access outer scope but not inner scope.
  • You can have multiple inner scopes
  • This does indeed look like a tree of scopes when you look from outer to inner (top down)
  • When you look the other way, inner to outer, you get a chain (bottom up) not a tree

2 Scope chains

  • If you look for a value, JS walks up the scope chain; if nothing has that value you end up in the global scope.

3 Closures

  • Closures occur when an inner scope references a variable in outer scope.
  • This closes over the referenced variable.

4 Garbage Collection

  • GC kicks in when all the code that might need a value has been executed

5 Shadowing

  • This one is a good concept but a lot of people don't understand it too well
  • When a value is defined more than once in a scope chain, JS reaches the first one and stops; the top-most scope is not closed over.
  • You can avoid a lot of problems here by emulating hoisting and putting all your vars at the top of scope. Use a linter to enforce this!

If you are still not sure:

  • npm install -g scope-chains-closures (self paced workshop)
  • Slides


Kassandra Perch - stop the fanatacism

<script async="async" charset="utf-8" src=""></script>

Privilege – we all have it. Everyone here.

Tech culture is toxic. We're still arguing about Codes of Conduct?! We're still arguing about semicolons! We're still making fun of PHP and Flash devs! We still say “soft skills” like it's a bad thing. We constantly judge each other's experiences instead of accepting them as they are or attempting to understand or learn. We idolise jerks! It's gross!

We happily ignoring it even though it's destructive.

Fanatacism – marked by intense uncritical devotion.

We have all done this at some point!

It shows in the way we stick to our languages - “we're (language) developers!” - even though 99% of the time the language you use will not affect your project's success.

We need to stop telling people the language they like is wrong just because we don't like it. It's possible to discuss a choice with some objectivity.

Similarly nobody will force you to use a language feature – you don't have to use them.

Of course if you expect a programming language to stay the same, you're in the wrong profession.

So many of our arguments boil down to wanting to look smart. We sometimes argue passionately without being able to explain exactly why!

We hire weird archetypes – the hard-to-work-with genius; and the 10x engineer. Both of these archetypes are considered negative qualities in all groups other than young white men. This is called unconscious bias.

We can fix this. We can do a lot with language – we can frame things differently.

Take the fanatacism out. We need to be enthusiastic and encouraging. We don't need to love what we do at the expense of someone else, we can just love what we do.

Invite new people, teach things, discuss your tech, participate in open source if you want to.


Don't discourage “noobs”. Don't say “noobs”. Don't tell people RTFM when you don't have docs!

Be enthusiastic, stop short of fanatacism.

(Kassandra leading the audience all together...) There is nothing wrong with being nice!


ProgrammableWebOracle Wraps REST APIs Around E-Commerce Cloud

Looking once again to extend the reach of its software-as-a-service (SaaS) application portfolio, Oracle today unfurled an e-commerce cloud service built around REST application programming interfaces.

Jeremy Keith (Adactio)100 words 099

This is the penultimate post in my 100 days project.

I’ve had quite a few people tell me how much they’re enjoying reading my hundred word posts. I thank them. Then I check: “You know they’re exactly 100 words long, right?”

“Really?” they respond. “I didn’t realise!”

“But that’s the whole point!” I say. The clue is in the name. It’s not around 100 words—it’s exactly 100 words every day for 100 days.

That’s the real challenge: not just the writing, but the editing, rearranging, and condensing.

After all, it’s not as if I can just stop in the

ProgrammableWebDaily API RoundUp: Telegram Bot, Spotify Echo Nest Remix, Google Classroom

Every day, the ProgrammableWeb team is busy, updating its three primary directories for APIs, clients (language-specific libraries or SDKs for consuming or providing APIs), and source code samples.

Amazon Web ServicesNew – AWS Budgets and Forecasts

The dynamic, pay-as-you-go nature of the AWS Cloud gives you the opportunity to build systems that respond gracefully to changes in load while paying only for the compute, storage, network, database, and other resources that you actually consume.

Over the last couple of years, as our customer base has become increasingly sophisticated and cloud-aware, we have been working to provide equally sophisticated tools for viewing and managing costs. Many enterprises use AWS for multiple projects, often spread across multiple departments and billed directly or through linked accounts.

In the usual budget-centric environment found in an enterprise, no one likes a surprise (except if it is an AWS price reduction). Our goal is to give you a broad array of cost management tools that will provide you with the information that you need to have in order to know what you are currently spending and how much you can expect to spend in the future. We also want to make sure that you have an early warning if costs exceed your expectations for some reason.

We launched the Cost Explorer last year. This tool integrates with the AWS Billing Console and gives you reporting, analytics, and visualization tools to help you to track and manage your AWS costs.

New Budgets and Forecasts
Today we are adding support for budgets and forecasts. You can now define and track budgets for your AWS costs, forecast your AWS costs for up to three months out, and choose to receive email notification when actual costs exceed or are forecast to exceed budget costs.

Budgeting and forecasting takes place on a fine-grained basis, with filtering or customization based on Availability Zone, Linked Account, API operation, Purchase Option (e.g. Reserved), Service, and Tag.

The operations provided by these new tools replace the tedious and time-consuming manual calculations that many of our customers (both large and small) have been performing as part of their cost management and budgeting process. After running a private beta with over a dozen large-scale AWS customers, we are confident that these tools will help you to do an even better job of understanding and managing your costs.

Let’s take a closer look at these new features!

New Budgets
You can now set monthly budgets around AWS costs, customized by multiple dimensions including tags. For example, you could create budgets to track EC2, RDS, and S3 costs separately for each active development effort.

The AWS Management Console will list each of your budgets (you can also filter by name):

Here’s how you create a new budget. As you can see, you can choose to include costs related to any desired list of AWS services:

You can set alarms that will trigger based on actual or forecast costs, with email notification to a designated individual or group. These alarms make use of Amazon CloudWatch but are somewhat more abstract in order to better meet the needs of your business and accounting folks. You can create multiple alarms for each budget. Perhaps you want one alarm to trigger when actual costs exceed 80% of budget costs and another when forecast costs exceed budgeted costs.

You can also view variances (budgeted vs. actual) in the console. Here’s an example:

New Forecasts
Many AWS teams use an internal algorithm to predict demand for their offerings. They use the results to help them to allocate development and operational resources, plan and execute marketing campaigns, and more. Our new budget forecasting tool makes use of the same algorithm to present you with costs estimates that include both 80% and 95% confidence interval ranges.

As is the case with budgets, you can filter forecasts on a wide variety of dimensions. You can create multiple forecasts and you can view them in the context of historical costs.

After you create a forecast, you can view it as a line chart or as a bar chart:

As you can see from the screen shots, the forecast, budget, and confident intervals are all clearly visible:

These new features are available now and you can start using them today!


ProgrammableWebTelegram Launches Bot API and Platform

Mobile messaging platform Telegram has added a Bot API and platform through which developers can create bots. In the Telegram environment, bots constitute ordinary Telegram accounts. The difference lies in control.

Daniel Glazman (Disruptive Innovations)CSS Working Group's future

Hello everyone.

Back in March 2008, I was extremely happy to announce my appointment as Co-chairman of the CSS Working Group. Seven years and a half later, it's time to move on. There are three main reasons to that change, that my co-chair Peter and I triggered ourselves with W3C Management's agreement:

  1. We never expected to stay in that role 7.5 years. Chris Lilley chaired the CSS Working Group 1712 days from January 1997 (IIRC) to 2001-oct-10 and that was at that time the longest continuous chairing in W3C's history. Bert Bos chaired it 2337 days from 2001-oct-11 to 2008-mar-05. Peter and I started co-chairing it on 2008-mar-06 and it will end at TPAC 2015. That's 2790 days so 7 years 7 months and 20 days! I'm not even sure those 2790 days hold a record, Steven Pemberton probably chaired longer. But it remains that our original mission to make the WG survive and flourish is accomplished, and we now need fresher blood. Stability is good, but smart evolution and innovation are better.
  2. Co-chairing a large, highly visible Working Group like the CSS Working Group is not a burden, far from it. But it's not a light task either. We start feeling the need for a break.
  3. There were good candidates for the role, unanimously respected in the Working Group.

So the time has come. The new co-chairs, Rossen Atanassov from Microsoft and Alan Stearns from Adobe, will take over during the Plenary Meeting of the W3C held in Sapporo, japan, at the end of October and that is A Good Thing™. You'll find below a copy of my message to W3C.

To all the people I've been in touch with while holding my co-chair's hat: thank you, sincerely and deeply. You, the community around CSS, made everything possible.

Yours truly.

Dear Tim, fellow ACs, fellow Chairs, W3C Staff, CSS WG Members,

After seven years and a half, it's time for me to pass the torch of the CSS Working Group's co-chairmanship. 7.5 years is a lot and fresh blood will bring fresh perspectives and new chairing habits. At a time the W3C revamps its activities and WGs, the CSS Working Group cannot stay entirely outside of that change even if its structure, scope and culture are retained. Peter and I decided it was time to move on and, with W3M's agreement, look for new co-chairs.

I am really happy to leave the Group in Alan's and Rossen's smart and talented hands, I'm sure they will be great co-chairs and I would like to congratulate and thank them for accepting to take over. I will of course help the new co-chairs on request for a smooth and easy transition, and I will stay in the CSS WG as a regular Member.

I'd like to deeply thank Tim for appointing me back in 2008, still one of the largest surprises of my career!

I also wish to warmly thank my good friends Chris Lilley, Bert Bos and Philippe Le Hégaret from W3C Staff for their crucial daily support during all these years. Thank you Ralph for the countless transition calls! I hope the CSS WG still holds the record for the shortest positive transition call!

And of course nothing would have been possible without all the members of the CSS Working Group, who tolerated me for so long and accepted the changes we implemented in 2008, and all our partners in the W3C (in particular the SVG WG) or even outside of it, so thank you all. The Membership of the CSS WG is a powerful engine and, as I often say, us co-chairs have only been a drop of lubricant allowing that engine to run a little bit better, smoother and without too much abrasion.

Last but not least, deep thanks to my co-chair and old friend Peter Linss for these great years; I accepted that co-chair's role to partner with Peter and enjoyed every minute of it. A long ride but such a good one!

I am confident the CSS Working Group is and will remain a strong and productive Group, with an important local culture. The CSS Working Group has both style and class (pun intended), and it has been an honour to co-chair it.

Thank you.


ProgrammableWebCSA Creates Open Cloud Security API Working Group

The Cloud Security Alliance (CSA) consortium today announced it has formed a working group spearheaded by CipherCloud, Deloitte, Infosys, Intel and SAP to define best practices and industry standards that ensure API interoperability across data protection and security services delivered via the cloud.

Amazon Web ServicesAWS Week in Review – June 22, 2015

Let’s take a quick look at what happened in AWS-land last week:

Monday, June 22
Tuesday, June 23
Wednesday, June 24
Thursday, June 25
Friday, June 26

New & Notable Open Source Packages

    • Dyn53 is a Dynamic DNS Client for Route 53 for use in environments with dynamic external IP address assignment, such as with home ADSL connections.
    • Aloisius helps you to manage the life-cycle of AWS CloudFormation Stacks.
    • Legacy is a utility for uploading Cassandra snapshots and incremental backups to S3.
    • Lambada is a more passionate way to create AWS Lambda functions using Clojure.

Upcoming Events

Upcoming Events at the AWS Loft (San Francisco)

Upcoming Events at the AWS Loft (New York)

  • June 29 – Chartbeat (6:30 PM).
  • June 30 – Picking the Right Tool for the Job (HTML5 vs. Unity) (Noon – 1 PM).
  • June 30 – So You Want to Build a Mobile Game? (1 PM – 4:30 PM).
  • June 30 – Buzzfeed (6:30 PM).
  • July 6 – AWS Bootcamp (10 AM – 6 PM).
  • July 7 – Dr. Werner Vogels (Amazon CTO) + Startup Founders (6:30 PM).
  • July 7 – AWS Bootcamp (10 AM – 6 PM).
  • July 8 – Sumo Logic Panel and Networking Event (6:30 PM).
  • July 9- AWS Activate Social Event (7:00 PM – 10 PM).
  • July 10 – Getting Started with Amazon EMR (Noon – 1 PM).
  • July 10 – Amazon EMR Deep Dive (1 PM – 2 PM).
  • July 10 – How to Build ETL Workflows Using AWS Data Pipeline and EMR (2 – 3 PM).
  • July 14 – Chef Bootcamp (10 AM – 6 PM).
  • July 15 – Chef Bootcamp (10 AM – 6 PM).
  • July 16 – Science Logic (11 AM – Noon).
  • July 16 – Intel Lustre (4 PM – 5 PM).
  • July 17 – Chef Bootcamp (10 AM – 6 PM).
  • July 22 – Mashery (11 AM – 3 PM).
  • July 23 – An Evening with Chef (6:30 PM).
  • July 29 – (6:30 PM).
  • August 5 – Startup Pitch Event and Summer Social (6:30 PM).
  • August 25 – Eliot Horowitz, CTO and Co-Founder of MongoDB (6:30 PM).
  • AWS Summits.

Help Wanted

Stay tuned for next week! In the meantime, follow me on Twitter and subscribe to the RSS feed.


ProgrammableWeb: APIsTableau

Tableau, the software company that aims to simplify data visualization, provides an API to integrate services into applications. This resource could be a fit for developers who are now working in business intelligence projects. Integration opportunities include analytics features into desktop applications and visualization features into cloud applications. To discover more about what the Tableau API can do, watch the video at
Date Updated: 2015-06-29
Tags: [field_primary_category], [field_secondary_categories]

ProgrammableWeb: APIsLocalytics Query

The Localytics Query REST API allows developers to access and integrate the functionality of Localytics with other applications. Some example API methods include searching for users, retrieving user activities, and retrieving event information. Localytics is a marketing and analytics platform for web and mobile applications. Some features of Localytics include engagement analysis, segmentation, and acquisition management.
Date Updated: 2015-06-29
Tags: [field_primary_category], [field_secondary_categories]

ProgrammableWeb: APIsLocalytics Push

The Localytics Push REST API allows developers to access and integrate the functionality of Localytics messaging with other applications. The main API method is sending push messages to application users. Localytics is a marketing and analytics platform for web and mobile applications. Some features of Localytics include engagement analysis, segmentation, and acquisition management.
Date Updated: 2015-06-29
Tags: [field_primary_category], [field_secondary_categories]

ProgrammableWeb: APIsSpiritual Networks

The Spiritual Networks connect over 1,000,000 people on Facebook and Twitter interested in spiritual living with chakra healing, intuition, lightworkers, mediums, and yoga as the main common topics. Users who register can create profiles, share photos, and watch videos at no cost. For developers interested in a social networking integration, the API is available in JSON format with API key access.
Date Updated: 2015-06-29
Tags: [field_primary_category], [field_secondary_categories]

ProgrammableWeb: APIsGoogle Classroom

The Google Classroom API is currently in developer review and it will be available soon. The goal is to integrate students' accounts and domains into education applications that include courses, aliases, invitations, students, teachers, and user entities. This API uses REST interface and OAuth 2.0 access to manage students' roster in the classroom. For more information, visit
Date Updated: 2015-06-29
Tags: [field_primary_category], [field_secondary_categories]

ProgrammableWeb: APIsSpotify Echo Nest Remix

The Spotify Echo Nest Remix API works as an internet synthetizer, transforming music and videos to Python or JavaScript code. In specific, the API manipulates audio files connected with the Echo Next Analyze API. This work aims to create projects from music, like the Remix of a Pianist Cat or the DogStep, that transforms any song like White Stripes' Seven Nation Army into musical barks. See additional music examples with Tetris Attack, Skrillex' Bangarang, and the Infinite Jukebox in this link:
Date Updated: 2015-06-29
Tags: [field_primary_category], [field_secondary_categories]

ProgrammableWeb: APIsTelegram Bot

Telegram, the cloud-based service that offers messaging services to share text, photos, and videos, now offers the Telegram Bot API. This service allows to integrate bots with AI applications in mind. What Telegram means by AI includes teaching, broadcasting, and connecting features into software components. The API was created in HTTP interface to authorize with token. See more at
Date Updated: 2015-06-29
Tags: [field_primary_category], [field_secondary_categories]

ProgrammableWeb: APIsPromisePay

The PromisePay REST API allows developers to access and integrate the functionality of PromisePay with other applications. Public documentation is not available; API access comes with account service. PromisePay is a digital payment platform for marketplaces.
Date Updated: 2015-06-29
Tags: [field_primary_category], [field_secondary_categories]

Jeremy Keith (Adactio)100 words 098

When I’m grilling outside, I cook on a gas barbecue. There are quite a few people who would take issue with this. Charcoal is clearly better, they claim. And they’re right. But the thing is, I can fire up my gas barbecue quickly and just get down to cooking.

When I’m programming on the server, I code in PHP. There are quite a few people who would take issue with this. Any other language is clearly better, they claim. And they’re right. But the thing is, I can fire up my text editor quickly and just get down to coding.

Matt Webb (Schulze & Webb)More on conversational UIs

ICYMI, last week I dropped a ton of links + speculation on text messaging as user interface... Read it here. Alternatively catch up with:

  • Futures of text by Jonathan Libov of Union Square Ventures is a far, far better article than the one I wrote: A survey of all the current innovation in text as a medium. Plus: animated GIFs
  • Wired: The future of UI design? Old-school text messages is a quicker, more readable overview, and some neat extra points... It may always feel silly to talk out loud to Apple's virtual assistant; maybe Apple should let us text Siri instead.

I wanted to add a few more links.

Lark is a weight-loss coach that communicates with you exclusively through messaging.

Hello Lamp Post (detailed project page) is a playful SMS platform, inviting people to strike up conversations with familiar street furniture using the text message function of their mobile phones. Including escalating intimacy:

To help players feel as though their relationship with objects could develop, we built in a friendship mechanic - initial conversations would be a bit small-talky, about the weather and observations on the local environment, but on repeat visits the questioning of the objects would change, to focus on opinions, memories and beliefs.

(Unique qualities of text-based conversational UI... user-initiated conversations and app-initiation conversations feel the same, unlike regular apps; the element of time allows pauses and rhythms, like free-to-play games; it's how we already talk with our friends.)

Designing for text-based interfaces is going to take some experimentation.

What is conversation? is some decent theory... might be useful as a framework to talk about how conversations are structured and what's they're for. (Thanks @matt_thinkux.)

The word "just" creates a parent/child relationship. The article is in the context of women in the workplace, but this is an important point about language: Should a bot display deference? What should its stance be?

I'm definitely more into how all of this feels -- Alexis Lloyd (at the New York Times Research & Development group) wrote up her experiments: Our friends, the bots? I was curious to see what it would feel like to have a bot that was trying to engage as part of a social group

I haven't yet found the right words to characterize what this bot relationship feels like. It's non-threatening, but doesn't quite feel like a child or a pet. Yet it's clearly not a peer either. A charming alien, perhaps? The notable aspect is that it doesn't seem anthropomorphic or zoomorphic. It is very much a different kind of otherness, but one that has subjectivity and with which we can establish a relationship.


The conversation about how to define the bot's relationship to us really elucidated the idea that we are moving toward one member called "non-human mental models". We are beginning to understand machine subjectivity in a way that is in keeping with its nature rather than forcing it into other constructs, like a person or an animal.

This I love.

It's not just bots. How do we speak with non-humans, on their own terms? What does a bot want? Or a penguin, or a rock, or the military-industrial complex. Do we need human translators who can hold empathy for them on our behalf? Do we need a speaker for the thermocline? See also: The Author of the Acacia Seeds, Ursula K. Le Guin.

There's a hashtag used by speakers for the bots: #botALLY.


we are kind and gentle botmakers, allies to bots of all kinds and creeds

Found via that tag, a tool to help make Twitterbots: Cheap Bots, Done Quick!

e.g. @infinitedeserts, an infinity of deserts, each more infinite than the last.

(I'm no stranger to twitter bots, I made a presence machine and retold 99 Secrets -- both now silent.)

More on writing twitter bots, without code. More on writing twitter bots, with code.


Telegram Bot Platform. (Telegram is a messaging app with 60+ million monthly active users; it's growing fast.)

Bots are simply Telegram accounts operated by software - not people - and they'll often have AI features. They can do anything - teach, play, search, broadcast, remind, connect, integrate with other services, or even pass commands to the Internet of Things.

Neat about Telegram's approach, #1: Bots can now provide you with custom keyboards for specialized tasks (examples are shown). Any good bot platform is going to have to do this, typing is too cumbersome otherwise.

Neat about Telegram's approach, #2: any message from your bot forwarded to a person or group is a messaging equivalent of a retweet - bots are viral.

The really unique feature about conversational UIs is that messaging is social. Introductions can be made. Bots can take part in group conversations; facts can be remembered and shared. There's a figure and a ground.


ProgrammableWeb23M Gamers Generate 2.3B API Calls Over 18 Months On Azure

As games have developed through the ages, the rise of the digital age has allowed players to compete against programs instead of other human competitors. In a recent article as part of YourStory’s CloudSparks Series, Chandan Raj discussed how Playblazer has grown its user base.

Jeremy Keith (Adactio)100 words 097

It’s the weekend …and I got up at the crack of dawn to head to London. Yes, on this beautiful sunny day, I elected to take the commuter train up to the big city to spend the day trapped inside a building where the air conditioning crapped out. Sweaty!

But it was worth it. I was at the Edge conference, which is always an intense dose of condensed nerdery. This year I participated in one of the panels: a discussion on progressive enhancement expertly moderated by Lyza. She also led a break-out session on the same topic later on.


Updated: .  Michael(tm) Smith <>