I was hired in December 2014 as the sixth engineer at Shyp. Shyp runs Node.js on the server. It's been a pretty frustrating journey, and I wanted to share some of the experiences we've had. There are no hot takes about the learning curve, or "why are there so many frameworks" in this post. Initially […]
3 May 2016
There is a good chance that your organization has automated tests. However, you might still face the following problems:
2 May 2016
Rails 5 will be the easiest release ever to get running on Heroku. You can get it going in just five lines: $ rails new myapp -d postgresql $ cd myapp $ git init . ; git add . ; git commit -m first $ heroku create $ git push heroku master These five lines […] The post Container-Ready Rails…
Create real-time graphs without code! With PubNub’s Project EON you can create real-time graphs that update when you publish data over PubNub.
Create real-time graphs without code! With PubNub’s Project EON you can create real-time graphs that update when you publish data over PubNub.
I recently participated in Softwareskills’ Liar’s Dice competition, and since people have expressed interest to hear about how I managed to win, I decided to summarize the process and results. As I prize I got 500SEK at Teknikmagasinet (Swedish store), a USB memory and this nice piece of paper :) Liar’s Dice and the Competition […]
In part one and part two in our series on Distributed Development challenges and solutions, we examined People Enablers and Process Enablers.
1 May 2016
I remember when I was in university (a long time ago) and learning systems programming, I believed that the only “real” languages were Assembly and C. And Pascal was - how to put it nicely - a very high-level language used by application developers who didn’t want to know what was going on under the hood. Little did I know…
29 Apr 2016
We were proud to once again be a sponsor at last week’s JSUnconf in Hamburg. The conference, that centers around the latest and greatest in JavaScript, is truly the “unconference” in both content and overall execution. It’s a completely non-profit conference built for the community, by the community. As the event grows year over year, […]
28 Apr 2016
This Chat App Best Practice Guide includes basic chat features, app UX improvement, as well as secure chat using AES cryptography.
This Chat App Best Practice Guide includes basic chat features, app UX improvement, as well as secure chat using AES cryptography.
Bugs are great learning opportunities. So how do we make sure we learn as much as possible from the bugs we fix? A method I have used for more than 13 years now is to write down a short description of … Continue reading →
27 Apr 2016
Today we are announcing an important change to our Conversations API service: On April 30, 2017 service will end for Conversations API versions 5.2 and 5.3 By deprecating older versions of our API service, we can refocus our energies on the current and future API services, which we feel offer the most benefits to our […]
We’re releasing the public beta of OpenAI Gym, a toolkit for developing and comparing reinforcement learning (RL) algorithms. It consists of a growing suite of environments (from simulated robots to Atari games), and a site for comparing and reproducing results.
Let’s face it, when we’re in the office 40+ hours a week, the way an office is designed inherently impacts our health, well-being, and work product.
Dr. David Walton, as director of Global Health for Thoughtworks, leads a team of about 100 people who leverage their expertise in technology and software while working with health organizations to improve healthcare delivery for those who are poor and marginalized. The focus of this group is to abate health disparities through the use of technology solutions best suited to…
26 Apr 2016
This post is an extract from my presentation at the recent GoCon spring conference in Tokyo, Japan. Errors are just values I’ve spent a lot of time thinking about the best way to handle errors in Go programs. I really wanted there to be a single way to do error handling, something that we could teach all […]
Today we are happy to announce early access to Heroku Kafka. We think Kafka is interesting and exciting because it provides a powerful and scalable set of primitives for reasoning about, building, and scaling systems that can handle high volumes and velocities of data. Heroku Kafka makes Kafka more accessible, reliable, and easy to integrate […] The post Announcing Heroku…
We have two more team updates.
(I accidentally published an unfinished draft of this post a few days ago – sorry about that). There’s a lot of sources preaching the benefits of dollar cost averaging, or the practice of investing a fixed amount of money regularly. The alleged benefit is that when the price goes up, well, then your stake is worth more, but if the…
Blockchain For Grown-Ups, Part 2: What's Real?
25 Apr 2016
Today we are announcing that Session Affinity routing is now generally available as a fully supported part of the Heroku Platform. When Session Affinity is enabled for an app, requests from a given browser will always be routed to the same Dyno. Under the hood, the Heroku Router will add a cookie to all incoming […] The post Session Affinity…
Listicles like these do work – not only do they attract attention, if the content is also valuable (and in this case it is, trust me), the article format can be extremely entertaining. This article will bring you 10 SQL tricks that many of you might not have thought were possible. The article is a … Continue reading 10 SQL…
At Thoughtworks, we are constantly looking for talented workers to continue building world-class software and serving our clients. A child of an immigrant founded Thoughtworks more than 20 years ago and we believe that immigrants have had a huge role to play in our growth.
21 Apr 2016
Julien Dubois is the lead developer of JHipster, a Yeoman generator for Spring and AngularJS applications. Julien’s here to show how you can use a generator like JHipster to address some of the design concerns microservices introduce like discovery and routing so you can focus on your core business logic. What is JHipster? JHipster (for […] The post Bootstrapping Your…
A very interesting question was posted to Stack Overflow and reddit just recently about Java generics. Consider the following method: While the unsafe cast seems a bit wonky, and you might guess there’s something wrong here, you can still go ahead and compile the following assignment in Java 8: This is obviously wrong, because Integer … Continue reading The Parameterless…
20 Apr 2016
Epsg.io was successfully updated with latest EPSG database 8.9. We are happy to announce these new features.
Plenty of people are talking about how organisations should capitalise on design, yet few are talking about the practicalities of what it looks like to actually deliver it. Pairing developers and designers removes the natural suspicion between them, is fun, easy, and presents value to customers faster, making businesses—and teams—happier.
19 Apr 2016
Welcome to the jOOQ Tuesdays series. In this series, we’ll publish an article on the third Tuesday every other month where we interview someone we find exciting in our industry from a jOOQ perspective. This includes people who work with SQL, Java, Open Source, and a variety of other related topics. We have the pleasure … Continue reading jOOQ Tuesdays:…
Today, we are happy to announce the graduation of Heroku Review apps from an exceptionally popular beta to being generally available to all Heroku users. Review apps are the instant, disposable Heroku app environments that can spin up automatically with each GitHub pull request. They allow developers and their teams to automatically build and test […] The post Heroku Review…
18 Apr 2016
The singular value decomposition (SVD) of a matrix is a fundamental tool in computer science, data analysis, and statistics. It’s used for all kinds of applications from regression to prediction, to finding approximate solutions to optimization problems. In this series of two posts we’ll motivate, define, compute, and use the singular value decomposition to analyze some data. (Jump to the…
This is one of those “N technical things every programmer must read” lists, except that “programmer” is way too broad a term and the styles of writing people find helpful for them are too different for any such list to contain a non-zero number of items (if you want the entire list to be helpful to everyone). So here's a…
One of my favorite business hobbies is to reduce some nasty decision down to its absolute core objective, decide the most basic strategy, and then add more and more modifications as you have to confront the complexity of reality (yes I have very lame hobbies thanks I know). Software engineers want to deliver features quickly without adding too much tech…
I'm a big fan of Sublime Text editor, which I was using for years now. Minimal, fast, reliable. But there is one big problem with it. Only one man is working on it's development and community really slowed down. JavaScript ecosystem is going forward at incredible speed, and I'm not sure if Sublime will be able to keep up. Even…
One of the things we are often asked to do at Thoughtworks is help organizations and teams transition to new ways of working and thinking about work. Frequently, these requests are driven by an organization’s desire to compete more effectively in their marketplace, or to protect themselves against disruptive newcomers. Often beginning with the Information Technology (IT) function or department,…
17 Apr 2016
In my previous post, The Wisdom of Programming Quotes, I called out some quotes that look good on the surface, but turn out to promote the wrong ideas about software development. I have also posted some of my favorite programming qoutes … Continue reading →
16 Apr 2016
This is the first set mixed in nearly 12 years. Working in an open office space means many hours of my day are spent listening to music with headphones on, cranking away at software code. For me, this means listening to music that doesn’t distract from the task of writing and problem solving. This set was designed in the spirit…
15 Apr 2016
Two days ago, we held the second Tech Meetup. There were two speakers including myself, and Nemanja Nićiforović, our CEO. Nemanja spoke How to Freelance, and I covered Intro to React. Grab slides: How To Freelance Intro To React We are very thankful to our friends at Zaokret where meetup took place. There were around 60 people and we hope…
14 Apr 2016
Josh shows you how to stream tweets matching a hashtag into PubNub with NodeJS.
Josh shows you how to stream tweets matching a hashtag into PubNub with NodeJS.
13 Apr 2016
In the context of a previous blog post about JUnit 5, Maaartinus, one of our readers, has brought up a very interesting idea: The only problem with try-catch is its verbosity, which is something I can live with (IMHO a lone catch would do better, the implicit try would apply to all preceding code in … Continue reading Would We…
We have made a Google Maps API v3 component, which anybody can use in custom projects to add a control showing current geolocation with just one line of code.
How do you encourage customers to repeatedly choose your brand in the face of alternatives? This is the question we posed at our executive retail breakfast series in London, Manchester and Hamburg this month.
We publish our Technology Radar twice a year: it’s a snapshot of current and future technologies that we think are important and relevant across the industry. We assemble about 20 of our most senior technologists from around the world to create the Radar and it’s a great opportunity to compare trends and directions using a global view. We summarize major…
12 Apr 2016
Security is important, especially on the data access layer. Most commercial databasese allow for fine-grained privilege control using database access grants. For instance, you would be restricting access from a user to a certain set of tables (or even better: views), via GRANT statements: With this fine-grained access control, write operations on certain database objects … Continue reading Using jOOQ’s…
Explore HTTP messages by building a simple Python webserver and interacting with it using Netcat. See requests in action!
I've learned so much during my time at IBM Design! This is a little wrap up post and an announcement about my next adventure.
11 Apr 2016
Few people know about this very very awesome feature of the Stack Exchange platform. The Stack Exchange Data Explorer To be found here: http://data.stackexchange.com As you may know, much of the Stack Exchange platform runs on SQL Server (interesting architecture details here: http://stackexchange.com/performance), and the team has had the courtesy of making a lot of … Continue reading Using SQL…
The book starts with a story about a time Margaret Hamilton brought her young daughter with her to NASA, back in the days of the Apollo program. During a simulation mission, her daughter caused the mission to crash by pressing some keys that caused a prelaunch program to run during the simulated mission. Hamilton submitted a change request to add…
What is the value of test driven development? Is the value writing tests at the same time as you write the code? Sure, I like that property. It means that at any time you’re one control-Z away from your tests passing; either revert your test change, or fix the code so the test pass. The nice property of this method…
I love good programming quotes. The best ones say something true about the craft of programming, usually both concisely and humorously. Recently I started following Programming Wisdom on Twitter. It’s been a source of many great quotes, but occasionally I … Continue reading →
I’ve been at Thoughtworks for 12 years. Who would have imagined? Instead of writing about my reflections from the past year, I thought I would do something different and post twelve key learnings and observations looking back over my career. I have chosen twelve, not because there are only twelve, but because it fits well with the theme of twelve…
10 Apr 2016
This is the story on how I sped up my terminal load time.
9 Apr 2016
"Unlock root-level ports without root privileges: A guide to systemd socket activation"
8 Apr 2016
MapTiler helps with the fast delivery of aerial images taken with multispectral crop monitoring sensors, usually carried by a drone or an aircraft.
Did you know you can make games in CSS? This post explores a relatively obscure CSS property (counter-increment) combined with checkbox inputs to show you how.
7 Apr 2016
We recently sat down for a chat with Bill Curtis, a co-founder and the CTO of Sweet Tooth (Now Smile.io), a points and rewards app for online stores worldwide. What has been your greatest challenge? We’re serving way more data today than we ever have, so scaling is mission-critical. In the past, we’ve struggled with […] The post Cyber Monday,…
Stream sensor values from Arduino to a live web dashboard shown by Tomomi from PubNub.
Stream sensor values from Arduino to a live web dashboard shown by Tomomi from PubNub.
This is a thought experiment about sentinel error values in Go. Sentinel errors are bad, they introduce strong source and run time coupling, but are sometimes necessary. io.EOF is one of these sentinel values. Ideally a sentinel value should behave as a constant, that is it should be immutable and fungible. The first problem is […]
Often the best way to learn a new language is to implement something you know with it. Let’s take a look at some common async Javascript patterns, and how you’d implement them in Go. Callbacks You can certainly implement callbacks in Go! Functions are first class citizens. Here we make a HTTP request and hit […]
6 Apr 2016
Last week, Terence Lee and I caught up with Tom Dale at EmberConf to talk about FastBoot, when you should avoid native apps, and why JavaScript on the server and the browser might start to converge. Check the end for the full recording! So let’s start with the drama, would you say Ember has declared […] The post Tom Dale…
5 Apr 2016
Two years ago we released the Heroku Platform API (v3), providing a supported way to automate and instrument Heroku and making it even easier for you to build new products. Today we are deprecating the legacy, unofficial version of the API that preceded it (v2), as its usage is limited and we are focusing development […] The post Sunsetting Heroku’s…
This is the one of my most popular repos. Once client asked for inline video that works on iPhone too. As Apple doesn't allow that (all videos are full screen in native player, and autoplay is not supported),. There was no easy solution, so this player was born. It uses HTML video and canvas. Script picks up the frame from…
In the first post in our series on Distributed Development challenges and solutions, we examined people-related enablers. In this second post, we will look at process-related enablers.
Every week you get an invitation to a blockchain conference. Every magazine and newspaper has an article about blockchain, and every company you talk to has an “innovation lab” working on blockchain. You’ve spent more than a few idle moments imagining the possibility and promise blockchain could bring to, well, just about anything! But then you go back to work…
Implementing an Electronic Health Record (EHR) in Post-Earthquake Nepal.
I was interviewed for one of my favorite podcasts ever: The Start FM. The conversation is about how I got to be where I am now and what it means to be so young in the industry.
4 Apr 2016
Apparently MTA (the company running the NYC subway) has a real-time API. My fascination for the subway takes autistic proportions and so obviously I had to analyze some of the data. The documentation is somewhat terrible, but here’s some relevant code for how to use the API: from google.transit import gtfs_realtime_pb2 import urllib for feed_id in [1, 2, 11]: feed…
You know that scene in The Rock where Nicolas Cage is super dreamy (like he is) and decides his life mission is to look for VX poison gas and save San Francisco (like he would)? That’s baaaasically me, if by “look for VX poison gas” you mean “nerd out on emoji”, and by “save San Francisco” you mean “and tell…
This simple bash command finds all of the files matching *~ recursively, executes rm on them and prints out which files are affected. You can replace file matching pattern, and command you want to execute. find ./ -name '*~' -exec rm '{}' ';' -print
3 Apr 2016
You may have seen the TSA Randomizer on your last flight. A TSA agent holds an iPad. The agent taps the iPad, a large arrow points right or left, and you follow it into a given lane. How much does the TSA pay for an app that a beginner could build in a day? It […]
2 Apr 2016
This is a progress report on the Go toolchain improvements during the 1.7 development cycle. All measurements were taken using a Thinkpad x220, Core i5-2520M, running Ubuntu 14.04 linux. Faster compilation Since Go 1.5, when the compiler itself was translated from C to Go, compile times are slower than they used to be. Everyone knows it, nobody […]
31 Mar 2016
This article is overdue. After the hype around the release of Kotlin 1.0 has settled, let’s have a serious look at some Kotlin language features that we should have in Java as well. In this article, I’m not going to wish for unicorns. But there are some low hanging fruit (as far as I naively … Continue reading 10 Features…
We've had some fantastic people join over the past few months (and we're still hiring). Welcome, everyone!
30 Mar 2016
When you think about it, threads are a strange abstraction. From the programmer’s point of view, threads are great. It’s as if you can create virtual CPUs, on the fly, and the operating system will take care of simulating these virtual CPUs on top of real ones. But on an implementation level, what is a […]
SXSW was once the domain of music and film. Someone’s gotta buy all those super-skinny-jeans and coin terms like mumblecore. Enter retail. Retail has a growing presence at SXSW. Last year SXstyle joined the lineup - a nod to the collision of fashion, retail and technology. This year the festival brimmed with vibrant retailers and industry innovators from Neiman Marcus…
29 Mar 2016
An interesting question by Tagir Valeev on Stack Overflow has recently caught my attention. To keep things short (read the question for details), while the following code works: printing 1 2 3 4 5 The following, similar code won’t work: Causing a StackOverflowError. Sure, this kind of recursive iteration is not optimal. It wasn’t prior … Continue reading Watch Out…
28 Mar 2016
More and more companies and industries are grappling with the challenges of extracting value from large amounts of data. Data scientists, the people whose job it is to overcome these challenges, are becoming more prominent, yet what it is they do, and how they’re different than software engineers, is still a mystery to a lot of people. The […]
Variations on a theme Back in 2014 I wrote a post called How to Conquer Tensorphobia that should end up on Math $ \cap$ Programming’s “greatest hits” album. One aspect of tensors I neglected to discuss was the connection between the modern views of tensors and the practical views of linear algebra. I feel I need to write this because…
Obviously I’d normally ask developer questions on Stack Overflow but in this case, it feels like the answers may be at least somewhat opinion-based. If it turns out that it’s sufficiently straightforward that a Stack Overflow question and answer would be useful, I can always repost it there later. The Facts Noda Time 1.x exists … Continue reading Versioning conundrum…
Systems Analyst That was my title at my previous job, one that I would join almost exactly a year ago. It was, I must admit, an exciting time for me as I had recently returned from studying in the UK to my native Quito and would be working in the IT field for the first time. I was hired by…
26 Mar 2016
Source code for everything is on Github. It probably won’t be useful to you unless you’ve got very similar hardware to mine, but you may want to just have a look. Background Near the end of 2015, we had a new shed built at the back of our garden. The term “shed” is downplaying it … Continue reading Ultimate Man…
25 Mar 2016
In December 2014 the Go project moved from Google Code to GitHub. Along with the move to GitHub, the Go project moved from Mercurial to Git, which necessitated a move away from Rietveld to Gerrit for code review. A healthy open source project lives and dies by its contributors. People come and people go as time, circumstance, their […]
24 Mar 2016
PubNub announces support for Windows 10's Universal App Platform applications.
PubNub announces support for Windows 10's Universal App Platform applications.
This Stack Overflow question has yet again nerd-sniped me [finding the] maximum element in the array that would result from performing all M operations Here’s the question by John that was looking for a Java solution: With an array of N elements which are initialized to 0. we are given a sequence of M operations … Continue reading Time for…
The must be willing to relocate to San Francisco meme has been doing the rounds on Twitter to great effect. The best jokes have a grain of truth to them. I think it is absurd to expect to draw on an infinite supply of debt burdened twenty somethings to relocate to the hottest real estate market on the planet. A…
23 Mar 2016
After some years without using Neo4j I had the chance to use the graph database in my current project. Neo4j was a good fit because it makes it really easy to prototype an idea and the project itself relies heavily upon tree structures. Modelling tree structures in relational database management […] The post Fixing “Unable to obtain lock on store…
This post shares 6 tips to build fast web applications based on a talk at Php Dublin in March 2016. It includes slides and covers topics like caching, compression, database optimization, and more.
Neuroevolution is subcategory of machine learning that applies evolutionary computation to generate artificial neural networks. Traditionally neural networks are trained using the backpropagation algorithm. Back propagation is limited in its application especially in scenarios where a training set of sufficient size is unavailable as in artificial life or evolutionary robotics. Backpropagation also puts a lot of constraints on the topology…
22 Mar 2016
Matthew Eckstein is the VP of Engineering for charity: water. For more information, visit: www.charitywater.org. Read our charity: water customer story to learn more about how Heroku has helped their organization deliver clean water to millions of people around the world. Tell us a bit about charity: water charity: water is a non-profit organization that […] The post React, Ruby…
Having examined the challenges of Distributed Development, let us look at some enablers that can help alleviate the challenges under three broad categories – People, Process, and Tools and Infrastructure. Let us start with people related enablers.
21 Mar 2016
Today’s Washington Post has a story entitled “Johns Hopkins researchers poke a hole in Apple’s encryption“, which describes the results of some research my students and I have been working on over the past few months. As you might have guessed from the headline, the work concerns Apple, and specifically Apple’s iMessage text messaging protocol. … Continue reading Attack of…
If you’re a developer, it’s unlikely you’ve ever said “I wish I could spend a whole day patching critical security holes in my infrastructure!” (If you do, we’re hiring). And if you’re running a business, it’s unlikely you’ve ever said “Yes! I would like my developers to lose a day’s worth of feature-building on security […] The post Heroku Behind…
An acquaintance of mine, let’s call him Mike, is looking for work after getting laid off from a contract role at Microsoft, which has happened to a lot of people I know. Like me, Mike has 11 years in industry. Unlike me, he doesn't know a lot of folks at trendy companies, so I passed his resume around to some…
Last week, we open-sourced LightCycle, an Android library that helps break logic out of and classes into small, self-contained components called LightCycles. Components that typically need to be aware of and lifecycle events include presenters, UI tracking code, input processors and more. We’ve been using LightCycle extensively in the SoundCloud Music & Audio and SoundCloud Pulse apps over the last…