@jondot

CTO at Como. Big data. Fullstacker. Hacker. Open sourcer.

Parsing Binary Data with Node.js

I'll start by highlighting some of the pillars of binary data, hopefully in a breeze. If you find yourself very attracted to these topics, I recommend this book (you can skip the HLA/assembly parts). Also note that it's a bit oldschool (I read that more than 10 years ago but it left quite an impression) so there may be newer and better resources to learn from.

Words

A "computer" word, is a sort of unit of grouping of bits. For example, a word can be 8, 16, 32, 64 etc, bits wide. Typically a word's width is coupled to the CPU's architecture's width (i.e. 64bit CPU) but in our case, we'll treat the meaning of word as "a set of N fixed-size bits" where N is the number of bits.

Endianness

The term "endian" comes from "end". When you look at a sequence of bytes and want to convert a group of bytes to a plain old number, it stands to denote which end of the number is first; in the case of big endian the first part is the bigger one. In the case of little endian the first part is the little one.

For example, there are two ways to look at the couple of bytes appearing in a binary file: 01 23.

Read more →

Asset Pipeline Internals

Almost a year ago, I wrote about build management for Javascript projects.

In a hindsight a year proved to be a ton of time on the client-side.

Most notably Grunt (which I only mentioned briefly) took off like a rocket, and in the same manner Yeoman - which I almost instantly considered a swiss army knife for doing my client-side only projects.

Yeoman though, which relies on Grunt, is going through some fundamental changes and looks like it is being re-arranged and re-planned for a while now.

For what it's worth I do support the new Yeoman changes, but instead of waiting for it to crystalize I tought it is time to re-evaluate what's out there today and see if Yeoman can be replaced altogather (the answer is 'Yes', keep reading :).

Read more →

ZeroMQ and Ruby a Practical Example

For a specific high-performance workloads, I wanted to include a new and highly optimized endpoint onto Roundtrip.

If you don't know what Roundtrip is yet, feel free to quickly check out the previous Roundtrip post and come back once you got the idea of what it does.

I had to select both a wire protocol and an actual transport that will be very efficient. To gain an even higher margin over HTTP, I knew I wanted it to be at least binary and not very chatty.

A good option for this would be Thrift, for example. However I wanted to go as low as I could, because I didn't really need anything more than the bare simplest RPC mechanism.

However, going with straight up TCP wouldn't gain me much because I typically hold development ease and maintainability as an additional value. There was only one thing I felt offering an awesome development model and being as close to (or even better than, on some occasions) TCP...

Read more →

Tracking Your Business

You've built (or are maintaining) a product which has many services that span over different machines at the backend. These services are all orchestrating together to implement one or many more business processes.

How are you tracking it?

Read more →