Since the time I switched from web development and ecommerce as my main field of work to infrastructure development and cloud computing at Twilio , I haven’t been blogging much. This is not because I don’t have interesting topics to talk about , but rather the quantity and complexity of things I’m dealing with is overwhelming and takes most of my time. I recently gave and internal talk on…
I’ve been working both on frontend and server-side at Twilio . This has led to form my opinion that to make HTTP scale better , one shouldn’t use it to serve HTML at all. Rather, only serve data using HTTP and make it pretty on the client. In addition to offloading most of data processing to the client and making server lighter and less loaded , this decoupling achieves two important…
Interacting with ZeroMQ from the browser is the talk me and my co-worker Jeff Lindsay gave at ZeroMQ conference in Portland, OR . We’ve missed our flight the night before and I started writing this post while we had been sitting at the gate, waiting for unclaimed seats on the next available flight. Fixing the world “World is broken” is the reason ZeroMQ exists, it is there…
Since the time I’ve started at Twilio , I’ve been tasked with improving a web user interface of one of the internal services.The service consists of a REST API that is used by the web UI and a number of other clients. To better separate concerns, I’ve decided to build the UI as an HTML5 application communicating directly to the REST API and since I wanted to develop locally,…
This blog post is about my understanding of the versioning aspect of true RESTful APIs, or as I’m going to refer to them further, Hypermedia APIs , and how link context, and rel attribute in particular, lets you get away without versioning your API while keeping clients from breaking. The rest of this post is going to assume that you are familiar with Richardson Maturity Model and modern MVC…
Working at OpenSky has been a rewarding and exciting experience, I’ve met developers from around the world, attended conferences (even got to speak at one), helped build open source software and have seen others consider my contributions valuable. However, the following two weeks are gonna be my last two weeks at OpenSky, after which I’m moving to San Francisco to join Twilio . This…
Boy, it’s been a while since my last post. I haven’t been blogging partially because I had nothing to say and partially because I had no time. This post will hopefully break the silence and at the same time be useful to my fellow PHP developers out there. I’ve been talking about clean code and testability for quite some time now. It is simply impossible to cover all the…
This post is mainly a reminder to my future self in case I need to do something like this again. Using bleeding edge technologies on Windows has always been a painful process. Mainly because not many LAMP developers use windows (its just not in the acronym), which leads to poor support of the OS and lack of learning material. After playing with NodeJS and watching Ryan’s presentation, I…
I personally feel that conventions should be best practices and not inevitable parts of frameworks. Conventions are good, but they kill testability. So while they can save you some time you would have had to spend on configuration otherwise, they also limit the granularity of your interfaces and break testability. My recent example of not testable controllers and how it could have been fixed was…
As some of you might know, the Symfony2 framework consists of two main ingredients: Components Bundles The logical separation should be the following: The Symfony Components are standalone and reusable PHP classes. With no pre-requisite, except for PHP, you can install them today, and start using them right away. Symfony Components Web Site A Bundle is a structured set of files (PHP files,…
During the preparation for my recent talk , I had to refresh my knowledge of the theoretical side of Dependency Injection, since I was using it for a while, but found myself not knowing some of the terminology. I found “Dependency Injection” article on Wikipedia.org to very fulfilling. One thing that caught my attention specifically was the types of Dependency Injection, and Wikipedia…
Having a rich background in different MVC frameworks , one thing that was always unclear was how to test controllers. I think the main reason it wasn’t obvious is because controllers had always been sort of a black magic element in frameworks. There were too many conventions on where on the file system controller should be located, what dependencies it should have knowledge of and those…
Last week I started playing with NodeJS NodeJS is an evented IO for V8 JavaScript . It uses asynchronous processing for all operations. If you want to open file, you pass in the callback function as argument to file open function, which then gets executed when the file is opened and available. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // we will use sys.log for logging var sys = require ( 'sys' ); // send…