Google Summer of Code & Monkey

Last week we did the review of the mid-term evaluation of Google Summer of Code, on this second round of the program 2/3 of our students continue hacking Monkey, by now i can mention that we have fully implemented the following by students:

  • Monkey Library: Monkey now can be converted in a shared library, that means that you can use Monkey stack using the lib API
  • Monkey CGI Plugin: when we moved to a event-driven model in Monkey 0.10.0 (two years ago), we decided to remove the CGI support as it lack of performance, due to people requirements and one successful student who already finished his initial project, he decided to move forward with extra tasks, so the CGI support is officially back for the next release v1.1.
  • Redis Support: our web services framework called Duda, implements packages to add extra features or make the use of third party components in an easy manner, Redis package is ready for Duda and will be merged into mainline within the next week.

Ongoing tasks by the students are: complete the merge of library support in Monkey mainline, FastCGI support, Memcache support for Duda… exciting times :)


Ready to the next level: Monkey v1.0 is out

WE did it

After years of development we have reached Monkey v1.0, codename Monkey I/O.  Monkey have been a pretty stable web server for years, each release cycle have shown a mature in terms of fixes and improvements, as well the community have grown and we have more eyes over the code, as well different visions to achieve the goals. So far i am very pleased  about this new major release and i feel comfortable how it arrives in a very good year for the project.

This have been an exciting development cycle where many performance improvements have been made, as well code cleanup and general fixes. We have reach this new release keeping our focus of hit a great performance and be lightweight.

Being a well funded project and persistent community, Monkey project joined this year to the Google Summer of Code program as a mentoring organization. Currently we are guiding three students who are working hard in a few exciting implementations for our incoming versions.

Looking back…

Years ago people often complained about why to dedicate too much time in a new web server, when some open and reliable options were available such as Apache or NginX, we always looked for a real lightweight solution, and that is Monkey. Also when we started to do a major re-write of the core on 2008, we changed our mind about where the project is going so our new focus was always embedded: where the penguin (Linux) goes.. Monkey goes behind it. So it’s not a surprise that we are really focus on ARM based platforms.

What can Monkey offer to an embedded device ?

Nowadays HTTP is one of the widely used communication protocol by different application layers (obviously running on top of TCP/IP). We are not in the age of just serve static content, even generate a full dynamic content page through scripting it’s looking like old school, or it will be in less than five years. We are in the service-oriented models age, where unique resources perform a specific job and expose that functionality through a common communication application layer: HTTP.

Imagine different nodes around your local network sharing signal information from sensors or inclusive waiting for incoming commands to execute a specific task in the device, you have a few workarounds depending of the transport layer, but if you choose HTTP you need a flexible and lightweight solution.

Monkey is more than a common web server, is a complete event-driven HTTP stack with a flexible API which allow you to take full control over the incoming request and at any later stage of the cycle.

Making web services easy: Duda

Even for who is implementing web services in C have to deal with not-so-friendly concepts such as concurrency, thread keys, lock free, memory management, asynchronous events, etc. This generate and extra learning curve that can bring some delays in the project implementation where straightforward solutions are critical.

Due to the problem recently described, a  new solution and sub-project have born: Duda, a web services framework. Duda it’s build on top of Monkey and expose a friendly C API for the web services implementation. Weeks ago we have publish an blog post about it:

As described in the article, Duda is hitting a great performance in terms of speed and resource usage:

Due to the nature of Duda and it’s new dependencies, we have decided to separate the project from the Monkey sources and handle it in a different scenario, you can find the new Duda home here: . The project is under active development and we will post more about it in the incoming weeks.

Final words

Thanks to everyone who have dedicated some time to take part of this, all work have been done in community with motivated people behind it, we will keep pushing hard in innovation and improvements. Just keep being part of it :)

If you are interested into participate in one of our projects or get involved in the community, don’t hesitate to contact us on #monkey or through our mailing list.

Dear lazy web: I need an automovil expert

I need some assistance to purchase the right replacement for my car, if you can give me a hand it will be more than appreciated:

My car:

  • Kia Sportage GE ’97 (made in America)
  • Failure: flywheel

This is my flywheel:

the Flywheel have two sides, one with teeths and the other with a small squares. My teeth side is almost broken so i need to change the whole part, Googling a bit i found some vendors from the US that can ship the replacement but no one is able to confirm if the part is about both sides or just one of them. Its a very old car so they do not have full specs about each part.

Would you please point me to the right vendor  to purchase the whole part ?, any help is appreciated.

Monkey HTTP Daemon / Google Summer of Code 2012

This year have been very exciting for Monkey Project, we are implementing cool features for our next v1.0 release and today we got the most great news that we could expect:


Your Organization Application for “Monkey HTTP Daemon” in
Google Summer of Code 2012 has been accepted.

Today begins a new stage for our project, after thousands of work hours and many years putting our best effort, we are finally being recognized internationally as a strong community with serious objectives and delivering a high quality product. This is a great opportunity to grow in different aspects of the project: organization, community and software improvement.

We invite to any student around the world to apply for our organization, we are committed to improve the server side of the web, we deal with embedded devices, performance, scalability, networking, and many cool stuff , innovation is one of our primary focus. Please review our project ideas site:

If you think that the web can still be improved, we are in the same page and we are looking to hear from you, meet us on #monkey or through our mailing list

Duda: web services framework for Monkey

[OBS: this is a repost from]

There is one fact: we are in exciting times for the project. Our HTTP core is consolidated since a while ago, it works in non-blocking mode, it has a nice indented configuration model and provide an advanced API to extend the core behavior, through this we support different behaviors by layers like IPv4, IPv6, SSL encription, security by subnets, basic auth, shell, log writer, etc.

There is a common question from people around the project: “where are you going ?” and the answer is: do you see that embedded Linux Box ?, there’s where we go. Common web servers lack of performance for embedded systems, most of them have focused in high production environments. our focus is different.

Our tech world is service oriented and i would say that implemented through a fat HTTP software stack, simple things are done in scripting languages that requires a process context or even be ran in a JVM environment, that is not lightweight and requires extra resources to be scalable. If you plan to implement a web service for embedded you should start forgetting about Java and PHP and think in lightweight options. Please Google a little about the options available and then continue reading here.

Continue reading

Education, limits and conscience…

I have seen a few videos about the paradigms of the education model and how we lives… i cannot stop thinking about that things are really wrong about how we are educated, how we manage our life and how we will be fine working in the others dreams, but what about ours ?. Often when people grow smile less, get depressed and not all of them are able to see the light and get some happiness… this is not ok and should not be something common…

When you are a child your imagination does not have limits, when you grow you are instructed to limit the scope of your imagination to what you just have to learn, i do not say that teaching is bad, i say that the knowledge must be share but also people should be inspired to be connected  with the “creativity”, I consider the creativity a state of collective conscience where everything already exists, when you “create something” you are just being able to pick up a piece of that conscience, commonly named an “idea”.

Also if we see how we commonly work i would describe two scenarios: people working in a company and people working by their own. When you work for a company you are mostly working in the other person dreams, at least you share the same vision and feel part of what is being done. For people doing their own stuff  or working as independent, they are trying to reach their dreams. There is nothing wrong with the mentioned scenarios, except when you do not share the same vision or you are not able to “create” due to “limits” imposed.

Said that, i can conclude that the main problem is the education model, because you are educated about how to think, what to accept and then what to do to work. Would not be a coincidence that some successful people in the tech area broke their traditional educational model and then were able to create great things ?: Steve Jobs, Bill Gates, Mark Zuckerberg.. no one of them continue their studies, they just took ideas, connected points, imagine an improved work scenario, connected people.. etc.  I do not know if they were or are happy, but i am sure that they are satisfied with their archived goals…

Talking about educational models I cannot omit to mention One Laptop Per Child project, just to reminder it is not about cheap laptops, it is about access to the information and have an extra tool to help to explore and create.. you should review the success of this project with children in different countries…leave them a time alone and you will realize the amazing things that they do…

As this is just “my truth, I would suggest to watch the following videos, get your own conclusions:

This is not just about do what you want to do, it is about to wake up your conscience and listen your self… we can do something better for our kids and our selfs…


Online courses from Stanford University

FYI: The Stanford University will start doing some public and free classes on their web site starting on January 2012, for more details check the following links:


Civil Engineering

Electrical Engineering

Computer Science






Infocast 8 + Chumby OpenEmbedded (Angstrom Linux Kernel)

Last few days i was playing with an Infocast 8″, the goal was to change the base OS provided by Insignia Inc. and replace it with the Angstrom Linux Kernel provided by the Chumby OpenEmbedded packages builder. For some reason there’s no similar images available for download.

FTDI Interface


After doing minor tweaks to the chumby-oe project, get some help from Guy Carpenter (thanks!) and fix some bitbake files, i managed to create a new bootable image with Wifi support (i mention this because the Marvel wifi chip requires some specific firmware files)

Infocast 8 booting

Infocast 8 booting Angstrom Linux Kernel

Now connect to the Wifi AP is a little tricky, you need to set something in the following order:

# iwpriv mlan0 setregioncode 0x10
# ifconfig mlan0 up
# iwconfig mlan0 mode managed
# iwconfig mlan0 key YOUR_WEP_KEY
# iwconfig mlan0 key on
# iwconfig mlan0 essid YOUR_ESSID
# udhcpc -i mlan0

After that you will be able to connect to your AP and have network access.

You can download the ROM image from here, or if you prefer, you can browse the whole content. Once you get the ROM image you need to burn it into the internal 2G SD Card, you can do it with: dd if=rom-chumby-silvermoon-chumby-starter-image.img of=/dev/sdX bs=8M. Make sure before to run the dd command, do a manual umount for each partition.