As someone with several years of experience in Human Resources, my job at Thoughtworks was quite different from the usual. For instance, we don’t like to call it “Human Resources”, because we don’t see people as resources. We simply call it ‘People Operations’. It took me some time to adapt to this unique and fast-paced environment, and I’ve learned a…
25 Feb 2015
24 Feb 2015
Nine months ago we released Heroku Connect, the bi-directional data synchronization service that enables developers to build Heroku apps that seamlessly interact with Salesforce data. Since then, we’ve seen developers use it to build all types of interesting apps for web and mobile, especially for eCommerce, loyalty, and Internet of Things use cases. We’ve also […] The post Heroku Connect…
We conducted our 3rd SI Hackathon on Feb 19th to Feb 20th. This is one of the hackathon results. Background While searching for a nice datepicker for SI I figured out that there’s nothing that is really pleasing from both technical and aesthetical perspective. Either it is an jQuery wrapped thingy, or wrapped pickaday or if […]
We conducted our 3rd SI Hackathon on Feb 19th to Feb 20th. This is one of the hackathon results. Background My previous Hackathon project was way too ambitious, so I decided to pick something easier this time, which would also help reduce our support load a bit. A frequent pain point is that client admins […]
How to program a Tessel camera app to capture images, including connecting your Tessel, all on the client side.
How to program a Tessel camera app to capture images, including connecting your Tessel, all on the client side.
Every framework introduces a new compromise. A compromise that is introduced because the framework makes some assumptions about how you’d like to interact with your software infrastructure. An example of where this compromise has struck users recently is the discussion “Are Slick queries generally isomorphic to the SQL queries?“. And, of course, the answer is: … Continue reading jOOQ vs.…
"Curiosity!" - The word I connect with the most and one that motivates me in life. Right after finishing an engineering degree in computer technology, I joined Thoughtworks as an application developer. The journey for every grad Thoughtworker from around the world starts with a six-week training at Thoughtworks University . It was one of the best phases of my…
Nobody intentionally erases the memory of when you first fall in love. In my case, it was love at first sight. I was only 19 years old. It was when I stepped into a bank, in the interiors of Uganda, 8hrs away from Kampala. I was at the bank to pay my high school tuition fees. That’s when we met.
BresicWhitney is a lifestyle property group serving modern buyers across inner Sydney, Australia. They saw an opportunity to shake up the real estate industry in Australia. They had an idea that would give buyers the information they needed - instantly. Partnering with us, we designed and tested a document delivery system.
23 Feb 2015
What we’ve come to call loyalty is badly broken. Businesses have let themselves slip into a mass-market definition of loyalty that isn’t pretty. We foster fear and pander to greed all the while pretending its love. Deeply disruptive changes are on the horizon that will make this shallow engagement obsolete. Fortunately, these same forces offer a new path for building…
22 Feb 2015
In recent years it has become more and more common to work in different projects running on different versions of Java. There are still some running on Java 6, and there are tons already running on Java 8.
For most people straight out of school, work life is a bit of a culture shock. For me it was an awesome experience, but a lot of the constraints were different and I had to learn to optimize for different things. It wasn’t necessarily the technology that I struggled with. The hardest part was how to manage my own projects…
21 Feb 2015
The Symfony HttpKernel Component allows interacting with the response generation through events. The Kernel Response event permits modifying the response before sending it out. Two examples show how to use it to add custom headers and cookies without touching controller logic.
20 Feb 2015
Every holiday season, the virtual doors of your favorite retailer are blown open by a torrent of shoppers who are eager to find the best deal, whether they’re looking for a Turbo Man action figure or a ludicrously discounted 4K flat screen. This series focuses on our Big Data analytics platform, which is used to learn more […]
In past few years, it has become quite common for software development teams to be distributed across time-zones and comprise of multiple vendors with 50-100+ people. Agile practices encourage in-person interactions to foster collaboration, whereas, distributed and large teams force communication into the opposite direction. Therefore, it is important to achieve agility albeit with different, or modified mechanics, that work…
19 Feb 2015
The information security news today is all about Lenovo’s default installation of a piece of adware called “Superfish” on a number of laptops shipped before February 2015. The Superfish system is essentially a tiny TLS/SSL “man in the middle” proxy that attacks secure connections by making them insecure — so that the proxy can insert … Continue reading How to…
Apps have transformed how we do almost everything. The ubiquity of mobile devices with millions of available apps mean that today, anyone can pull up an app in seconds to check their car engine, turn on the lights at home or ride a scooter across town. So far, the companies behind these apps have mostly […] The post Introducing Heroku…
How to build a mobile iOS chat app with Cordova/PhoneGap and AngularJS, then turn it cross-platform for mobile and web devices.
How to build a mobile iOS chat app with Cordova/PhoneGap and AngularJS, then turn it cross-platform for mobile and web devices.
Whether you’re running a web service or a blog, you should always keep your software fully patched to prevent attacks and minimize your attack surface. Another smart step is to prevent full path disclosures. For example, if your blog or service throws an error like “Warning: require(ABSPATHwp-includes/load.php) [function.require]: failed to open stream: No such file […]
FYI: Like the previous post, this is a really quick tip.
So what makes a good UX Designer? It’s a question that I think about a lot (and hopefully, if you are in the UX field, you think about it too). Because the field of User Experience is relatively new, we spend a lot of time trying to define what a UX designer is and what we do on a daily…
A blog post written for SitePoint on why community is at the crux of a thriving code base.
18 Feb 2015
There’s a story on Hacker News asking what the hell is going on with the Truecrypt audit. I think that’s a fair question, since we have been awfully quiet lately. To everyone who donated to the project, first accept my apologies for the slow pace. I want to promise you that we’re not spending your money … Continue reading Another…
(unless you really override Object.equals(), of course). I’ve stumbled upon a rather curious Stack Overflow question by user Frank: Why does Java’s Area#equals method not override Object#equals? Interestingly, there is a Area.equals(Area) method which really takes an Area argument, instead of a Object argument as declared in Object.equals(). This leads to rather nasty behaviour, as … Continue reading Thou Shalt…
17 Feb 2015
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:…
A friend recently asked me for some advice in preparing a talk for an upcoming conference. I ended up writing way more than they asked for. If you are a Nerd like me, I hope you find some of this advice helpful. Preparing the talk Read before you write Of course you should do your research […]
FYI: This is a really quick tip.
16 Feb 2015
There are two basic problems in information theory that are very easy to explain. Two people, Alice and Bob, want to communicate over a digital channel over some long period of time, and they know the probability that certain messages will be sent ahead of time. For example, English language sentences are more likely than gibberish, and “Hi” is much…
Things were as usual
I constantly hear how enterprises are poor at innovation, bad at product development and unresponsive to business change. So it begs the question, why do so many organizations get it wrong? And what are the key factors to consider when trying to innovate in large organizations?
15 Feb 2015
There's an ongoing debate over whether "AI" will ever be good enough to displace humans and, if so, when it will happen. In this debate, the optimists tend to focus on how much AI is improving and the pessimists point to all the ways AI isn't as good as an ideal human being. I think this misses two very important…
13 Feb 2015
We’ve been blogging about Java and SQL for a while now, on the jOOQ blog. Over the years, while researching interesting blog topics, we’ve discovered a lot of SQL gems in the blogosphere that have inspired our work and our passion for SQL. Today, we’re presenting to you a list of 10 articles that we … Continue reading 10 SQL…
This is a short post to recognise the incredible contribution Alex Brainman has made to the Go project. Alex was responsible for the port of Go to Windows way back before Go 1 was even released. Since that time he has virtually single-handedly supported Go and Go users on Windows. It’s no wonder that he is […]
12 Feb 2015
This blog post walks you through how to implement multiplexing in an Ember.js chat app, to enable you to combine data streams on a single connection.
This blog post walks you through how to implement multiplexing in an Ember.js chat app, to enable you to combine data streams on a single connection.
Bluetooth Low Energy tech to transfer data and share contact info between iOS devices by bumping the phones together.
Bluetooth Low Energy tech to transfer data and share contact info between iOS devices by bumping the phones together.
The Next Big Thing You have likely heard by now of the Internet of Things (IoT), and perhaps, too, of the Quantified Self (or QS, for the hip). They’ll be all the rage soon, and are premised on the increasing prevalence of tiny, low-cost sensors, and the fast, cheap connections between them, that can go into our homes, our clothes,…
11 Feb 2015
At Heroku, we love telling the stories of what our customers and partners build on the platform. We love it even more when we get a chance to talk to the development team behind a successful app. So we were excited to sit down with Steve Simpson, CTO of Ethos Solutions—a Heroku partner—to discuss how […] The post Ethos Solutions…
Febrary 6 was my last day at Spotify. In total I spent more than six years at Spotify and it was an amazing experience. I joined Spotify in Stockholm in 2008, mainly because a bunch of friends from programming competitions had joined already. Their goal to change music consumption seemed ridiculous at that point, but six years later I think…
10 Feb 2015
If you haven’t read Julia Angwin’s excellent profile of GnuPG’s lead developer Werner Koch, now would be a great time to check it out. Koch, who single-handedly wrote GnuPG in 1997, has been doggedly maintaining the codebase ever since — and not getting paid very well for it. Despite good intentions on all sides, Koch … Continue reading How do…
I gave a talk about how to get started contributing to Chromium, but it wasn’t recorded, and my slides by themselves look like cold-medicine induced hallucinations (which, to be fair, they were). So instead, here is a giant blog post that will take you through every step from “checking out the code” to “landing the code in the Chromium repo”.…
As I watched some of my fellow travellers absent mindedly throw garbage out of the window on a recent train journey, I struck a conversation with them to understand why cleanliness awareness campaigns haven’t had any impact on them. While I heard them defending themselves, it occurred to me that there is a striking similarity in the mindset behind littering…
9 Feb 2015
Last time we saw a number of properties of graphs, such as connectivity, where the probability that an Erdős–Rényi random graph $ G(n,p)$ satisfies the property is asymptotically either zero or one. And this zero or one depends on whether the parameter $ p$ is above or below a universal threshold (that depends only on $ n$ and the property…
Cross-disciplinary exploration and good times My co-founder Kent Rahman and I kicked off Hardware Hack Lab about a year ago - and the energy just keeps building and building. Those of us running the lab take our inspiration not from technology alone, but from people and interactions. We believe that innovations gain most of their richness and momentum from the…
Neuroscience plays a big roll in our design work. This post takes a look at Sensory Memory and how animations that visually link states can improve a user's experience.
8 Feb 2015
My most recent post goes in another direction (no, it’s still about Nim): How I start a new Nim project. Check out the article on howistart.org. Comments on Hacker News and Reddit as always.
While working with agile teams - do you constantly fear that your team will soon become a self driven team and will no longer need you? Is it always your worry that your agile team will stop giving you the importance of a PM? Fear not....... Here are 5 simple but highly effective tips that are guaranteed to make you…
7 Feb 2015
A few weeks ago I bought a new notebook (Dell XPS 15, 15″, 512 GByte SSD, Core i7) for my after-work work and home usage. First of all: it is an awesome fast piece of hardware. Fedora 21 boots up in 3 seconds, Eclipse (STS) starts up in around 7 […] The post Dell XPS 15, Linux and HiDPI appeared…
6 Feb 2015
Today we’re announcing the general availability of GitHub integration for Heroku. When enabled, GitHub pushes are deployed immediately to linked Heroku apps. This is a big step forward for people working on apps with source managed on GitHub and deployed to Heroku. The integration has been in beta in Heroku Dashboard for a while, and […] The post Ship Code…
5 Feb 2015
How to use Rickshaw, d3.js, and PubNub Pub/Sub Messaging to stream data and publish updates to a real-time chart. In this tutorial, we'll graph Node.js usage
How to use Rickshaw, d3.js, and PubNub Pub/Sub Messaging to stream data and publish updates to a real-time chart. In this tutorial, we'll graph Node.js usage
There has been a lot of hype about the buzzword “web scale“, and people are going through lengths of reorganising their application architecture to get their systems to “scale”. But what is scaling, and how can we make sure that we can scale? Different aspects of scaling The hype mentioned above is mostly about scaling … Continue reading Top 10…
In the two and a half years that I have been at Thoughtworks, I have been part of three different projects and have worked out of three locations. My current project team is the biggest I have ever worked with. We are working on the development of a Global Web Transformation Platform for the website of one of the leading…
I spent the days between Christmas and New Years in Hamburg, Germany at the Chaos Communication Congress. I had a fantastic time as usual, and there were a lot of great discussions and talks. I wanted to quickly cover the new revelations that Jake Appelbaum and Laura Poitras dropped on us on a Sunday evening. The video can be found…
In January 2014, I began my journey at Thoughtworks Quito. Prior to that, I was a journalist who never really enjoyed technology. However, when I worked as a writer for a tech magazine, I got absorbed into the world of technology. I got interested in Software Development after I heard a talk by Rebecca Parsons; she was a big inspiration.…
What if there were no more stores? Would everything be sold online and the streets be choked with UPS trucks? It's unlikely. Few major transformations are so neat and tidy.
4 Feb 2015
How to implement access manager for fine grain control over grant/revoke access to data streams in a chat app for an extra layer of security.
How to implement access manager for fine grain control over grant/revoke access to data streams in a chat app for an extra layer of security.
Customers need to be able to trust you with their payment info. Here's how.
This article introduces incremental garbage collection (GC) which has been introduced in Ruby 2.2. We call this algorithm RincGC. RincGC achieves short GC pause times compared to Ruby 2.1. About the Author: Koichi Sasada works for Heroku along with Nobu and Matz on C Ruby core. Previously he wrote YARV Ruby's virtual machine, and he […] The post Incremental Garbage…
I know, everyone uses Travis. I have nothing against it. But in case you want to test and/or use Shippable, this might be just the guide for you. I will also show how to setup those nice tabs with the test and coverage reports.
Have you been struggling with complicated installation of open-source GIS command-line tools with all the drivers on your computer? Now it is much easier!
3 Feb 2015
Building smarter beacon tech with bidirectional beacon communication. An overview of beacon tech, differences, and tutorials for Android, Apple, and Tessel.
Building smarter beacon tech with bidirectional beacon communication. An overview of beacon tech, differences, and tutorials for Android, Apple, and Tessel.
We’ve been blogging a lot about the merits of modern SQL on the jOOQ blog. Specifically, window functions are one of the most fascinating features. But there are many many others. Markus Winand, author of the popular book SQL Performance Explained has recently given a very well-researched talk about modern SQL. We particularly like his … Continue reading Still Using…
It's generally accepted that any piece of software could be compromised with a backdoor. Prominent examples include the Sony/BMG installer, which had a backdoor built-in to allow Sony to keep users from copying the CD, which also allowed malicious third-parties to take over any machine with the software installed; the Samsung Galaxy, which has a backdoor that allowed the modem…
Joining strategy together with the execution of the right solution challenges most teams today. It’s difficult for many reasons. Defining a strategy is not a static exercise. Predicting the future is difficult, full of uncertainty, and new information is always being discovered. Complicating things further, teams often divide responsibility for strategy and execution. This makes it harder to adapt to…
2 Feb 2015
There has been an interesting discussion on reddit, the other day Static Inner Classes. When is it too much? First, let’s review a little bit of basic historic Java knowledge. Java-the-language offers four levels of nesting classes, and by “Java-the-language”, I mean that these constructs are mere “syntax sugar”. They don’t exist in the JVM, … Continue reading Top 5…
Last time we left off with a tantalizing conjecture: a random graph with edge probability $ p = 5/n$ is almost surely a connected graph. We arrived at that conjecture from some ad-hoc data analysis, so let’s go back and treat it with some more rigorous mathematical techniques. As we do, we’ll discover some very interesting “threshold theorems” that essentially…
Recently I saw a job description of a Brazilian company, more or less like this:
The SoundCloud API will be dropping support for offset-based pagination on March 2, 2015, in favor of linked partitioning. To page through a…
1 Feb 2015
App users were content with static apps, single-user experiences where content changes only when a user requests a new page
App users were content with static apps, single-user experiences where content changes only when a user requests a new page
Back in January of 2012, Russ Cox posted an excellent blog post detailing how Google Code Search had worked, using a trigram index. By that point, I’d already implemented early versions of my own livegrep source-code search engine, using a different indexing approach that I developed independently, with input from a few friends. This post is my long-overdue writeup of…
Ngaji gurrijin! [Hello Everyone!] In late 2014, our Perth team delivered a mobile language app called Yawuru Ngan-ga for the Yawuru indigenous community from Broome in Western Australia. We open sourced the framework so other indigenous communities can develop similar apps of their own more easily. We were approached by Mabu Yawuru Ngan-ga, the language centre for the Yawuru community,…
31 Jan 2015
Diving deep into raw sockets and IP headers with Go: A technical exploration.
30 Jan 2015
The problem Invoking event handlers in C# has always been a bit of a pain, because an event with no subscribers is usually represented as a null reference. This leads to code like this: It’s important to use the handler local variable, as if instead you access the field twice, it’s possible that the last … Continue reading Clean event…
29 Jan 2015
In this talk, Mikael Rogers discusses io.js including the reduction in Node.js contributions and the difference between Node.js and io.js.
In this talk, Mikael Rogers discusses io.js including the reduction in Node.js contributions and the difference between Node.js and io.js.
Writing good APIs is hard. Extremely hard. You have to think of an incredible amount of things if you want your users to love your API. You have to find the right balance between: Usefulness Usability Backward compatibility Forward compatibility We’ve blogged about this topic before, in our article: How to Design a Good, Regular … Continue reading You Will…
When you work at Thoughtworks, it is tough to miss references to Jan Swastha Sahyog(JSS), a voluntary, non-profit, registered society providing low cost preventive and curative health services to the people from tribal and rural areas of Bilaspur, Chhattisgarh, part of central India. Thoughtworks is helping them using Bahmni, an open source hospital system for healthcare providers in low-resource settings.
28 Jan 2015
This Ember.js encryption tutorial walks through how to implement encryption and three way data binding for real-time messaging in an Ember.js app.
This Ember.js encryption tutorial walks through how to implement encryption and three way data binding for real-time messaging in an Ember.js app.
A guide to sort code checkers walking you through what a sort code checker is and how it works before looking at how effective they are.
How often have we been through a pairing experience that we felt was really productive and rewarding, from a professional and a personal point of view? We can also think of many other times we were left wondering why that specific pairing situation wasn't as pleasant and effective as it could be. The benefits of pair programming for software project…
27 Jan 2015
An introduction to Runtime.JS from Jacob Groundwater, including what it is, when you'd use it, and a live demonstration.
An introduction to Runtime.JS from Jacob Groundwater, including what it is, when you'd use it, and a live demonstration.
People new to leadership quickly find themselves having to deal with all sorts of questions. As a new leader, how better to show that you are the right person for the job than by demonstrating your ability to solve any problem that comes your way? As you solve one problem, however, another is quickly there ready to take its place.…
26 Jan 2015
Last time we left off with the tantalizing question: how do you do a quantum “AND” operation on two qubits? In this post we’ll see why the tensor product is the natural mathematical way to represent the joint state of multiple qubits. Then we’ll define some basic quantum gates, and present the definition of a quantum circuit. Working with Multiple…
In previous blog posts, we discussed how SoundCloud has been moving towards a microservice architecture. Soon we had hundreds of services, with many thousand instances running and changing at the same time. With our existing monitoring set-up, mostly based on StatsD and Graphite, we ran into a number of serious limitations. What we really needed was a system with the…
25 Jan 2015
In my last two posts, “What is special about Nim?” and “What makes Nim practical”, I forgot the important conclusion - why I personally have decided for Nim in favor of Rust, C++, Python and Haskell: Nim is not the fastest language, it’s not the easiest language to write in and it surely has some flaws that should be fixed.…
In my previous post, I doubled down on my claim that Go’s error handling strategy is, on balance, the best. In this post, I wanted to take this a bit further, and prove that multiple returns and error values are the best, When I say best, I obviously mean, of the set of choices available […]
Streamline your software delivery process with automation and collaboration.
24 Jan 2015
In a world where microservices continue to grow, offering better agility for iterating quickly, many of the tools you use in building applications must adapt. Microservices bring together challenges in a variety of ways for the services you consume – logging and monitoring tools now need a broader perspective than that of a single app, […] The post Expanding the…
Does it make sense for me to run ads on my blog? I've been thinking about this lately, since Carbon Ads contacted me about putting an ad up. What are the pros and cons? This isn't a rhetorical question. I'm genuinely interested in what you think. Pros Money Hey, who couldn't use more money? And it's basically free money. Well,…
Sketchnotes are a great way to document a talk or event. They allow you to doodle and get a little bit creative with your content recording.
23 Jan 2015
Earlier this month I did a talk at the University of North Carolina at Chapel Hill about lessons learned from the early days of Google. The video is now online and watchable, or you can watch it on YouTube: We did the talk in a pretty large room, and the camera at the back of […]