Apr 10, 2014

Heartbleed - What it is and why you should care

By now, most of you will probably have heard of Heartbleed, a massive security flaw that was disclosed 2 days ago in the popular OpenSSL library that, for better or worse, is widely used on the internet. Although a little late, here's a basic overview of this vulnerability and how you can protect yourself from it.

What is OpenSSL

OpenSSL is an open source implementation of the TLS protocol, a protocol designed to allow encrypted communication over the Internet. A protocol is just a set of rules that both ends have to follow in order to have a secure communication. An implementation is the actual computer program that acts according to the definition of the protocol.

Note that TLS is not the only protocol that allows encrypted communication, and OpenSSL is not the only implementation of TLS. But the fact remains that TLS is the most used protocol, and OpenSSL its most commonly used implementation.

TLS is extensively used on the World Wide Web. It's used in the increasingly common HTTPS protocol that is used by websites to provide encryption, like your bank account's webpage, or any online shop that ask you for a credit card number. If you've ever noticed a closed lock icon before inputting sensitive data, (or https:// instead of http:// in the URL), you're surfing the web using TLS.

On April 7th, a major vulnerability was announced in OpenSSL. Since this is cryptography we're talking about, every bug is potentially dangerous, but this one was particularly delicate. It allowed attackers to have access to the computer's memory, and read data they were not ever supposed to read. Data like passwords, email addresses, credit card numbers, and other valuable sensitive info.

How can I protect myself

As a web user, the first thing you need to do is to determine which version of OpenSSL you're using (if any). For instance, I think that by default Windows will not use OpenSSL. The simplest way to determine it is to run this on the command line:

$ openssl version
OpenSSL 0.9.8y 5 Feb 2013

(If you get an error, it probably means you don't use openssl in your machine)

Once you've determined which version you're running, check if it's affected by the bug or not. According to the Security Advisory published by openssl concerning this bug, here are the affected versions:

  • OpenSSL 1.0.2-beta

  • OpenSSL 1.0.1 - OpenSSL 1.0.1f (inclusive, not including OpenSSL 1.0.1g)

  • OpenSSL 1.0.0 (and 1.0.0 branch releases) is not vulnerable

  • OpenSSL 0.9.8 (and 0.9.8 branch releases) is not vulnerable

If you're using a vulnerable version, you should either update to 1.0.1g or apply whatever security patch your package manager has published. Another way would be to compile yourself the 1.0.1g version with the flag -DOPENSSL_NO_HEARTBEATS enabled. (only do manual compilation if you're positive you know what you're doing).

In general, applying updates, particularly security updates, as soon as your package manager tells you to can only be a good idea for you. Stop postponing updating your system!

That's it? I should just apply an update?

Unfortunately that was the easy part. The problem doesn't only come from your computer, but also all the servers that are running openssl and where you may have left any sensitive data in the past. So first things first:

Change all your passwords on every service you use.

I know it's a pain in the ass. I wish there was another way. But heartbleed was such a serious matter that you have to consider that all your passwords are currently compromised.

Another component that you should consider as compromised are session cookies, so explicitely log out/log in to each of the services you use so that old cookies are disabled.

Finally, some of you might be using private keys to connect via ssh to remote locations. These "might" be compromised to. I write "might" in quotes because I just read an article that claims that private keys aren't leaked. I'm not a security expert, and even though I understand the point the article is making, I don't think I understand enough about security to have an opinion. In doubt, I changed all my private keys, and I suggest you do the same.


That's it. Let me know if I can help out in any way, and please help spreading the word. The worst part about this bug is that attacks are virtually impossible to detect, so it's tough to know where this vulnerability has been exploited or not. Heartbleed is very real, very dangerous but at the same time the reaction to this vulnerability has been nothing short of spectacular. Since monday armies of sysadmins, programmers, journalists and users alike are working restlessly to fix this security hole. Heartbleed is not the first security bug of that magnitude we ever found, neither will it be the last, but at least it taught us something about the power of marketing when it comes to disclosing these vulnerabilities.

Extra links

Sep 25, 2013

First look at Python enums (part 1)

The major novelty in the upcoming Python 3.4 is the addition of an Enum type. If you've ever written code in C, C#, C++ or Java, you've already encountered enumerations and know what they are. If not, here's how Wikipedia defines them:

[A]n enumerated type (also called enumeration or enum […]) is a data type consisting of a set of named values called elements, members or enumerators of the type. The enumerator names are usually identifiers that behave as constants in the language. A variable that has been declared as having an enumerated type can be assigned any of the enumerators as a value.

It'll all make more sense once we start writing some code, but first there's some preliminary work to do.

Aug 7, 2013

Make Emacs load a random theme at startup

In this small snippet of Emacs Lisp code, I define a function that automatically picks a theme in the theme load-path and loads it. It worked on my Emacs 24 and hopefullly it will help someone somewhere.

Aug 3, 2013

I wrote my first Tempest test

How to write a Tempest test

Tempest is the functional testing framework used in OpenStack. I'm not a testing expert, but even I know that it's good practice when implementing a new feature, to accompany it with functional tests. If anything, it brings a guarantee, to you and to your customer, that any future evolution of the platform will not introduce any regression or loss of functionality.
This document is a recollection of the issues I have run into when writing my first Tempest test. I write it as a reminder for the future, and publish it with the hopes it may help someone. If you're already familiar with Tempest you may skip the first parts and head immediately to the last section, where I exposes undocumented tricks I had to resort to.

Jul 14, 2013

Writing a closure in Python

Writing a closure is a technique coming from the Functional Programming world which was originally made famous by Scheme, the first mainstream lexically scoped programming language, and can still be found in modern programming languages like JavaScript or Lua (where the use of closures has become idiomatic). However, it's not easy to do in Python, where unintuitive and somewhat limiting scoping rules prevent the programmer to apply this technique simply. In this article, I want to explore this issue and suggest a few solutions to bypass the problem. I assume prior familiarity with programming in general and Python in particular from my readers.

Jun 22, 2013

First steps with Hy

Hy, write Python in Lisp

Hy is a dialect of Lisp that compiles immediately into a Python Abstract Syntax Tree. This allows the developer to take advantage of the Lisp (lack of) syntax while putting all the powerful batteries included in Python at her disposal.

I first got interested in Lisp when I started working my way through SICP. Among the many wonderful thing this book introduced me to, was the language used throughout, Scheme. Scheme is amazing, but being minimal by definition, it can get pretty tedious to get any non-trivial work done. On the other hand, I'm pretty familiar with Python, its libraries and its native types. Having the ability to call these directly from a Lisp code has immediately caught my attention.

In this article, I want to detail the first steps I do in Hy. We will work through a simple example, yet adding some (minor) complexity that will show us how to leverage the awesomeness of Hy. I will assume prior programming knowledge from my readers, as well as some familiarity with the Lisp parens-and-prefix notation (If you don't, Wikipedia has a good article on it). Obviously, I'm also assuming prior familiarity with Python.

Mar 9, 2013

Compiling Cyberduck on Mac OS X Mountain Lion

What's Cyberduck

Cyberduck is a GUI file browser that can access files remotely over several protocols (FTP, SFTP, …) and packs support for popular Cloud storage providers like Amazon S3, Windows Azure or Google Drive. It's an open source product, running on both Mac OS X and Windows.

Being open source, the source code is available. However compiling it on my Macbook Air (running Mountain Lion) was not easy. In this article I'll expose the steps needed to do it. I hope it'll help someone someday…

Mar 4, 2013

A primer on higher order functions


Higher Order Functions (HOF) is an idea taken from the realms of functional programming and increasingly included in modern programming languages. In this article I want to present what the fuss is about, what problem they're really solving and how can you use them in your code, by analyzing a small classical example. Only the final paragraph, where I present Python's builtin HOF, is language-specific. The core of the article is language-agnostic and you can follow it as long as your language treats functions as first class citizens (meaning that they can be passed as arguments to other functions, return values or assignment operations).

Dec 5, 2012

Profiling your programs with cProfile

Premature optimization is the root of all evil.

Behind this quote (wrongfully attributed to Knuth), hides a simple truth: You have to know what you're optimizing and why. Every sane optimization session should start with a thorough profiling of the runtime of a program. Profiling allows the detection of bottlenecks in the code, guaranteeing that the effort bears fruit.

This article is a short presentation of cProfile the Python built-in profiler. I will run a (slightly complicated) code example inside the profiler, detect a single chokepoint, optimize it and observe the end result.

Nov 24, 2012

New Exercise: Walk the Grid


Imagine a small mouse moving on an infinite grid. Each step, the mouse moves to an adjacent cell, with the following probabilities:

  • 20% chance that it goes North
  • 20% chance that it goes South
  • 30% chance that it goes East
  • 30% chance that it goes West
What is the probability that it will walk over any cell more than once after 13 moves?

Aug 30, 2012

Number of divisors of Triangle numbers

In this article I will present my solution to a simple programming exercise in what can hopefully be describe as literate programming.The original problem is taken from Project Euler, problem #12.

Jul 4, 2012

TIL 17327887002563635621 is prime

Calculating the primality of large numbers was at the core of yesterday's coding competition at Europython. For the curious, you're encouraged to check out the details of the competition, the ... "Pyddle". Computing primality is not a simple task, especially when dealing with 20-digit numbers like we did yesterday. In this article, I present my take on the matter, a naively optimistic idea that the following should be enough to deal with the majority of the times I'll encounter prime numbers. If anybody has tips to give me, I'd love to hear them!

Jul 3, 2012

Becoming a better programmer

I'm in Florence right now, attending this year's edition of Europython. I've been here for almost 30 hours and have already seen several talks, including a Q&A session with Guido Van Rossum, our Benevolent Dictator for Life. The most interesting talk so far was given by Harald Armin Massa, a funny German guy known around these parts for animating and moderating several events around the conference. The talk was called "Becomming a better programmer", and it was advertised as follow:

"So you have selected the best possible programming language; you learned about object oriented design, functional paradigms, test driven development and the Structure and interpretation of computer programs.

What else can you do? Harald did research and experimented outside computer sciences. What methods and substances are available to tune your brain for programming? This talk will describe personal experiences with various motivational, self discipline, learning and information management techniques; substances and exercises to tune your brains operating system. There will be expeditions into results from brain research. A critical judgement, pointing out snake oil and stuff that worked."

I should start by mentioning that a surprisingly high amount of people wanted to attend this talk. As the conference room was getting slowly but surely overcrowded, the organizers stepped in, scheduling another slot tomorrow afternoon for a rerun. And then they proceeded to kick out half of the audience, freeing enough space for the event to continue. Lucky for me, I made the cut and managed to stay inside.

Jun 16, 2012

Using HTML tables for layout... Seriously?

I am not an web designer. As a matter of facts, there are a lot of things I believe are fundamentally wrong about the WWW and recent standardization efforts seem to be taking it further from what I wished it'd be. Markup languages on the other hand I find interesting and I often find myself arguing against the use of <table> tags
for layout.

A recent argument got me looking at the specifications of the HTML language. The problem seems so widespread (still!) that surely the founding bodies must've mentioned it somewhere?

Jun 15, 2012

Manage your bash prompt

In this post I want to show a simple yet clever trick to manage the prompt for your interactive shell sessions. For obvious (and unfortunate) popularity reasons, the code example I give is in bash; however it should not be very difficult to translate them to other shells. My goal is more to open your eyes to this helpful trick, rather than give you some guru incantation that will make your life (well your computing) better. This post is targeted at people who spend the better half of their day working on a Unix command line interpreter and want to improve their overall experience.

May 26, 2012

Unix and its philosophy

Unix enthusiasts like me enjoy singing the praise of the "Unix philosophy", unwritten policies guiding development of computing, focusing on the collaboration of simple tools over the advent of big monolithic machines that do too much. In a recent blog post, John D. Cook criticizes this policy for being too uptopic, claiming that Unix itself (at least in its modern incarnations) does not abide by it. He makes the point that users have come to expect some complexity from their tools, and it's an acceptable alternative to the ideal Ted Ziuba describes as Taco Bell programming. In this article I will explore the concordance of Unix with its philosophy, as well as the reasons that might have led it to diverge (superficially) from its founding principles.

May 19, 2012

A short, vastly incomplete history of Unix

In this blog post, I try to answer the usual questions about the relationship between Unix and Linux by exposing a short history of how the operating system came to be. I hope that it'll give the reader better insight into the Unix world, and hopefully will entice her to try other unices than the one she's comfortable using.

First a disclaimer:

What I say here comes from countless hours of reading up on the subject. However I am by no means an expert on the matter so some of the things I expose here are approximate at best, if not plain wrong (you cannot trust everything you read online, can you?). I hope that the complexity of the matter will excuse the various inaccuracies in my text.

May 2, 2012

First builds of new Crunchbang Waldorf are out

I don't usually do announcement-type posts on this blog, but this project is actually really cool. Philip Newboroug, a.k.a. Corenominal, has announced yesterday the first builds of Waldorf, the next version of Crunchbang Linux. This build is the first of many release candidates (RC20120430), testing snapshots of what will become the stable release of the distribution. In this article, I want to give a small introduction to the distribution, the reasons why I have been using it as my primary OS, as well as a presentation of the upcoming novelties in the new version.

Mar 21, 2012

Tabs vs Spaces, it does matter!

Tabs vs Spaces is a small battle in the greater Indentation War. This is a silly
debate, one of the little annoyances a programmer comes across once in a
while. We each have a preference and none of us understands how anyone can think
differently. It sounds meaningless and petty, but as soon as you start working
with other people's files, indentation gets all messed up, and version control
logs go insane, this stuff matters.

Jan 27, 2012

The things I want to learn

2011 was the year I ...

  • Became a Vim "super-user". Now I know what fast means.
  • Understood what Unix is and why a command line shell is better.
  • Learned how cool git is, and why I should care. 
  • Found out Unix man pages presented C functions to the user.   
  • Learned Python. It showed me that OOP can be elegant, and why using a generator is better.

Now in 2012 I want to ...

  • Make my own Lisp. In Lisp.
  • Show that Emacs is more than a text editor.
  • Write bash code better than I do C.
  • Know enough about Entropy to care about Portage.
  • Learn, re-learn all the math I once knew and now forgot.

Jan 7, 2012

C++ Testable Design (part 2)

Note: This is Saeid's answer to his own first post. The original discussion happened on LebGeeks. Here's a link to the original thread, in case you want to follow the whole discussion.

My last post tried to address the issue of storing pointers to objects in other objects without having to worry about what gets destroyed first, and who's going to be destroying it.

Dec 30, 2011

Writing solid shell scripts

Shell scripting is an extremely powerful force sometimes overlooked by
programmers. I think this is due to the simplistic procedural approach it
presents. Programmers tend to place their trust in complex interpreters
implementing complex paradigms like OOP or functional programming. The success
of Python and Perl for example, in the system administration circles, is
undeniable. Yet you'll often hear old Unix folks chuckle in their beards when
they see the young (well intended) sysadmin defining lengthy classes or
importing heavy modules.

Dec 19, 2011

Are we through with the CPU?

A while ago, I complained that no real advance in CPU frequency has been made in 10 years. Adding more cores (virtual ones, no less!) will not drastically improve computing performance on the machine. It will only allow parallel computing (which if used correctly might improve overall performance but won't change the order of magnitude of computing speed).

Dec 15, 2011

C++ Testable Design

This article is the first of this blog to be written by a guest author.
Thank you very much Saeid Wazzan (saeidw) for allowing me to publish this.

This is a long post, you might want to grab a cup of coffee before reading.

Recently I've been exposed to Miško Hevery's blog and his Guide to Writing Testable Code.

Specifically, the following guideline: Do not create collaborators in your constructor, but pass them in.
This is meant to make it easy to pass in fake objects to test your class. It's just basic dependency injection, and it helps make code reusable.

Dec 14, 2011

Exceptions, Python and my favorite language

Classic interview question: What would you change in your favorite programming language?

I read this somewhere. Probably on Hacker News. Here's an attempt of an answer. Try to answer that question yourself. It's actually pretty tricky to find weaknesses in what we hold true. Here's mine.

Dec 12, 2011

New Agros

AGROS 0.4 is out! The version is the most "mature" one so far. A lot of polishing has been done, and a certain coherence is added the to software.

This version presents some new features, the most exciting of with is:

AGROS has no 3rd party dependencies anymore!

Until now, AGROS used a library called GLib for parsing INI files. The main change in v0.4 is the move to a library called 'iniparser'. It's so small I had no problem at all embedding it with my code.

Oct 1, 2011


New version! AGROS 0.3.2. Not a major improvement over the old one. It did gain a couple new features, and is becoming more and more stable as I catch more bugs and memory leaks. Taken from the CHANGELOG I maintain, here are the big new changes:

Sep 30, 2011

Source Control strategies

We all have our favorite source control client. Whether it's SVN, git, Mercurial, you name it. This thread is not about any specific client. What I want to discuss is the strategies and methodologies you use when working with source control.

Whether it's distributed or centralized, linear or parallel, or any other kind of features, source control inevitably comes down to two features: Branching and Labeling.

Labels are pretty straight forward. They are read only representation of your repo at one given state. Commonly, it's used for version labeling (like "v1.0.3"). It's the branching that interests me, and that I will explore in this post.

Jul 31, 2011

Crunchbang 10 Statler

This is my review of Crunchbang 10 Slater. Before I get started, I want to specify that I have been using CrunchBang (CB, often referred to as '#!') for over 6 months now as my primary and only OS. Prior to this, my whole Linux experience was tightly linked to Ubuntu. I discovered Linux with Ubuntu (Feisty Fawn at the time) and had used it exclusively until earlier this year. The distro is installed on my HP laptop running on an Intel i3 processor. I am using the 64-bit version, so bear in mind that the 32-bit one might feel different. Finally, Crunchbang is presented in two versions, one based on the OpenBox window manager, another one based on Xfce4.6. Very few people will actually use the Xfce version, as the use of OpenBox is generally the first motivation behind the adoption of this distro. Accordingly my review will talk only about the OpenBox version. With all this said, we can now begin the proper review of the distro.

May 17, 2011

Apache prefork default commands

I am working on a small website, implementing a blog for a friend. I got a shared host, uploaded a Wordpress theme, installed Apache (with apt-get, what else?). Voila.

As I'm playing with my new super cool Wordpress admin panel, I realize that each time I'm connected, the server becomes super slow. Out of memory. Now I figure either someone caught my website on 4chan and I'm the target of a new random meme, or more likely, I'm the only user connected and there's something wrong with the system.

Mar 20, 2011

Introduction to Unix processes

(Note from the author)This is a short tutorial I wrote as part of my work on AGROS, a limited Unix shell. Far from being complete, the following text should be a good introduction to system programming in Unix. The text is given as is, and can be found in the AGROS wiki, at this address.

The main idea behind coding a shell is understanding how processes are managed in Linux and Unix in general. All you want to be doing is starting a new process, executing what it reads from the command line. This page is intended to be a small tutorial aimed at programmers with little-to-no experience with Linux programming. The goal being to help as much people as possible participating in the project.

Feb 12, 2011

Who funds Open Source?

Today I'm going to take the time to answer one of the most common questions about Open Source. How do you make money? I'll try to be as factual as possible. Some infos I have, some other can be sought further on Google or other sources. Some numbers in particular am having troubles finding again, although I can assure they come from publicly available sources (if anyone could show me the financial results of IBM in 2008, that'd be cool :P). Before I start I'm going to make something clear from the beginning. This is not about Open Source being better than the proprietary model. This is not about Linux being better than Windows. This is not about How evil Microsoft is.. I don't want this turning into a trollfest so please help me out.

Feb 11, 2011

Why I like the command line

This post will be mainly about the command line. Unlike some mainstream Operating Systems, Unix still uses heavily the command line as a primary way of interacting with the computer. Viewed from a distance, it seems weird that we'd still use it. After all we're in 2011, we have these cool desktop with 3D effects, transparency and high definition. Why would you want to use your computer through text-based commands? I'll tell you why: Because the command line is the most powerful tool ever invented in human-computer interaction, and will likely be forever. In this post, I thought I would present some of the things the command line is capable of doing that have proven to be a hassle with your standard point-and-click interface.

Jan 20, 2011

The Unix shell: So much more than Bash

Regardless of your skill level, if you're a UNIX user, you definitely came across the all-mighty "command line". If you're a power user, you probably do all your work from inside the "shell". And if you come from Linux, you are probably using a shell called Bash.

Most of us know that Bash is not the only shell around, but we often won't bother trying anything else. Why would we? After all, it's simply a command line utility. What could the difference be?

I understand, I used to ask myself the same questions. Until I was forced to use Ksh at work. After seeing this, I got interested in different Unix shells, and for the past couple of months I have been trying different shells. (Until earlier this year I started developing my own Unix shell, but that's a different story ...)

In this post, I will try to introduce the reader to all the different shells I have seen. But first, time for a history lesson.

Nov 25, 2010

Why use CMS and web frameworks in your web development

Young developers often feel repulsed by the idea of using a CMS. I remember when I started. I felt it was a "cheap", "easy" solution that was way too "limited". After all, I had spent too much time learning those complicated programming languages, I was not going to build websites simply by clicking on simple buttons. I am here to tell you, and those young developers specifically, that they're being foolish, wrong and missing out on great opportunities.

Mar 3, 2010

Atrackin, an Augmented Reality project

Remember how a while ago I wrote an article on Augmented Reality ? The reason why I did this was mainly because I was working on my Final Year Project at school, a project which dealt with AR. We developed a program called Attrackin, were the user could interact on a screen with a virtual ball. Here's a demo video of the project.

The project was coded in C/C++ using three open source libraries: OpenFrameworks, ARToolKit and OpenCV, and it runs on Linux and MacOS. (It could be easily ported to Windows).

Jan 25, 2010

Linux Mint 7 Gloria quick review

I've been using Linux Mint Gloria for the past 3 months on my eeePC netbook. Needless to say, that distribution, a fork of the Ubuntu project, delivers its promises, and that is to provide the general public with a linux distribution that would facilitate the migration from Windows. The Mint community often proudly (and loudly) reminds us that it is now ranked 3rd most widely used distribution on distrowatch. Like many, I discovered Linux through Ubuntu, and while Mint might be very similar, I have come to believe that it does have these small details that makes it a far better choice as a newbie distribution.

Jan 9, 2010

Augmented Reality

Augmented Reality (AR) is a field of computer research in image manipulation, in which elements from real world environment are merged with computer-generated imagery to create a mixed reality. A definition of AR was coined by Ronald Azuma, now known as the Azuma definition, that defines AR as:

  • Mixes elements from both the real and the virtual world.

  • Is interactive in real time.

  • Generates imagery in 3 dimensions.

Dec 1, 2009

Chrome OS

Here's a great article I found about the upcoming Google Chrome OS. Check it out.


Be sure not to miss the videos at the end.

People seem to have mixed opinions when it comes to talking about Chrome OS. Many don't see what the fuss is about. Some of them only see in it a stripped down version of traditional operating systems. Other are afraid of the cloud. Here's what I see coming.

Nov 30, 2009

Formats, standards, monopoly

Lately I've been reading a book called "The World is Flat" by Thomas Friedman. I plan on writing a detailed review of this excellent book as soon as I'm done with it. However until then, there's one particular point I'd like to discuss.

Nov 26, 2009

Scrum: an agile framework.

I just came back from a 2-day seminar on a new software development methodology called Scrum. Now I don't intend of describing the details and inner workings of Scrum in this post. I'd rather write down a quick description and some of my impressions about it.

Nov 17, 2009

Thoughts on distributions

A big concern in the Linux community is the availability of so many different distribution. Many feel, somewhat righteously, that one of the drawbacks of the freedom granted by the GPL is the dispatching of the work. They argue that Linux will never be a viable alternative to popular operating systems for the desktop (notably MS Windows) as long as there won't be a unification of the efforts. I strongly disagree with this point. Sure Linux as an OS would greatly benefit from all its users/developers focusing on one version, one final product. But here's what I think they fail to see: Linux is not an Operating System! At least not in the modern definition of the term. It is merely a part of an OS, a simple tool given for developers to build upon.

Nov 12, 2009

Compiling from the command line.

If you're programming for Windows, chances are you are using an integrated development environment (IDE). Many Unix developers do the same. These big programs are (like many GUI applications) a blend of different smaller programs needed for programming (text editor, compiler, file manager, debugger, ...). There are ways to call each of these smaller programs individually, usually from the command line. While IDEs can usually give you a great boost in productivity, I think learning to compile code from the command line is a better option. My main problem with IDEs is that many programmers today fail to understand what really happens when they hit the 'Run' button.

Oct 16, 2009

Recover your lost data with Foremost

Have you ever deleted a file by mistake, just to find out you hadn't backed it up? That happened to me not so long ago, when I accidentally deleted a whole folder of my summer photos. Luckily I found out that there are tools to help you fix this. But before we get to see these tools, let's take a look at your hard drive.

Oct 8, 2009

Where is the Web going ?

The World Wide Web was invented by Sir Tim Berners-Lee in 1989. It really went mainstream two or three years later. Ever since, it has constantly changed. We're on the verge of entering what we call the third era of the Web, or Web 3.0. Let's trace back this history, focusing on its social impact, and we'll see the technologies used in each period.

Sep 21, 2009

What is open source?

For my first post I'll just start by something rather simple, explaining what's open source. What is the movement about, what are its ideas, its goals and more importantly what are the effective changes it can provide for general computing.

Let's start by the beginning: what's a source code? As sophisticated as they may seem, computer are nothing more than super powerful calculating machines. And much like any calculator, it needs data input to provide an output. Now to talk to a computer you need to talk a language it understands. And the common language all computers in the world speak consists of a successions of ones and zeros. Now with modern software being as complicated as they are, it would take centuries for a team of programmers to come up with the exact sequence of 1s and 0s to get proper results. So one of the things they come up with is a program that would translate a "recipe" that's human-readable to 1s-and-0s for the computer to understand. In the tech world we love to use scary geeky words, so in computer lingo this program is called a compiler, the recipe is called source code, and the 1s-and-0s are called binaries. You have to admit that it's much more fun to talk about compiling a source code to binaries rather than talking about recipes and such ...