In Part 2 of our series we interview David Joyce. He is an Executive Consultant, Systems Thinker and Lean practitioner who has 15 years of leadership experience, and 20 years of experience in the technology industry. Today, David spends his time working with executives, senior managers, front-line leaders and teams helping them instigate sustainable change by applying methods such as…
18 Feb 2014
The pace with which the development of mobile applications grows is impressive. An interesting challenge is to maintain agile practices in such an environment where resources are always limited. We must rely on the help of simulators, Mac servers, a lot of Apple configurations, and so on. Thoughtworks is a pioneer in using agile methodologies such as process automation and…
17 Feb 2014
Do you profile your code using JProfiler or YourKit? You should, because their licenses are worth every penny when you can find a very hidden and subtle bottleneck deep down in your application. For instance, the following chart shows nicely that there was a significant performance issue in jOOQ related to reflection: I’ll spare you … Continue reading Free Java…
16 Feb 2014
Last time we looked at the elementary formulation of an elliptic curve as the solutions to the equation $$y^2 = x^3 + ax + b$$ where $ a,b$ are such that the discriminant is nonzero: $$-16(4a^3 + 27b^2) \neq 0$$ We have yet to explain why we want our equation in this form, and we will get to that, but…
Mea culpa In my first post I said that I believed the simulator performance was 10x slower than a real PDP-11/40, sadly it looks like that estimate was well off by at least another factor of 10. Yup, 100x slower than the machine I tried to simulate. At least. More accurate profiling After my last […]
14 Feb 2014
This post collects resources and provides a graph to understand how Symfony authentication works behind the scenes, from the initial request to the final authenticated token. It clarifies the relationships between key classes like firewall, authentication provider and authentication listener.
13 Feb 2014
By now, many of us are aware of the wide adoption of continuous delivery within companies that treat software development as a strategic capability that provides competitive advantage. Amazon is on record as making changes to production every 11.6 seconds on average in May of 2011. Facebook releases to production twice a day.
Should your quality assurance processes and tools change if you are building an application for the cloud? The answer is obvious - "it depends." Despite having one of the clearest definitions amongst recent buzzwords, there are many types of clouds and many ways to integrate them with your application or development processes. If you have an experienced team that can…
12 Feb 2014
This is a guest post by my friend and colleague Adam Lelkes. Adam’s interests are in algebra and theoretical computer science. This gem came up because Adam gave a talk on probabilistic computation in which he discussed this technique. Problem: simulate a biased coin using a fair coin. Solution: (in Python) def biasedCoin(binaryDigitStream, fairCoin): for d in binaryDigitStream: if fairCoin()…
Dozens of VC firms reached out to us in 2013, so we sent our pitch deck around the world quite frequently. After a while we started sharing our deck with job applicants as well: We’re such a small startup, and many applicants had doubts about joining us. Access to our deck and our key metrics […]
Flow is an important part of software development. The ability to achieve flow during daily work makes software development a uniquely enjoyable profession. Interruptions in your code/test loop make this state harder to achieve. Whether you are running unit tests locally, launching a local webserver, or deploying to Heroku there's always some waiting and some […] The post Git Push…
11 Feb 2014
Do you sometimes feel the internet is holding you hostage? Don’t you wish the internet would look like it’s holding you hostage? Worry no more! Dear-sir-or-madam is a bookmarklet that makes web pages look like they’re ransom notes. For example, like this: How to use Bookmark this by dragging it to your bookmark bar: ransomify!. Then go to a non-https…
Twice a year, Thoughtworks publishes the “Technology Radar”—our view on the technology trends that are important in the industry right now, and the trends that will be important in the near future.
10 Feb 2014
This post explains how to add support for Instagram to the PHPoAuthUserData library by writing a dedicated extractor class. It illustrates the concepts of loaders, normalizers and mapping to extract user profile data from the Instagram API.
The PHPoAuthUserData library provides a simple interface to extract common user data like name, username, ID from various OAuth providers. It builds on top of PHPoAuthLib.
Finding solutions to systems of polynomial equations is one of the oldest and deepest problems in all of mathematics. This is broadly the domain of algebraic geometry, and mathematicians wield some of the most sophisticated and abstract tools available to attack these problems. The elliptic curve straddles the elementary and advanced mathematical worlds in an interesting way. On one hand,…
9 Feb 2014
How can you unit test private methods? If you google this question, you find several different suggestions: test them indirectly, extract them into their own class and make them public there, or use reflection to test them. All these solutions … Continue reading →
In this article, we discuss the various techniques we adopted to enable the effective transfer of knowledge and ownership of the platform of a train ticket retailer in the UK, which was built and enhanced by Thoughtworks over five years.
8 Feb 2014
This is a guest post by my friend and colleague Adam Lelkes. Adam’s interests are in algebra and theoretical computer science. This gem came up because Adam gave a talk on probabilistic computation in which he discussed this technique. Problem: Simulate a fair coin given only access to a biased coin. Solution: (in Python) def fairCoin(biasedCoin): coin1, coin2 = 0,0…
With all the recent revelations of government spying and backdoors into cryptographic standards, I am starting to disagree with the argument that you should never roll your own cryptography. Of course there are massive pitfalls and very few people actually need home-brewed cryptography, but history has made it clear that blindly accepting the word of the experts is not an…
In the fall of 2000, I took my first engineering class: ECE 352, an entry-level digital design class for first-year computer engineers. It was standing room only, filled with waitlisted students who would find seats later in the semester as people dropped out. We had been warned in orientation that half of us wouldn't survive the year. In class, We…
7 Feb 2014
Think of the times you've planned to leave work and go to a restaurant, pub, or the like with a few of your colleagues. I'll use the metaphor of the after work drinks, since I'm most familiar with that one. What often happens is something like the following: Thirsty worker #1: "I'll send an email to everyone asking who wants…
6 Feb 2014
How to build streaming real-time, live updating data visualizations using WebGL
How to build streaming real-time, live updating data visualizations using WebGL
Here is my confession, internet: I am writing a cat DNS. That is, a DNS server that resolves everything to cats. You want your email? Cat! You want to check the weather? Cat! It’s always cat. Wait why? We were talking at work about DNSes, and it turns out I only hand wavingly know how they work. I also like…
Refactoring is one of the techniques that allows us to be agile and apply an evolutionary approach to our design. A core XP practice and one of TDD's pillars, constant refactoring keeps the evil design upfront at bay and maintain our codebases in a healthy state. One of the few things I think most developers agree on is that refactorings…
5 Feb 2014
Introduction to PubNub Data Storage and Playback. Store real-time data message streams for future retrieval and playback.
Introduction to PubNub Data Storage and Playback. Store real-time data message streams for future retrieval and playback.
4 Feb 2014
In Part 1 of this post, we explained where you might be misled by your A/B testing result, and how to interpret your A/B testing result. In this second part, we’ll give an example to show you how to A/B test step by step. How to apply this in practice? Here I would like to give an example of how…
3 Feb 2014
Having a web or mobile app become hugely popular is one of those “good problems” to have. But success is still its own challenge – making any architecture work at high volume can often create a unique kind of complexity. And as the Internet grows, and apps become more prevalent, its an increasingly common requirement. […] The post Heroku XL:…
In religious worship following ceremonies and rules by the book is known as liturgy. Often, these rules of ritual performance persist over time and culture, even when the original context that created them no longer exists or is misinterpreted. It becomes a cult to the form over the content, a reactionary adherence to the practices even though the foundational values…
1 Feb 2014
Agile Analytics is a combination of sophisticated analytics techniques, lean learning principles, agile delivery methods, and "big data" technologies. In a recent talk I gave at AgileAustralia 2013 on Agile Analytics, I discussed in detail the following seven topics:
31 Jan 2014
Build products that people love, faster: Find the next most important thing with Goal-based Prioritization
30 Jan 2014
I was recently directed to an article on "tiny types" – an approach to static typing which introduces distinct types for the sake of code clarity, rather than to add particular behaviour to each type. As I understand it, they’re like type aliases with no conversions between the various types. (Unlike plain aliases, an object … Continue reading How many…
The Static Showdown is a virtual worldwide hackathon for frontend-engineers. Hacking is more fun together – thus we provide our Berlin office as a central hub during the competition. The competition starts on Saturday, 8th of February, 1am Berlin time. You then have precisely 48 hours to develop your app. Anything that you can run on a static web […]
This is a post about the performance of my avr11 simulator. Specifically about the performance improvements I’ve made since my first post, and the surprises I’ve encountered during the process. Old school profiling Because avr11 runs directly on the Atmega 2560 microcontroller, there is no simple way to measure the performance of various pieces of […]
Because that would be crazy. Crazy is in the next blog post. I’ve had to write a sizeable chunk of (fairly mediocre) Objective-C code recently, and I’ve formed the following opinions: It’s easier if you just get over the thing with the brackets Event listeners are sooper cool Standard Cocoa controls are great if you want them to look exactly…
Last year, well just three weeks ago in the middle of December 2013, in Thoughtworks Ecuador we had a functional afternoon worth remembering. But as fragile as memory is, I will try to focus on the pictures and not so much on the words.
28 Jan 2014
Isn’t A/B testing just “40% is better than 30%”? You have a product and want to encourage more people to complete a specific task. You have 2 ideas, you decide to A/B test them to see which is better. So, you put your users into two groups (A and B) where each group sees a different solution, and then measure…
Thoughtworks has always been passionate about diversity, and we realize that the IT industry is not as equitable as it should be. There are several reasons for this, especially when it comes to gender diversity. Different social factors contribute to this imbalance in each country. When it comes to women enrolling in engineering in India, there is a clear upward…
27 Jan 2014
Here is the story of a bug that I caused, found, and fixed recently. It is not particularly hard or tricky, and it didn’t take long to find and fix. Nevertheless, it did teach me some good lessons. The Bug … Continue reading →
Our SaaS application is built with Java, managed with Gradle and runs on Google App Engine. That makes a surprisingly lean and agile combination. Since we do like to work with the best tools available the folks responsible for the back-end love IntelliJ IDE. So of course we utilize the IntelliJ plugin for Gradle. It’s amazingly simple to […]
26 Jan 2014
Have you ever tried to develop an Java 6 EE application on different application servers? In production we are forced to use WebSphere AS. I like the configuration interface but that’s all. WAS is not usable during development because the deployment cycles are way too long. Because of this we […] The post Why JPAs persistence.xml sucks appeared first on…
25 Jan 2014
This week a group of more than fifty prominent security and cryptography researchers signed a letter protesting the mass surveillance efforts of the NSA, and attempts by NSA to weaken cryptography and privacy protections on the Internet. The full letter can be found here. Most of you have already formed your own opinions on the issue over … Continue reading…
In my previous post I had figured out that I could capture memory accesses in my simulator and send them elsewhere. In version 1 of the design I (ab)used the onboard mini SD card to simulate the entire address space. This was a very 1950’s solution and came with matching performance. Still, it did give […]
24 Jan 2014
18 bits of core memory In Schmidt’s original javascript simulator, and my port to Go, the 128 kilowords (256 kilobytes) of memory connected to the PDP-11 is modeled using an array. This is a very common technique as most simulators execute on machines that have many more resources than the machines they impersonate. However, when I […]
23 Jan 2014
A few awesome readers have posted comments in Computing Homology to the effect of, “Your code is not quite correct!” And they’re right! Despite the almost year since that post’s publication, I haven’t bothered to test it for more complicated simplicial complexes, or even the basic edge cases! When I posted it the mathematics just felt so solid to me…
Introduction It all started with Javascript. In April of 2011 Julius Schmidt wrote a PDP-11 emulator that ran in a browser. I thought that this was one of the most amazing thing I had ever seen. Late last year I ran across the link again in my Pocket backlog and spent a little time poking […]
This post is a rant about a word. A rant about a word that had a clear meaning but has been appropriated for something wholly less meaningful. The word is of course Devops. Over the last few years, as the practice itself has grown in prominence, its description has become diluted beyond the point of recovery. […]
We run a ton of A/B tests at Spotify and we look at a ton of metrics. Defining metrics is a little bit of an art form. Ideally you want to define success metrics before you run a test to avoid cherry picking metrics. You also want to define a metric that has as high signal to noise ratio. And…
Thoughtworkers are passionate about technology. We build it, research it, test it, open source it, write about it, and constantly aim to improve it – for everyone. Our Tech Radar is in its fourth year, and the next edition will be published soon. Sign up here to receive it in your inbox.
21 Jan 2014
This post is intended to be a tutorial on how to access the RealityMining dataset using Python (because who likes Matlab?), and a rant on how annoying the process was to figure out. RealityMining is a dataset of smart-phone data logs from a group of about one hundred MIT students over the course of a year. The data includes communication…
To trouble-shoot software, logging of some kind is essential. But for most systems, it is simply not possible to log everything that happens. Many systems and logging frameworks let you limit the amount of data by giving a logging level (e.g. … Continue reading →
With one exception, the go command takes arguments in the form of packages. You can pass the package name(s) explicitly, eg. go test github.com/hoisie/mustache or implicitly cd $GOPATH/src/github.com/hoisie/mustache go test . By default, if no arguments are provided go test treats the current directory as a package, so in the second example, go test . […]
In crisis situations, whether natural (e.g. earthquakes, floods, tsunamis) or political (e.g. violent conflict, forced movement of populations), children are especially at risk. Children who become separated from their families are the most vulnerable. Family Tracing and Reunification (FTR) is the vital process of returning lost children to the safety and protection of their families. Despite advances in information technology…
20 Jan 2014
Okay, I’m calling it: if you’re using guest blogging as a way to gain links in 2014, you should probably stop. Why? Because over time it’s become a more and more spammy practice, and if you’re doing a lot of guest blogging then you’re hanging out with really bad company. Back in the day, guest […]
I see a lot of problems which look somewhat different at first glance, but all have the same cause: Text is losing “special characters” when I transfer it from one computer to another Decryption ends up with garbage Compressed data can’t be decompressed I can transfer text but not binary data These are all cases … Continue reading Diagnosing issues…
Disclaimer: these aren’t new protipz. I didn’t make them up. They’re actually straight out of the Chromium code style, they’re pretty trivial, and you might already use them. But just in case you’re not a Chromium committer (the outrage), or are fairly new at C++ and want to make your code less suck, here they are. I think they’re neat.…
19 Jan 2014
Techies love hackathons. What could be better than getting together for an evening, or a weekend, with food, friends, maybe a beer, and using one’s magic powers to create a piece of technology that saves the world? I exaggerate. Most people don’t think they’ll save the world in a weekend, but sometimes they act as if they believe they can.…
17 Jan 2014
A professor at Stanford once said, If you really want to impress your friends and confound your enemies, you can invoke tensor products… People run in terror from the $ \otimes$ symbol. He was explaining some aspects of multidimensional Fourier transforms, but this comment is only half in jest; people get confused by tensor products. It’s often for good reason.…
This post explains how to install Dropbox command line client on a Linux server, create a dedicated user and setup it as a service to have automated backups on Dropbox cloud.
Klokan Technologies is pleased to announce the launch of a new version of MapTiler with georeferencing functionality that allows to turn an image without any geographical information into a real map.
Nowadays we talk a lot about Continuous Delivery (CD), and there is a good reason for that. In the same way that developing code driven by tests was a defining change in the past few years, the practice of releasing new versions of a system continually is becoming the next big thing. However, though there are a lot of tools…
An effort to reunite children displaced in the Typhoon with their families Sri Prasanna is a senior developer at Thoughtworks and in this experience report, he shares his unforgettable experience being on the ground deploying RapidFTR and helping little children reunite with their families.
16 Jan 2014
A web developer fascinated by the web since childhood discusses the motivation behind starting a blog - to share thoughts on web development trends and experiments in a personal space.
Web 2.0 has had a massive impact for good on the lives of modern humans. Web 2.0 has also been complicit in ushering in the most advanced, pervasive and Orwellian surveillance state ever witnessed by humanity. You could say that Web 2.0 has morphed into Web 1.984.
15 Jan 2014
Across our 29 offices in six countries, Thoughtworkers are embracing Rails Girls, a global non-profit, volunteer community. Rails Girls gives tools and provides a community for women to build their ideas. The events are driven by volunteers and typically include a day of sketching, prototyping, basic programming and an introduction to the world of technology. Thoughtworks offices in Chicago (USA),…
We encourage Thoughtworkers to go on their personal journeys, follow their passions and learn and contribute to social and economic justice. In this experience report, Pankaj Kanchankar from Pune, reminisces on his recent visit to Dr. Prakash Amte’s Lok Biradari - a community that includes a hospital, an animal orphanage, a school for adivasi children and a vocational and livelihood…
14 Jan 2014
As I begin to write this, I’m in a small cubicle in Philadelphia airport, on my way back from CodeMash – a wonderful conference (yet again) which I feel privileged to have attended. Personal top highlights definitely include Dustin Campbell’s talk on C# 6 (I’m practically dribbling with anticipation – bits please!) and playing Settlers … Continue reading A tale…
13 Jan 2014
Meet the newest member of the PubNub team. No, she's not a programmer, and actually, she isn't even in high school yet. In fact, she's an 8 year old competi
Meet the newest member of the PubNub team. No, she's not a programmer, and actually, she isn't even in high school yet. In fact, she's an 8 year old competi
Many teams that try to implement agile processes report that they often don’t observe the promised results. This may have many causes, but one often overlooked one, is that stories tend to get “inflated” as day-to-day pressures start to mount. I am not speaking about point estimates, but the story scope itself. Trying to do too much in a story…
Imagine you are the CEO of a retailer. The economy is roaring, people are starting to shop more at your higher end shops, increasing margin. Quarter over quarter top line revenue growth is coming in, albeit at a slow, measured growth rate. You are even getting some level of margin growth by implementing some measures to remove excess cost out…
12 Jan 2014
Radim Rehurek has put together an excellent summary of approximate nearest neighbor libraries in Python. This is exciting, because one of the libraries he’s covering, annoy, was built by me. After introducing the problem, he goes through the list of contestants and sticks with five remaining ones. Finally, the benchmarks pits annoy against FLANN. Although FLANN seems to have roughly…
Portuguese version
10 Jan 2014
Editor's note: This is a cross post from Blake Gentry, an engineer at Heroku. This is a post about the recently announced Heroku Platform API JSON Schema and how I used that schema to write an auto-generated Go client for the API. Heroku's API team has spent a large part of the past year designing […] The post Auto-generating a…
In this blog I detail visual design workflow deltas from Waterfall to Landslide to Agile and then to Lean. Let's start with the Waterfall process A seemingly simple process? If you’ve designed in a waterfall workflow, you know that it actually looks more like this:
India, like all countries, is increasingly facing a situation where legal frameworks that made sense before the explosive growth of the internet are proving incomplete or in some cases being re-purposed as blunt instruments of state power. Reforms are urgently needed, and the pressure for reform begins with awareness. This is the first in a series of posts seeking to…
9 Jan 2014
Yesterday our frontend engineering team gave a talk at the AngularJS Meetup Berlin. The talk focused on performance measurement and tuning for huge angular screens and gave some insights into our workflow and toolchain. You can find the slides here: Slides Slides (PDF) Example Code
Today we’re making an important piece of Platform API tooling available: A machine-readable JSON schema that describes what resources are available via the API, what their URLs are, how they are represented and what operations they support. The schema opens up many interesting use cases, both for users and for us at Heroku working on […] The post JSON Schema…
Dear David, I'm afraid my off the cuff response the other day wasn't too well thought out; when you talked about taking calc III and linear algebra, and getting resistance from one of your friends because "wolfram alpha can do all of that now," my first reaction was horror-- which is why I replied that while I've often regretted not…
Aaron Swartz, a brilliant 26-year-old software developer at Thoughtworks, renowned hacker and social justice activist, committed suicide on January 11, 2013.
7 Jan 2014
This d3js tutorial walks you through how to use d3js and PubNub to build real-time, live updating data visualization graphs.
This d3js tutorial walks you through how to use d3js and PubNub to build real-time, live updating data visualization graphs.
Recently I struggled upon the same problem, this guy described. Our Oracle database instance contains multiple schematics with almost the same structure. Every developer has it’s own schema for unit and integration tests. On application startup the Hibernate schema validator calls the DatabaseMetaData.getTables() for every linked entity. The method returns the first […] The post Hibernate uses wrong schema during…
The leadership of Thoughtworks India believes that expressing one’s sexual identity should not be a crime. It is our belief that the current law in India, which criminalises sexual activities that go “against the order of nature,” should not be enforced to criminalise the LGBT community for engaging in consensual sexual activities in private. Furthermore, we strongly believe that the…
Datensparsamkeit is a German word that's difficult to translate properly into English. It's an attitude to how we capture and store data, saying that we should only handle data that we really need.
6 Jan 2014
Por um tempo, nós (Paulo Caroli e TC Caetano) catalogamos diversas ideias e atividades para retrospectivas. Nós criamos uma agenda com 7 passos e atividades para ajudar a estruturar sua próxima retrospectiva. Estrutura da agenda: 1. Contextualização Estabelecer o contexto ao início de qualquer reunião é o primeiro passo para certificar-se de que a reunião será eficaz. Os participantes têm…
Hello Friends welcome to the start of a very interesting series - to interview luminaries in the testing space to objectively evaluate the software testing industry, both where it stands now and where we are headed.
5 Jan 2014
This post talks about how I connected my Raspberry Pi to a WYSE 60 terminal. Voltages The terminal speaks RS232 level, +/- 12v, but the Pi speaks 3.3v TTL levels so some sort of converter is needed to adapt the signalling levels. A logic level converter won’t work as RS232 signalling needs negative voltages as […]
For a while we (Paulo Caroli and TC Caetano) have been cataloguing many ideas and activities for retrospectives. We’ve created a 7-step agenda with steps and activities to help you to structure your next retrospective.
4 Jan 2014
Everything you render in a browser, whether it’s a blog post or a tweet or a video, has a performance cost. At the very least, you will be asking the browser to render a handful of tags and text elements that make up your user interface. That structure, a subtree in the browser’s DOM, can be quite complicated and memory…
2 Jan 2014
In tackling machine learning (and computer science in general) we face some deep philosophical questions. Questions like, “What does it mean to learn?” and, “Can a computer learn?” and, “How do you define simplicity?” and, “Why does Occam’s Razor work? (Why do simple hypotheses do well at modelling reality?)” In a very deep sense, learning theorists take these philosophical questions…
Here's the graph of a toy benchmark1 of page-aligned vs. mis-aligned accesses; it shows a ratio of performance between the two at different working set sizes. If this benchmark seems contrived, it actually comes from a real world example of the disastrous performance implications of using nice power of 2 alignment, or page alignment in an actual system2. Except for…
Gurpreet is the Tech Lead for the Humanitarian Software Program (HSP) at Thoughtworks. Read his account on how Thoughtworks, as part of the Organizing Team, helped drive the All Women Hackathon at the Grace Hopper Women in Technology Conference for the second consecutive year, successfully. In this article, he talks about the preparation that went into making the event a…
There is no doubt “Big Data” has taken the tech world by storm. I have spent much of 2013 talking about analytics and data science with people all around the US, going to conferences like Strata, and immersing myself in this world for the last 12 months. Over the course of this journey, I have started to notice some patterns…
1 Jan 2014
One common reaction to my post on writing debuggable code was: you don’t need logging, just use a debugger. While there are cases where a debugger is the best option, there are many reasons why having proper logging in place … Continue reading →