ProgrammableWebGoogle Argues That It's Chrome API Changes are Good for Browser Extension Developers

Google's plan to limit developers' access to the Chrome API browser extensions which is commonly used to perform ad blocking and push them to use a new API sparked a developer firestorm. In response, Google engineers altered their plans slightly.

ProgrammableWebZendesk Expands Integration Access to Answer Bot

Zendesk, customer service and engagement solutions provider, recently introduced the expansion of its Answer Bot product. Answer Bot is a machine learning tool that helps customers find answers for themselves. It pulls data from the Zendesk Guide knowledge base and suggests articles to help customers solve problems on their own.

ProgrammableWeb: APIsPhiladelphia Indego Bike Share Stations

<noscript></noscript> Get live station location and status information including bicycle availability/capacity for the Philadelphia bike-share program with this API. Indego bike share is an initiative of the City of Philadelphia, with over 1,200 bikes and 120 stations throughout the city.
Date Updated: 2019-06-17
Tags: Transportation, Cycling


<noscript></noscript> is a service that allows whole websites to be translated from one language to another. It dynamically parses HTML and replaces the english text with the destination language, while maintaining the structure of the HTML, ensuring that the website remains functional. It is powered by the Microsoft Azure Text translator API, but augmented to handle HTML documents. Currently access is by invitation only, to apply, please contact
Date Updated: 2019-06-17
Tags: Translation, Localization

ProgrammableWeb: APIsCryptocurrency Alternative Data

<noscript></noscript> Cryptocurrency Alternative Data API provides market data about more than 300 types of cryptocurrency such as coin lists, reddit discussions, tweets, GitHub data, search engine keyword scores and website traffic. Cryptocurrency Alternative Data explores each Cryptocurrency and deliver beyond traditional market data since 2017.
Date Updated: 2019-06-17
Tags: Cryptocurrency, Social, , Tweets

ProgrammableWeb: APIsFabrick Axerve eCommerce Solution Tokenization

<noscript></noscript> This Fabrick eCommerce Solution Tokenization API is a Axerve service that provides the APIs for tokenization. It enables users to Create a new card token, Retrieve a list of card tokens and more. The Fabric Platform exposes RESTful web APIs that are provided by an independent company that has joined the Fabrick ecosystem and has chosen to expose its services on the Fabrick Platform. API requests must be sent using HTTP protocols with an API Key and Token used for authentication. The Fabrick Platform provides an open financial ecosystem to foster collaborations that create innovative solutions for end customers via an API.
Date Updated: 2019-06-17
Tags: Financial, Authentication, , Collaboration, , eCommerce

ProgrammableWeb: APIsFabrick Axerve eCommerce Solution Payment Page

<noscript></noscript> This Fabrick eCommerce Solution Payment Page API is a Axerve service that enables users to retrieve the available payment provider list for a specified payment, retrieve the details of a specific payment provider and more. The Fabric Platform exposes RESTful web APIs that are provided by an independent company that has joined the Fabrick ecosystem and has chosen to expose its services on the Fabrick Platform. API requests must be sent using HTTP protocols with an API Key and Token used for authentication. The Fabrick Platform provides an open financial ecosystem to foster collaborations that create innovative solutions for end customers via an API.
Date Updated: 2019-06-17
Tags: Financial, Collaboration, , eCommerce, , Payments

ProgrammableWeb: APIsARMS Data GraphQL

<noscript></noscript> The USDA's Agriculture Resource Management Survey (ARMS) API returns data to create apps that search, display, analyze, retrieve, view, and access agricultural information. Developers can authenticate with API Key, use R to run a sample code, and make calls with GraphQL format.
Date Updated: 2019-06-17
Tags: Agriculture, Economics

ProgrammableWeb: APIsSunCalc

<noscript></noscript> The SunCalc API provides access to to determine the course of the sun, sunrise, sun angle, shadow length, solar eclipse for any location and time. It allows you to integrate the calculation of the sun's location that is based on latitude, longitude, date, time and more.
Date Updated: 2019-06-17
Tags: Mapping, Astronomy, , Nature, , Time

ProgrammableWebTop 10 Education APIs

Education technology is changing the way instructors teach and the way students learn. As education becomes more tech-savvy, better tools are needed to provide interoperability and efficiency for educators and students. Developers are stepping up to create applications that are useful for the classroom, and they are looking to the ProgrammableWeb Education category to find the best Application Programming Interfaces (APIs) to use for their "EdTech" apps.

ProgrammableWebDaily API RoundUp: eGifter, BrightLocal, flydubai, Rubrik, Thirstie

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.

Simon Willison (Django)Toward a “Kernel Python”

Toward a “Kernel Python”

Glyph makes a strong case for releasing a slimmed down "kernel" version of Python with the minimal possible standard library, and argues that the current standard library is proving impossible for a single core team to productively maintain. "If I wanted to update the colorsys module to be more modern - perhaps to have a Color object rather than a collection of free functions, perhaps to support integer color models - I’d likely have to wait 500 days, or more, for a review."

Via @judy2k

Simon Willison (Django)When should you be using Web Workers?

When should you be using Web Workers?

85% of worldwide mobile devices are massively less performant than high end iPhones. Surma argues that we should be making aggressive use of Web Workers to keep as much of our JavaScript as possible off the main UI thread, to avoid freezing up the entire interface.

ProgrammableWebTop 10 Video APIs

Video is as much a part of the Internet as text is these days, and there are plenty of tools for programmers to use to tap into it.

ProgrammableWebHow to Transform an Air Traffic API to GeoJSON to Render on a Map

There are many services and APIs that provide valuable data to use in an application. Unfortunately, that data isn't always the complete dataset we need or it may have structural differences that reduce its utility. This project demonstrates how to retrieve data from an API for global flight tracking and then transform it into GeoJSON to store in HERE's XYZ Geospatial Storage API and then render it as a 3D map with Three.js.

Amazon Web ServicesAmazon S3 Update – SigV2 Deprecation Period Extended & Modified

Every request that you make to the Amazon S3 API must be signed to ensure that it is authentic. In the early days of AWS we used a signing model that is known as Signature Version 2, or SigV2 for short. Back in 2012, we announced SigV4, a more flexible signing method, and made it the sole signing method for all regions launched after 2013. At that time, we recommended that you use it for all new S3 applications.

Last year we announced that we would be ending support for SigV2 later this month. While many customers have updated their applications (often with nothing more than a simple SDK update), to use SigV4, we have also received many requests for us to extend support.

New Date, New Plan
In response to the feedback on our original plan, we are making an important change. Here’s the summary:

Original Plan – Support for SigV2 ends on June 24, 2019.

Revised Plan – Any new buckets created after June 24, 2020 will not support SigV2 signed requests, although existing buckets will continue to support SigV2 while we work with customers to move off this older request signing method.

Even though you can continue to use SigV2 on existing buckets, and in the subset of AWS regions that support SigV2, I encourage you to migrate to SigV4, gaining some important security and efficiency benefits in the process. The newer signing method uses a separate, specialized signing key that is derived from the long-term AWS access key. The key is specific to the service, region, and date. This provides additional isolation between services and regions, and provides better protection against key reuse. Internally, our SigV4 implementation is able to securely cache the results of authentication checks; this reduces latency and adds to the overall resiliency of your application. To learn more, read Changes in Signature Version 4.

Identifying Use of SigV2
S3 has been around since 2006 and some of the code that you or your predecessors wrote way back then might still be around, dutifully making requests that are signed with SigV2. You can use CloudTrail Data Events or S3 Server Access Logs to find the old-school requests and target the applications for updates:

CloudTrail Data Events – Look for the SignatureVersion element within the additionalDataElement of each CloudTrail event entry (read Using AWS CloudTrail to Identify Amazon S3 Signature Version 2 Requests to learn more).

S3 Server Access Logs – Look for the SignatureVersion element in the logs (read Using Amazon S3 Access Logs to Identify Signature Version 2 Requests to learn more).

Updating to SigV4

“Do we need to change our code?”

The Europe (Frankfurt), US East (Ohio), Canada (Central), Europe (London), Asia Pacific (Seoul), Asia Pacific (Mumbai), Europe (Paris), China (Ningxia), Europe (Stockholm), Asia Pacific (Osaka Local), AWS GovCloud (US-East), and Asia Pacific (Hong Kong) Regions were launched after 2013, and support SigV4 but not SigV2. If you have code that accesses S3 buckets in that region, it is already making exclusive use of SigV4.

If you are using the latest version of the AWS SDKs, you are either ready or just about ready for the SigV4 requirement on new buckets beginning June 24, 2020. If you are using an older SDK, please check out the detailed version list at Moving from Signature Version 2 to Signature Version 4 for more information.

There are a few situations where you will need to make some changes to your code. For example, if you are using pre-signed URLs with the AWS Java, JavaScript (node.js), or Python SDK, you need to set the correct region and signature version in the client configuration. Also, be aware that SigV4 pre-signed URLs are valid for a maximum of 7 days, while SigV2 pre-signed URLs can be created with a maximum expiry time that could be many weeks or years in the future (in almost all cases, using time-limited URLs is a much better practice). Using SigV4 will improve your security profile, but might also mandate a change in the way that you create, store, and use the pre-signed URLs. While using long-lived pre-signed URLs was easy and convenient for developers, using SigV4 with URLs that have a finite expiration is a much better security practice.

If you are using Amazon EMR, you should upgrade your clusters to version 5.22.0 or later so that all requests to S3 are made using SigV4 (see Amazon EMR 5.x Release Versions for more info).

If your S3 objects are fronted by Amazon CloudFront and you are signing your own requests, be sure to update your code to use SigV4. If you are using Origin Access Identities to restrict access to S3, be sure to include the x-amz-content-sha256 header and the proper regional S3 domain endpoint.

We’re Here to Help
The AWS team wants to help make your transition to SigV4 as smooth and painless as possible. If you run in to problems, I strongly encourage you to make use of AWS Support, as described in Getting Started with AWS Support.

You can also Discuss this Post on Reddit!



Simon Willison (Django)Convert Locations.kml (pulled from an iPhone backup) to SQLite

Convert Locations.kml (pulled from an iPhone backup) to SQLite

I've been playing around with data from my iPhone using the iPhone Backup Extractor app and one of the things it exports for you is a Locations.kml file full of location history data. I wrote a tiny script using Python's ElementTree XMLPullParser to efficiently iterate through the Placemarks and yield them as dictionaries, which I then batch-inserted into sqlite-utils to create a SQLite database.

ProgrammableWeb: APIsRAWG Video Games Database

<noscript></noscript> The RAWG Video Games Database API enables access to data about video games. The API enables users to: - search for video games: over 300,000 titles on 50 platforms - pull data about video games such as publishers, developers, genres, description, etc. - get links to all digital stores where users can buy a game - find similar games, powered by our machine learning algorithm RAWG is a video game database and video game discovery service.
Date Updated: 2019-06-14
Tags: Games, Database, , Search


<noscript></noscript> offers access to scientific information associated with tools, databases, and services for bioinformatics. The API supports comprehensive resources for the study of genes and heredity such as genotyping, gene expression, transcription factors, and DNA polymorphism. This information is available in JSON format.
Date Updated: 2019-06-14
Tags: Science, Data, , Tools

ProgrammableWebCreate and Read Invoices through Blockchain-Based Request API

Request, a blockchain-based payment solution provider, has launched a beta version of its Request API. Through the API, users can create and read electronic invoices stored on the Request network. Because the Request core is exposed through an API, developers can integrate with Request technology without needing to learn development skills specifically tied to Request.

ProgrammableWebRAWG Exposes Massive Gaming Database Via API

Games media service RAWG opened the RAWG Video Games Database API for developers. RAWG is the largest games database with over 300,000 of games, 2M of screenshots, 400K of reviews and ratings, and now you can access all of it and much more via the API.

ProgrammableWebProxy Announces Open Platform for Personal Identity Services

Proxy, a startup working to provide everyone on earth with a smartphone-powered personal identity signal, today announced a new open platform that includes a new Access API and Identity SDK. This new platform is designed to provide developers with all the necessary tools to build custom identity services that recognize individuals based on their personal identity signal.

ProgrammableWeb: APIsRequest Network

<noscript></noscript> The Request Network API is a RESTful service that enables users to interact with the Request Protocol, abstracting all Blockchain-related aspects. Use the API to create Requests, list Requests, and find a specific Request by its ID. The Request service uses an API Key to authenticate requests, and supports JSON-encoded requests and responses. Request Network is an Open Financial Network for transaction requests that includes support for; blockchain, invoicing, ethereum and more. This API is currently in alpha, and is running on the Rinkeby Ethereum test network. Please check the Request Network roadmap to learn more about the Protocol release to the Ethereum Mainnet.‌‌
Date Updated: 2019-06-13
Tags: Blockchain, Bitcoin, , Cryptocurrency, , Financial, , Invoicing, , Transactions

ProgrammableWebFirst Twitter API Endpoints Available through Twitter Developer Labs Program

Last month, Twitter introduced Twitter Developer Labs, a program where developers can test and provide feedback on new API features. The first two endpoints under the Twitter Developer Labs program are now available. GET/users and GET/tweets are now available. Through the endpoints, developers can look up users or retrieve tweets based on a user's ID.

ProgrammableWebGoogle Unveils TensorFlow 2.0 Beta

Google has announced the release of a beta version of the popular TensorFlow machine learning library. According to the company, "TensorFlow 2.0 focuses on simplicity and ease of use, with updates like eager execution, intuitive higher-level APIs, and flexible model building on any platform."

Simon Willison (Django)paginate-json


I released a fun tiny utility: paginate-json, which knows how to paginate through JSON APIs that use the HTTP Link header for pagination. I built it so I could pull data from the GitHub API and pipe it directly into SQLite via sqlite-utils.

Via @simonw

ProgrammableWebAkamai Announces Edge Cloud and IoT Edge Connect

Akamai, a content delivery network and cloud service provider, has announced the release of Akamai Edge Cloud and an accompanying IoT Edge Connect service. With the announcement of these new tools the company is hoping to “streamline and secure the delivery of data to connected devices and in-application messaging at scale.”

Simon Willison (Django)Serverless Microservice Patterns for AWS

Serverless Microservice Patterns for AWS

A handy collection of 19 architectural patterns for AWS Lambda collected by Jeremy Daly.

Via @PaulDJohnston

ProgrammableWebWhat Are the Best DevOps Practices for Enterprise API Builders?

Continuous Integration and Deployment (CI/CD) speeds up bug fixes and shortens time to production by preventing human error and streamlining testing. Not surprisingly, CI/CD is growing in popularity as a software workflow. Teams practicing DevOps want more insight into every part of their application, which usually involves one or more internal APIs.

ProgrammableWebDaily API RoundUp: Azure Cognitive Services, Clearout, Zenkit, Nervos, Berbix

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.

ProgrammableWebAmazon Personalize Now Generally Available

AWS Amazon Personalize was originally introduced late last year. Until now, the machine learning personalization service, that was originally developed for Amazon's internal use, was available in a preview release. This week, Amazon announced that Amazon Personalize is now generally available.

ProgrammableWebGoogle Announces New Translate API v3 Capabilities

Google AutoML Translate was launched last year with the intent of allowing users to translate global content via automated machine learning without needing to learn how to code. The platform's Translate API, which is now in version 3 beta, has some newly announced features which aim to simplify batch translation, while also providing users more control over specific terminology.

Amazon Web ServicesAmazon Personalize is Now Generally Available

Today, we’re happy to announce that Amazon Personalize is available to all AWS customers. Announced in preview at AWS re:Invent 2018, Amazon Personalize is a fully-managed service that allows you to create private, customized personalization recommendations for your applications, with little to no machine learning experience required.

Whether it is a timely video recommendation inside an application or a personalized notification email delivered just at the right moment, personalized experiences, based on your data, deliver more relevant experiences for customers often with much higher business returns.

The task of developing an efficient recommender system is quite challenging: building, optimizing, and deploying real-time personalization requires specialized expertise in analytics, applied machine learning, software engineering, and systems operations. Few organizations have the knowledge, skills, and experience to overcome these challenges, and simple rule-based systems become brittle and costly to maintain as new products and promotions are introduced, or customer behavior changes.

For over 20 years, has perfected machine learning models that provide personalized buying experiences from product discovery to checkout. With Amazon Personalize, we are bringing developers that same capability to build custom models without having to deal with the complexity of infrastructure and machine learning that typically accompanies these types of solutions.

With Amazon Personalize, you provide the unique signals in your activity data (page views, signups, purchases, and so forth) along with optional customer demographic information (age, location, etc.). You then provide the inventory of the items you want to recommend, such as articles, products, videos, or music as an example. Then, entirely under the covers, Amazon Personalize will process and examine the data, identify what is meaningful, select the right algorithms, and train and optimize a personalization model that is customized for your data, and accessible via an API. All data analyzed by Amazon Personalize is kept private and secure and only used for your customized recommendations. The resulting models are yours and yours alone.

With a single API call, you can make recommendations for your users and personalize the customer experience, driving more engagement, higher conversion, and increased performance on marketing campaigns. Domino’s Pizza, for instance, is using Amazon Personalize to deliver customized communications such as promotional deals through their digital properties. Sony Interactive Entertainment uses Personalize with Amazon SageMaker to automate and accelerate their machine learning development and drive more effective personalization at scale.

Personalize is like having your own machine learning personalization team at your beck and call, 24 hours a day.

Introducing Amazon Personalize

Amazon Personalize can make recommendations based on your historical data stored in Amazon S3, or on streaming data sent in real-time by your applications, or on both.

This gives customers a lot of flexibility to build recommendation solutions. For instance, you could build an initial recommender based on historical data, and retrain it periodically when you’ve accumulated enough live events. Alternatively, if you have no historical data to start from, you could ingest events for a while, and then build your recommender.

Having covered historical data in my previous blog post, I will focus on ingesting live events this time.

The high-level process looks like this:

  1. Create a dataset group in order to store events sent by your application.
  2. Create an interaction dataset and define its schema (no data is needed at this point).
  3. Create an event tracker in order to send events to Amazon Personalize.
  4. Start sending events to Amazon Personalize.
  5. Select a recommendation recipe, or let Amazon Personalize pick one for you thanks to AutoML.
  6. Create a solution, i.e. train the recipe on your dataset.
  7. Create a campaign and start recommending items.

Creating a dataset group

Let’s say we’d like to capture a click stream of movie recommendations. Using the the first time setup wizard, we create a dataset group to store these events. Here, let’s assume we don’t have any historical data to start with: all events are generated by the click stream, and are ingested using the event ingestion SDK.

Creating a dataset group just requires a name.

Then, we have to create the interaction dataset, which shows how users are interacting with items (liking, clicking, etc.). Of course, we need to define a schema describing the data: here, we’ll simply use the default schema provided by Amazon Personalize.

Optionally, we could now define an import job, in order to add historical data to the data set: as mentioned above, we’ll skip this step as all data will come from the stream.

Configuring the event tracker

The next step is to create the event tracker that will allow us to send streaming events to the dataset group.

After a minute or so, our tracker is ready. Please take note of the tracking id: we’ll need it to send events.

Creating the dataset

When Amazon Personalize creates an event tracker, it automatically creates a new dataset in the dataset group associated with the event tracker. This dataset has a well-defined schema storing the following information:

  • user_id and session_id: these values are defined by your application.
  • tracking_id: the event tracker id.
  • timestamp, item_id, event_type, event_value: these values describe the event itself and must be passed by your application.

Real-time events can be sent to this dataset in two different ways:

  • Server-side, via the AWS SDK: please note ingestion can happen from any source, whether your code is hosted inside of AWS (e.g. in Amazon EC2 or AWS Lambda) or outside.
  • With the AWS Amplify JavaScript library.

Let’s look at both options.

Sending real-time events with the AWS SDK

This is a very easy process: we can simply use the PutEvents API to send either a single event, or a list of up to 10 events. Of course, we could use any of the AWS SDKs: since my favourite language is Python, this is how we can send events using the boto3 SDK.

import boto3
personalize_events = boto3.client('personalize-events')
    trackingId = <TRACKING_ID>,
    userId = <USER_ID>,
    sessionId = <SESSION_ID>,
    eventList = [
          "eventId": "event1",
          "sentAt": 1549959198,
          "eventType": "rating",
          "properties": """{\"itemId\": \"123\", \"eventValue\": \"4\"}"""
          "eventId": "event2",
          "sentAt": 1549959205,
          "eventType": "rating",
          "properties": """{\"itemId\": \"456\", \"eventValue\": \"2\"}"""

In our application, we rated movie 123 as a 4, and movie 456 as a 2. Using the appropriate tracking identifier, we sent two Events to our event tracker:

  • eventId: an application-specific identifier.
  • sentAt: a timestamp, matching the timestamp property defined in the schema. This value seconds since the Unix Epoch (1 January 1970 00:00:00.000 UTC), and is independent of any particular time zone.
  • eventType: the event type, matching the event_type property defined in the schema,
  • properties: the item id and event value, matching the item_id and event_value properties defined in the schema.

Here’s a similar code snippet in Java.

List<Event> eventList = new ArrayList<>();
eventList.add(new Event().withProperties(properties).withType(eventType));
PutEventsRequest request = new PutEventsRequest()

You get the idea!

Sending real-time events with AWS Amplify

AWS Amplify is a JavaScript library that makes it easy to create, configure, and implement scalable mobile and web apps powered by AWS. It’s integrated with the event tracking service in Amazon Personalize.

A couple of setup steps are required before we can send events. For the sake of brevity, please refer to these detailed instructions in the Amazon Personalize documentation:

  • Create an identity pool in Amazon Cognito, in order to authenticate users.
  • Configure the Amazon Personalize plug-in with the pool id and tracker id.

Once this is taken care of, we can send events to Amazon Personalize. We can still use any text string for event types, but please note that a couple of special types are available:

  • Identify lets you send the userId for a particular user to Amazon Personalize. The userId then becomes an optional parameter in subsequent calls.
  • MediaAutoTrack automatically calculates the play, pause and resume position for media events, and Amazon Personalize uses the position as event value.

Here is how to send some sample events with AWS Amplify:

    eventType: "Identify",
    properties: {
      "userId": "<USER_ID>"
}, "AmazonPersonalize");
    eventType: "<EVENT_TYPE>",
    properties: {
      "itemId": "<ITEM_ID>",
      "eventValue": "<EVENT_VALUE>"
}, "AmazonPersonalize");
    eventType: "MediaAutoTrack",
    properties: {
      "itemId": "<ITEM_ID>",
      "domElementId": "MEDIA DOM ELEMENT ID"
}, "AmazonPersonalize");

As you can see, this is pretty simple as well.

Creating a recommendation solution

Now that we know how to ingest events, let’s define how our recommendation solution will be trained.

We first need to select a recipe, which is much more than an algorithm: it also includes predefined feature transformations, initial parameters for the algorithm as well as automatic model tuning. Thus, recipes remove the need to have expertise in personalization. Amazon Personalize comes with several recipes suitable for different use cases.

Still, if you’re new to machine learning, you may wonder which one of these recipes best fits your use case. No worry: as mentioned earlier, Amazon Personalize supports AutoML, a new technique that automatically searches for the most optimal recipe, so let’s enable it. While we’re at it, let’s also ask Amazon Personalize to automatically tune recipe parameters.

All of this is very straightforward in the AWS console: as you’ll probably want to automate from now on, let’s use the AWS CLI instead.

$ aws personalize create-solution \
  --name jsimon-movieclick-solution \ 
  --perform-auto-ml --perform-hpo \
  --dataset-group-arn $DATASET_GROUP_ARN

Now we’re ready to train the solution. No servers to worry about, training takes places on fully-managed infrastructure.

$ aws personalize create-solution-version \
  --solution-arn $SOLUTION_ARN 

Once training is complete, we can use the solution version to create a recommendation campaign.

Deploying a recommendation campaign

Still no servers to worry about! In fact, campaigns scale automatically according to incoming traffic: we simply need to define the minimum number of transactions per second (TPS) that we want to support.

This number is used to size the initial fleet for hosting the model. It also impacts how much you will be charged for recommendations ($0.20 per TPS-hour). Here, I’m setting that parameter to 10, which means that I will initially be charged $2 per hour. If traffic exceeds 10 TPS, Personalize will scale up, increasing my bill according to the new TPS setting. Once traffic drops, Personalize will scale down, but it won’t go below my minimum TPS setting.

$ aws personalize create-campaign \
  --name jsimon-movieclick-campaign \
  --min-provisioned-tps 10 \
  --solution-version-arn $SOLUTION_VERSION_ARN

Should you later need to update the campaign with a new solution version, you can simply use the UpdateCampaign API and pass the ARN of the new solution version.

Once the campaign has been deployed, we can quickly test that it’s able to recommend new movies.

Recommending new items in real-time

I don’t think this could be simpler: just pass the id of the user and receive recommendations.

$ aws personalize-rec get-recommendations \
--campaign-arn $CAMPAIGN_ARN \
--user-id 123 --query "itemList[*].itemId"
["1210", "260", "2571", "110", "296", "1193", ...]

At this point, we’re ready to integrate our recommendation model in your application. For example, a web application would have to implement the following steps to display a list of recommended movies:

  • Use the GetRecommendations API in our favorite language to invoke the campaign and receive movie recommendation for a given user,
  • Read movie metadata from a backend (say, image URL, title, genre, release date, etc.),
  • Generate HTML code to be rendered in the user’s browser.

Amazon Personalize in action

Actually, my colleague Jake Wells has built a web application recommending books. Using an open dataset containing over 19 million book reviews, Jake first used a notebook hosted on Amazon SageMaker to clean and prepare the data. Then, he trained a recommendation model with Amazon Personalize, and wrote a simple web application demonstrating the recommendation process. This is a really cool project, which would definitely be worthy of its own blog post!

Available now!

Whether you work with historical data or event streams, a few simple API calls are all it takes to train and deploy recommendation models. Zero machine learning experience is required, so please visit, give it a try and let us know what you think.

Amazon Personalize is available in the following regions: US East (Ohio), US East (N. Virginia), US West (Oregon), Asia Pacific (Tokyo), Asia Pacific (Singapore), and EU (Ireland)

The service is also part of the AWS free tier. For the first two months after sign-up, you will be offered:
1. Data processing and storage: up to 20 GB per month
2. Training: up to 100 training hours per month
3. Prediction: up to 50 TPS-hours of real-time recommendations per month

We’re looking forward to your feedback!


ProgrammableWebRoughly 100 GateHub XRP Wallets Hacked

GateHub, a cryptocurrency wallet provider, recently reported that around 100 XRP Ledger wallets were compromised.

ProgrammableWeb10 Top Logistics APIs

Logistic service providers can all agree: recent innovations in technology have been beneficial to improving the supply chain.

Jeremy Keith (Adactio)The schedule for Patterns Day

Patterns Day is less than three weeks away—exciting!

We’re going to start the day at a nice civilised time. Registration is from 9am. There will be tea, coffee, and pastries, so get there in plenty of time to register and have a nice chat with your fellow attendees. There’ll be breaks throughout the day too.

Those yummy pastries and hot drinks are supplied courtesy of our sponsors Buildit @ Wipro Digital—many thanks to them!

Each talk will be 30 minutes long. There’ll be two talks back-to-back and then a break. That gives you plenty of breathing space to absorb all those knowledge bombs that the speakers will be dropping.

Lunch will be a good hour and a half. Lunch isn’t provided so you can explore the neighbourhood where there are plenty of treats on offer. And your Patterns Day badge will even get you some discounts…

The lovely Café Rust is offering these deals to attendees:

  • Cake and coffee for £5
  • Cake and cup of tea for £4
  • Sandwich and a drink for £7

The Joker (right across the street from the conference venue) is offering a 10% discount of food and drinks (but not cocktails) to Patterns Day attendees. I highly recommend their hot wings. Try the Rufio sauce—it’s awesome! Do not try the Shadow—it will kill you.

Here’s how the day is looking:

<time datetime="2019-06-28T09:00">9:00am</time>Registration
<time datetime="2019-06-28T09:55">9:55am</time>Opening remarks
<time datetime="2019-06-28T10:00">10:00am</time>Alla
<time datetime="2019-06-28T10:30">10:30am</time>Yaili
<time datetime="2019-06-28T11:00">11:00am</time>Break
<time datetime="2019-06-28T11:30">11:30am</time>Amy
<time datetime="2019-06-28T12:00">12:00am</time>Danielle
<time datetime="2019-06-28T12:30">12:30am</time>Lunch
<time datetime="2019-06-28T14:00">2:00pm</time>Heydon
<time datetime="2019-06-28T14:30">2:30pm</time>Varya
<time datetime="2019-06-28T15:00">3:00pm</time>Break
<time datetime="2019-06-28T15:30">3:30pm</time>Una
<time datetime="2019-06-28T16:00">4:00pm</time>Emil
<time datetime="2019-06-28T16:30">4:30pm</time>Closing remarks

We should be out of the Duke of York’s by 4:45pm after a fantastic day of talks. At that point, we can head around the corner (literally) to Holler Brewery. They are very kindly offering each attendee a free drink! Over to them:

Holler is a community based brewery, always at the centre of the local community. Here to make great beer, but also to help support community run pubs, carnival societies, mental health charities, children’s amateur dramatic groups, local arts groups and loads more, because these are what keep our communities healthy and together… the people in them!

Holler loves great beer and its way of bringing people together. They are excited to be welcoming the Patterns Day attendees and the design community to the taproom.

Terms and conditions:

  • One token entitles to you one Holler beer or one soft drink
  • Redeemable only on Friday 28th June 2019 between 4:45 and 20:00
  • You must hand your token over to the bar team

You’ll get your token when you register in the morning, along with your sticker. That’s right; sticker. Every expense has been spared so you won’t even have a name badge on a lanyard, just a nice discrete but recognisable sticker for the event.

I am so, so excited for Patterns Day! See you at the Duke of York’s on June 28th!

ProgrammableWeb: APIsFinastra Reporting

<noscript></noscript> The Finastra Reporting API retrieves tables and reports data. Developers can authenticate with OAuth2. Finastra is an open and collaborative financial application development environment.
Date Updated: 2019-06-10
Tags: Financial

ProgrammableWeb: APIsFinastra Forex Spot Trade Capture

<noscript></noscript> The Finastra Forex Spot Trade Capture API returns a list of trades, creates new Forex spot trade, and gets details of a Forex spot trade. Finastra is an open and collaborative financial application development environment.
Date Updated: 2019-06-10
Tags: Financial

ProgrammableWeb: APIsFinastra Payment Following Raw ISO20022

<noscript></noscript> The Finastra Payment Following Raw ISO20022 API initiates a new CT payment. Developers can authenticate with OAuth2. Finastra is an open and collaborative financial application development environment.
Date Updated: 2019-06-10
Tags: Financial

ProgrammableWeb: APIsFinastra International Payment Initiation

<noscript></noscript> The Finastra International Payment Initiation API initiates a new international payment. Developers can authenticate with OAuth2. Finastra is an open and collaborative financial application development environment.
Date Updated: 2019-06-10
Tags: Financial, Payments

Simon Willison (Django)Quoting Tristan Harris, former design ethicist at Google

There’s a spectrum on YouTube between the calm section — the Walter Cronkite, Carl Sagan part — and Crazytown, where the extreme stuff is. If I’m YouTube and I want you to watch more, I’m always going to steer you toward Crazytown.

Tristan Harris, former design ethicist at Google

Simon Willison (Django)datasette-render-binary


Yet another tiny Datasette plugin. This one attempts to render binary data in a slightly more readable fashion - it shows ASCII characters as they are, and shows all other data as monospace octets. Useful as a tool for exploring new unfamiliar databases as it makes it easier to spot if a binary column may contain a decipherable binary format.

Via Option to display binary data #506

Simon Willison (Django)datasette-bplist


It turns out an OS X laptop is positively crammed with SQLite databases, and many of them contain values that are data structures encoded using Apple's binary plist format. datasette-bplist is my new plugin to help explore those files: it provides a display hook for rendering their contents, and a custom bplist_to_json() SQL function which can be used to extract and query information that is embedded in those values. The README includes tips on how to pull interesting EXIF data out of the SQLite database that sits behind Apple Photos.

Via @simonw

Simon Willison (Django)Friday wins and a case study in ritual design

Friday wins and a case study in ritual design

"Culture is what you celebrate. Rituals are the tools you use to shape culture."

ProgrammableWebDaily API RoundUp: WildDuck, Knack, Lucid Meetings, Iternio, Pinball Map

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.

ProgrammableWebGoogle Hopes Fresh APIs Goose Interest in Google Pay

Google has designs on making Google Pay a more ubiquitous option for people as they navigate both the web and their neighborhood. With new or enhanced support for loyalty cards, offers, event tickets, and boarding passes, the latest payments APIs help developers get paid in more places.

Jeremy Keith (Adactio)Three conference talks

Conference talks are like buses. They take a long time and you constantly ask yourself why you chose to get on board.

I’ll start again.

Conference talks are like buses. You wait for ages and then three come along at once. Or at least, three conference videos have come along at once:

  1. The video of the talk I gave at State Of The Browser called The Web Is Agreement.
  2. The video of the talk I gave at New Adventures called Building.
  3. The video of the talk I gave at Frontend United called Going Offline.

That last one is quite practical. It’s very much in the style of the book I wrote on service workers. If you’d like to see this talk, you should come to An Event Apart in Chicago in August.

The other two are …less practical. They’re kind of pretentious really. That’s kinda my style.

The Web Is Agreement was a one-off talk for State Of The Browser. I like how it turned out, and I’d love to give it again if there were a suitable event.

I will be giving my New Adventures talk again in Vancouver next month at the Design & Content conference. You should come along—it looks like it’s going to be a great event.

I’ve added these latest three conference talk videos to my collection. I’m using Notist to document past talks. It’s a great service! I became a paying customer just over a year ago and it was money well spent. I really like how I’ve been able to set up a custom domain:

ProgrammableWeb: APIsRabobank Account Information

<noscript></noscript> The Rabobank Account Information API provides access to balance and transaction data for Rabobank payment accounts. It allows you to deliver consented payment accounts for a specific Rabobank customer, deliver balance for one or more consented payment accounts and more. Examples are available for Ruby, Python, PHP, Java, Node, Go, Swift, C, C# and cURL. This API is designed to be used by certified Payment Initiation and Account Information Service Providers. Rabobank provides financial services that access ways to make payments, invest, get a mortgage, save money and more.
Date Updated: 2019-06-07
Tags: Banking, Accounts, , Financial

ProgrammableWeb: APIsRabobank Confirmation Availability Funds

<noscript></noscript> The Rabobank Confirmation Availability Funds API verifies when a specific amount of funds are available on an account. Examples are available for Ruby, Python, PHP, Java, Node, Go, Swift, C, C# and cURL. This API is designed to be used by certified Payment Initiation and Account Information Service Providers. Rabobank provides financial services that access ways to make payments, invest, get a mortgage, save money and more.
Date Updated: 2019-06-07
Tags: Banking, Financial, , Verification

ProgrammableWeb: APIsRabobank Payment Initiation

<noscript></noscript> The Rabobank Payment Initiation API allows transactions to be initiated for the PSD2 Payment Initiation Service. Examples are available for Ruby, Python, PHP, Java, Node, Go, Swift, C, C# and cURL. This API is designed to be used by certified Payment Initiation and Account Information Service Providers. Rabobank provides financial services that access ways to make payments, invest, get a mortgage, save money and more.
Date Updated: 2019-06-07
Tags: Banking, Financial, , Payments

ProgrammableWeb: APIsRabobank OAuth

<noscript></noscript> The Rabobank OAuth API provides the ability to obtain tokens for OAuth 2.0 secured Rabobank API's. Examples are available for Ruby, Python, PHP, Java, Node, Go, Swift, C, C# and cURL. This API is designed to be used by certified Payment Initiation and Account Information Service Providers. Rabobank provides financial services that access ways to make payments, invest, get a mortgage, save money and more.
Date Updated: 2019-06-07
Tags: Banking, Authentication, , Authorization, , Financial

ProgrammableWeb: APIsRabobank Payment Request

<noscript></noscript> The Rabobank Payment Request API provides the ability for Third Parties to create and manage payment requests for domestic Rabobank accounts. Examples are available for Ruby, Python, PHP, Java, Node, Go, Swift, C, C# and cURL. This API is designed to be used by certified Payment Initiation and Account Information Service Providers. Rabobank provides financial services that access ways to make payments, invest, get a mortgage, save money and more.
Date Updated: 2019-06-07
Tags: Banking, Financial, , Payments

ProgrammableWeb: APIsRabobank PSD2 Enrollment

<noscript></noscript> The Rabobank PSD2 Enrollment API enables you with the ability to enroll automatically at Rabobank. It allows you to request production access for certified PSD2 AISPs and PISPs. A production account is created for the developer, to gain access to the PSD2 API products. The enrollment API requires an email address as a parameter, with the supplied email address assigned as a username. Examples are available for Ruby, Python, PHP, Java, Node, Go, Swift, C, C# and cURL. This API is designed to be used by certified Payment Initiation and Account Information Service Providers. Rabobank provides financial services that access ways to make payments, invest, get a mortgage, save money and more.
Date Updated: 2019-06-07
Tags: Banking, Financial

ProgrammableWeb: APIsFinastra Exchange Rates and Currency Conversion

<noscript></noscript> The Finastra Exchange Rates and Currency Conversion API returns the latest foreign exchange reference rates. Rates are quoted against the Euro by default. Finastra is an open and collaborative financial application development environment.
Date Updated: 2019-06-07
Tags: Financial, Conversions, , Currency

ProgrammableWeb: APIsFinastra US Payment Calculator

<noscript></noscript> The Finastra US Payment Calculator API calculates a T payment structure for a fully amortizing installment loan with Monthly Interest Accrual and a fixed interest rate. Finastra is an open and collaborative financial application development environment.
Date Updated: 2019-06-07
Tags: Financial

ProgrammableWeb: APIsFinastra Rate Search POS

<noscript></noscript> The Finastra Rate Search POS API creates a list of products and rates that apply to a specific purchase loan scenario. Finastra is an open and collaborative financial application development environment.
Date Updated: 2019-06-07
Tags: Financial

ProgrammableWebLabTwin’s Digital Lab Assistant Gains Deeper Integration and Voice Capabilities

LabTwin, provider of an AI-powered digital lab assistant, recently announced that a new open API will enhance their offering by providing deeper integration and streamlined communication. These upgrades aim to reduce data fragmentation that is caused by information being spread across different tools and platforms.

Amazon Web ServicesMeet the Newest AWS Heroes! June 2019

At the heart of the global AWS community are the builders and influencers whose passion for AWS leads them to actively share their technical know-how with others. The most prominent of these AWS community leaders are recognized as AWS Heroes. Heroes regularly share their extensive AWS knowledge online via blogs, social media, and open source contributions, and in person by speaking at industry conferences and running workshops or AWS-focused User Groups.

Today we are thrilled to introduce the latest cohort of AWS Heroes:

Anton Babenko – Oslo, Norway

Community Hero Anton Babenko is a long time developer and CTO who runs a consulting company Betajob AS in Norway. He helps companies around the globe build solutions using AWS, and specializes in infrastructure as code, DevOps, and reusable infrastructure components. Anton spends a large amount of his time as an open-source contributor on various Terraform & AWS projects, including terraform-aws-modules and He enjoys solving real cloud architecture tasks, figuring out generic solutions by getting to the core, and making them available as open source to let the whole AWS community benefit. Anton also co-founded and co-organizes AWS, DevOps, and HashiCorp User Groups in Norway, DevOpsDays Oslo, and often speaks at various technical Meetups and conferences.






Bhuvaneswari Subramani – Bengaluru, India

Community Hero Bhuvaneswari Subramani is Director Engineering Operations at Infor. She has almost two decades of IT experience, specializing in Cloud Computing, DevOps, and Performance Testing. She holds the AWS Certified Solution Architect Professional certification, is a co-organizer of the AWS User Group Bengaluru, and is instrumental in organizing Meetups & AWS Community Day Bengaluru. Bhuvaneswari is also an active speaker at AWS community events, industry conferences and delivers guest lectures on Cloud Computing for staff & students at engineering colleges affiliated to Anna University. She is a technophile & IT Blogger, who meticulously and picturesquely depicts the events that inspires & influences her. Her passion for technical writing is exemplified in the form of tech blog DevOps and CloudComputing for over a decade and of late, she constantly writes about AWS conferences and Meetups on the AWS User Group Bengaluru Blog.




Colin Percival – Vancouver, Canada

Community Hero Colin Percival is the founder of Tarsnap, a secure online backup service which combines the flexibility and scriptability of the standard UNIX “tar” utility with strong encryption, deduplication, and the reliability of Amazon S3 storage. Having started work on Tarsnap in 2006, Colin is among the first generation of users of Amazon Web Services, and has written dozens of articles about his experiences with AWS on his blog. Colin has been a member of the FreeBSD project for 15 years and has served in that time as the project Security Officer and a member of the Core team; starting in 2008 he led the efforts to bring FreeBSD to the Amazon EC2 platform, and for the past 7 years he has been maintaining this support, keeping FreeBSD up to date with all of the latest changes and functionality in Amazon EC2.





Francesco Pochetti – Luxembourg

Machine Learning Hero Francesco Pochetti first got in touch with Machine Learning back in 2013, taking Stanford’s ML MOOC by Andrew Ng. Now he leverages the wonders of AWS AI infrastructure, plays around with new services, builds ML solutions and lets the world know about his projects on his blog. This is where he regularly posts all his experiments in Machine Learning and Deep Learning. Most notably, within the AWS domain, Inferring movie genre from its poster in AWS SageMaker, Analyzing IMDb reviews sentiment with Amazon Comprehend or Running Neural Style Transfer with Lambda and GPU-powered EC2s.








Guy Ernest – Tel Aviv, Israel

Machine Learning Hero Guy Ernest is busy in taking machine learning and AI to the masses to three audiences. The main audience he engages are software developers (SDE) and converting them to machine learning engineers (MLE), using the popular fastai library, PyTorch, and Amazon AI services. The next audience is business people in large enterprises that are learning the applicability of machine learning to their business and the way to conduct the AI transformation of their organization. Finally, Guy works with kids who are starting their AI/ML learning journey by enabling them with Alexa skills, computer vision, and robots in after school and summer camp activities.








Kesha Williams – Atlanta, USA

Machine Learning Hero Kesha Williams has over 20 years of experience in software development. She successfully transformed her engineering skills from Java Developer to ML Practitioner by leaning hands on with AWS AI solutions like AWS DeepLens, Amazon Rekognition, and Amazon SageMaker. Kesha believes that as we all benefit from integrating technology into our everyday lives, we still struggle to make meaningful relationships with each other. To solve this, Kesha develops ML models on Amazon SageMaker using computer vision and natural language processing to help us better connect with people around us. Kesha is also very active in the community helping others find their path to machine learning. She authors courses for learning platforms such as Manning Publications, Packt, LinkedIn Learning, A Cloud Guru, and Cloud Academy.





Manoj Fernando – Sri Lanka

Community Hero Manoj Fernando is a Technical Lead at 99X Technology in Sri Lanka and the CTO of Whatif AS in Norway. He is passionate about designing scalable and cost-effective cloud architectures on the AWS cloud platform. His team was one of the early adopters of AWS Lambda back in 2015, and he is one of the co-organizers of Serverless Sri Lanka Meetup. During his leisure time, he creates cloud training videos for the community on his YouTube channel. The training videos are focused on Modern Application Development, Cloud Certifications, and Cutting-edge cloud services. He is also a technical blogger, blogging on medium as well as on his website, and a public speaker, conducting cloud workshops for university students in Sri Lanka.







Margaret Valtierra – Chicago, USA

Community Hero Margaret Valtierra is a Program Manager for the Cloud Service team at Morningstar. She is responsible for managing the AWS relationship and promoting cloud skills and best practices. She has organized and led the Chicago AWS user group since 2013. She is a member of the Global AWS Community Day Core Team, promoting user groups and organizing the annual Midwest AWS Community Day. Margaret is also a co-organizer for DevOpsDays Chicago and is an AWS Certified Solutions Architect Associate.








Marco Viganò – Milan, Italy

Community Hero Marco Viganò is the CTO of Condé Nast Italy. He has more than 20 years of experience in IT, with a specific focus on media and publishing sector. He is a frequent speaker at AWS Summits and events, sharing design patterns for developing and operating highly scalable cloud solutions for the media and publishing industry. He is focused on Serverless and Machine Learning and one of his main topics is finding new technologies to improve systems. Also, he operates as Voice First evangelist inside the company using Alexa and AWS services.








Pavlos Mitsoulis – London, United Kingdom

Machine Learning Hero Pavlos Mitsoulis has 7 years of Machine Learning and Software Engineering experience. Currently, he is a Staff Software Engineer (Machine Learning) at HomeAway (an Expedia Group brand), leading Machine Learning initiatives to support growth marketing. Additionally, he is the creator of Sagify, an open-source library that simplifies training, tuning, evaluating, and deploying ML models to SageMaker. Recently Pavlos authored a Packt video course, “Hands-On Machine Learning Using Amazon SageMaker“.








Vicky Seno – Los Angeles, USA

Container Hero Vicky “Tanya” Seno is a Computer Science Professor at Santa Monica College. At SMC she teaches numerous AWS courses covering Computing Services, Containers, Kubernetes, ECS, Serverless, Networking and Security. Vicky has helped develop an AWS Cloud Computing College Degree and is part of a team that helps train and mentor faculty from nineteen local colleges in AWS, to help expand AWS course offerings in the Los Angeles area. She is also a co-organizer of AWS Cloud Day Conference at SMC that includes SA speakers, AWS workshops and a AWS CTF attended by over 130+ students at each event. In an effort to increase female representation in this field, Vicky has been involved in various speaking and training activities. Vicky hosts a YouTube Channel with over 34,000 followers and 100+ beginners tech tutorials. She has also spoken at AWS Summits on Containers, Kubernetes, and Amazon EKS.







You can learn about all the AWS Heroes from around the globe by checking out the Hero website.

ProgrammableWebHow APIs Can Standardize Information Storage in the Cloud

Cloud-based storage has opened open a whole new world of possibilities for managing and analyzing data. The volume of data that business can have access to and can process has grown—as well as the number of applications that would like to access or provide a service that uses that data as well. People, as well as companies, want to use the cloud to store their files—and be able to access them and share them with others instantly.

ProgrammableWebAxway Unveils AMPLIFY Streams for Event-Driven Data Streaming

Axway, provider of a hybrid integration and content collaboration platform called AMPLIFY, has announced a new feature, AMPLIFY Streams, that allows any API to be turned into an event-driven data stream without server-side code.


Updated: .  Michael(tm) Smith <>