Weekly Assignments
Final Project

1. Project Management

This week's assignment consists of creating a personal site describing my final project.

The problem


It may sound as a set phrase, but the problems that have to be faced by the first world population are not the same as the ones of the third world. In fact, many of the solutions and approaches developed in (and for) the first world are not suitable for underdeveloped countries or even developing countries.

Neonate children are very sensitive to their surroundings climate changes, that's why they need a lot of attention, especially on their first few days of life. This issue is specially important when we talk about premature children.

In Europe, U.S.A. or any other of the first world countries, the society has access to incubators and medical personnel to ensure they have the needed attention for their children. Unfortunately in third world countries many children die because of the absence of this basic cares.

Nowadays some low cost incubator approaches can be found on the Internet, but most of them don't meet the necessary conditions to provide a good care. That's why I decided (in junction with the FabLab Madrid CEU) to create a low cost incubator approach inspired on all the prototypes found on the internet and with the knowledge of medical personnel.

The name of the incubator I expect to build is In3. This incubator aims to be a MVP at the end of the semester, but as it will probably need more development, it will have to be a solid foundation for future developers.

P.S. the upper right image is supposed to be a hieroglyph of the project name.

The approach

The incubator to be built must meet some characteristics:


The structure of the incubator must be robust, but usability can't be forgotten. One important characteristic is that it should be easily built and repaired in third world countries without having much knowledge about 3D design or electronics.

In the initial design I will use inexpensive materials such as wood, plastic as well as recycled components, for example old computer fans.

incubator box

One of the characteristics is that the bed has to be able to be tilted slightly. That will be probably adjusted manually by medical staff (it could also be regulated using an engine, but let's prioritize).

Another problem that must be faced is the isolation of the incubator. This characteristic will avoid, for example, mosquito bites and the spread of some diseases to the child. But it will also make more difficult the design of the structure, because the interior of the incubator must be easily accessible to medical staff. In conclusion, it should have holes (as can be seen in the diagram), but those must be covered by something that is easily removable.

Finally, as not every child needs the same attentions, different legs for the incubator box have been sketched.

incubator legs


The incubator must, at least, have the necessary sensors and executors to maintain some basic conditions inside the incubator, such as temperature and humidity.

All those sensors will be connected to a microprocessor (the model is yet to be defined) using printed circuits and wires inside the incubator.


Last but not least, the brain of the incubator should be programmed to regulate the incubator conditions. For example, if the temperature raises above 37ºC or falls below 33ºC a heater or a cooler (probably a fan) should be activated.

Used tools

While I was studying Telecommunication Engineering and Computer Engineering (6 years) I worked as a trainee and as a freelance developing websites and mobile applications. During that period of time I started writing all the code using simple text editors, such as nano, vim or Notepad avoiding [if possible] the existing frameworks to learn the basics of what I was doing. A few months later I started learning how to use professional IDE and some third party libraries.

This website has been developed based on a single-page predefined template (stylish-portfolio under Apache v2.0) and customized by using two different tools:

  • Intellij IDEA: this is a very powerful IDE, in fact it has many options that will not be necessary for writing this website. Anyhow, I am using it because it is the one that I used while developing Android, Java and PHP applications; which means that I am really used to it. This IDE has a Community Edition that can be downloaded for free.
  • CodeKit: this is a non-free application, it costs around $30, and it automates many tasks. It allows you to include HTML files inside other HTML files, merges and obfuscates JavaScript and CSS files (Sass and Less [CSS frameworks] can be used) and optimizes images for Web. The main problem of this tool, apart from being non-free, is that it is just available for OSX.

The other thing to be taken into consideration is the version controlling system. To be honest, despite of having used several programs for this purpose, such as: SVN, CVS, Git, Fossil or Team Foundation Server; I've never used Mercurial, which makes this the perfect opportunity to learn a new system.

For the last few years, my preferred version control system has is Git. In order to manage Git repositories I use both, the command line or SourceTree (an incredible simple GUI tool) depending on the situation. I have noticed that SourceTree can manage Mercurial repositories. Taking into consideration that the first few trials were successful, I will give it a chance and combine its usage with the command line for the next few months.


Installing Mercurial on OSX was pretty straightforward. It can be done executing just one command:

~$ brew install mercurial

Once installed I added the ssh keys to be able to authenticate in the repository and download the european repo:

~$ mkdir .ssh
~$ mkdir .ssh/keys
~$ mv academy .ssh/keys
~$ mv academy.pub .ssh/keys
~$ chmod go-rw .ssh/keys/academy
~$ chmod go-rw-r--r-- .ssh/keys/academy.pub

Then, I have to configure the remote host for the repository. The file must be called "config":

~$ vi ~/.ssh/keys/config

And its content should be:

host fabacademy.org
port 846

Now it is time to clone the repository (it can be done anywhere we want):

~$ hg clone -e "ssh -p 846 -i ~/.ssh/keys/academy" ssh://[email protected]/academy.2015/Web/eu europe

We want to identify ourselves in every commit/push we perform, so we must edit the file "./europe/.hg/hgrc" adding the following information:

[ui] username = name surname ssh = ssh -p 846 -i ~/.ssh/keys/academy -C [hooks] changegroup = hg update >&2

From now on, we can pull and push data using commands like the ones listed below:

  • hg status
  • hg add
  • hg status
  • hg incoming
  • hg pull -u
  • hg heads
  • hg commit - m "commit message"
  • hg heads
  • hg outgoing
  • hg push