martes, 31 de agosto de 2010

self.showOff(:updates!)

Its Update time! :) The life of a super-full time developer and researcher is hard! A lot of things going on lately, while I try to keep a balanced normal life.

First of all, my research paper has been accepted in the Latin-American Conference of Informatics (CLEI), which is something that I am very proud of. My paper title stands for "Binary Classification Rules Evolution using Linear Genetic Programming: A livestock disposal problem application." I will explain more about it ASAP.

Secondly, I have been working very closely with Daniel Drake improving and extending Inventario and YAAS. Both systems are being used in other deployments like Nicaragua's OLPC deployment. I have am very impressed by Daniel's patches and enhancements and I am very proud of seeing my projects being used and improved by people like him.

So, what else have been going on lately? The last months I have been intensively working on a new OS version for the XO laptops in collaboration with the SUGAR development community, Activity Central and developers from Uruguay's Plan Ceibal. The whole purpose for this project was to provide a OS with features that are urgently needed by most of the deployments.

Please meet Dextrose! It was a long and stressful process but it was definitely worthed, and I am not only judging by the final software results. The most remarkable aspect of this project was the international collaboration between hackers all around the world. We even had a 10 days dextrose camp here in Paraguay!



My contributions to this project contain a lot of bug fixes, enhancements, local customizations and new features. I would not explain to much about the bug fixes and enhancements, but includes fixes for broken features, strange behaviors and storage space waste.

In the enhancement side I have merged Daniel Castelo (Plan Ceibal) extensions for my previous 3G support patches. His work includes connection statistics and proper connection errors displaying.

On the new features side, I have been working closely with Esteban Arias (Plan Ceibal) rewriting, refactoring and mering with my own work his usb stick backup system. The refactoring work allowed me to use the same dialogs and interfaces for OLPC's wireless backup system and other subsystems.

Another feature I implemented was a protected activities functionality which disables the erasure option for critical educational content. This feature is very controversial because in my humble opinion is a naive attempt to solve discipline problems with software. But it took me a very little time to implement so let see if it really helps ;) (UPDATE: It was merged on Sugar's mainstream code)

There are way to many improvements and new features for this new OS image, one of my favorites is Anish Mangal (Activity Central) implementation of a resource displaying tool which concept was designed by Sugar community suggestions (me included!). Other amazing contribution was Esteban Arias accessibility features pack.

In a lower level aspect, Bernie Innocenti and myself have been working fixing many problems with C libraries like Metacity. Most of the changes were not upstream-able so we had to roll local rpm packages for those changes.

I am hoping for other deployments to find Dextrose as useful as we do, so they can take advantage of all this new features and improvements. One surprising example was the New Zealand deployment tech guys using Dextrose and following its development closely.

If you want to contribute to this project don't hesitate! Please visit us at #olpc-paraguay at freenode. Ill update this article with a few photos and Dextrose screenshots soon :)

UPDATE: Please take a look a this slides used by Bernie at the San Francisco Sugar/OLPC Summit.

miércoles, 7 de julio de 2010

self.showOff(:YAAS)

Yep! It's time for writing again! This time I want to comment about other development work I have been doing since the beginning of this year, mostly for Paraguay Educa OLPC infrastructure and Sugar.



One of the most useful systems I have developed this year (so far) is a web activation management system which can be used for OLPC anti theft system. The OLPC anti theft architecture requires having an special server which generates the activations for the laptops. This special server contains a package called Bios-crypto, which uses private/public keys (very sensible data, that has to be secured).



One "problem" with this system is that there is no way for local deployment technicians to generate custom activations, without the need of accessing the special server for manual generation (security alert!) or having an account into OLPC activation website (which is also open sourced, but not really practical for local deployments). Manual activation generation is a real headache for whoever is in charge (entrusted) of that special server.



Thats why I developed YAAS (Yet Another Activation System). YAAS provides a very easy to install-manage-use environment. It is very simple but has great features. Basically, the system's administrator can create accounts for technicians setting custom limitations for each technician.



The whole idea is that every technician has an activation bucket. This bucket represents the number of laptops that can be activated by the technician. System administrator can "refill" technicians bucket when it runs out. Other important limitation is the maximum activation time. Each technician has a limit in the duration for the activations he creates. This is very useful when you have many different kind of technicians.



The system has an activations log that can be accessed by the administrator or the technicians (only for their own activations, of course). This log can be useful for accessing the activations, so it works like a "key-ring" of technicians activations.



The system provides two different packages, one for the web front end and another for the activation generation back end service. This separation is needed considering the security aspect for the special activation server. This generation service could be isolated from outer world, and let the front end act as a proxy.



The system's front end was written in Ruby on Rails while the back end is pure standard ruby. From what I know Paraguay Educa is the only deployment using it at the moment. But Daniel Drake from OLPC has shown interest in using for other deployments, as he did for Inventario.

Source code is available under GPLv3

yaas-web:
"git clone git://git.paraguayeduca.org/users/mabente/yaas-web.git"

yaas-server:
"git clone git://git.paraguayeduca.org/users/mabente/yaas-server.git"

Official documentation:
http://wiki.paraguayeduca.org/index.php/Yaas_documentation

Many things to improve! Help! :)

jueves, 27 de mayo de 2010

self.showOff(:sugarlabs)

Hiho! its been a while (again) since my last update! In the last weeks I have been very busy (yeah, again) with work and thesis research. I had my first thesis presentation, and I did just well. Also submitted a scientific paper with some of my research results to the Latin American Conference of Informatics, also known as CLEI, cross you fingers! so it gets accepted :)

Well, well, where I was... oh ya... Paraguay Educa and OLPC. In case you haven't heard of it, this project is being implemented world wide, in many different social and economic conditions. Its main purpose is to provide a first world class education to all the childrens in the planet, and therefore help them to overcome poverty.



One of the most attractive aspects of this project is the Sugar Learning Plaform. Technically it is a simplified Desktop Environment inspired by the principles of construcionism and collaborative work. This platform also provides a huge set of programs (or Activities, as they are called inside of Sugar).



Sugar was originally design and implemented by the OLPC employees, and later on became a whole open source software project by its own. Now literally millions of kids are enjoying this platform, letting their imagination fly as high as they want. I am really envious :), I wish I had such a cool laptop when I was 7.



From the very beginning Paraguay Educa has tried to put their effort to promote this platform development and use. Thats why, once I was done with the first Inventory System version, they let me "play" with the Sugar source. On November of 2009 my first challenge was to provide a easy way to let the kids use 3G devices, since Sugar was only supporting ethernet and wifi devices.

At the beginning I though we wouldn't be the first deployment trying to do this, and I was right. Most of the deployments had something in common, GSM devices were the most common and cheap devices available at their areas. So I started writing to sugar development mailing list, and many people responded me, such as Daniel Castelo from Uruguay's Plan Ceibal project. Most of the other deployments were trying to achieve this by using external programs or such, so I thought it would be great if we could put a common effort and have this feature integrated into the Sugar core.



After a couple weeks, I was done with the first working prototype. I have to say it was very challenging since I did not much about Python, Dbus, Network Manager and the Sugar core source code. But I got to that point thanks to the help of Tomeu Vizoso, Dan Williams and Daniel Castelo. Because of an huge coincide Tomeu was traveling to Uruguay to meet Daniel Castelo and the Plan Ceibal development team.



I took a fly to Motevideo Uruguay and meet everyone. Spent 5 days working with them preparing the code for the upstreaming. Here comes the most important lesson, or how I would like to call it, the funny part. Making code for Open source projects is just hard. Just to let me say this, having a piece of code that works, is only 20% of the effort it takes.

Adapting the functionalities for general purposes, adapting the code to fit inside the current modules, and respecting the coding standards and style... is, honestly, the hardest part for the beginners like me. Took me almost 2 weeks to have it working, but took me 2 months to have the code ready and accepted.



I can't complain, I learn to much during that period, from technical stuff to programming style matters, hehe. All the hard work was very well rewarded, the GSM support was complete success, it was one of the key features of the Sugar 0.88 release and I am very proud of it. :)

The most remarkable places where I found this feature mentioned are:

domingo, 11 de abril de 2010

self.showOff(:paraguay_educa_part_one)

After a few weeks of being extremely busy with work and thesis research, I think I can continue my show off schema. Well, well, where i was... oh right! On December 2008, a miraculous day finally came. I finished the 10th Semester, which granted me joy oh freedom again. I received my intermediate Bachelor degree (since I am still working on my thesis research).

On January 15, I was called by an NGO called "Paraguay Educa". This NGO officially started on late 2008 launching the "One Laptop Per Child" project in Paraguay. At that point they were preparing the first large scale laptops deployment at Caacupé City. The current goal was to deploy 4000 laptops to 10 public and private schools, one laptop per child (Obviously).

The Paraguay Educa team was composed of 8 people by the time, 9 including the new member, self. Since the deployment was only 2 month ahead, I had to extend their current Laptops inventory system, to adapt it to their daily changing needs. The basic version of the system was developed by Raúl Gutiérrez, based on his own old projects. System's back end was written in Ruby, using Ruby on Rails framework, and the web front end was written in Javascript using an amazing framework called Qooxdoo.



The first version I finished was only a simple CMS with Places, Laptops, People, Handouts a basic reporting module with a few more handy tools for making the deployment process easy as possible (barcode generation, dynamic handouts forms, etc). In the second version, I also added a technicians module, to store all information about the laptop's reported problems and problems solutions. Plus a few useful reports.



For the third version, I added a network monitoring system, in which for every location registered in the system, users could associate network devices labeled as nodes, and then display the nodes status and extra information ( such as ssid, channel, current load, current number of laptops connected, etc) at the Google map front end. The system external agents were written in ruby also, using ActiveResource.



Since the system was pretty handy for initial and small deployments, other deployments around the world where interested in using it. So for the last version, I added a language support. Raúl Gutiérres and Paulah Saphir from Rwanda OLPC did a great job translating the system to English.



The system has to many great features that I did not mention in this article because my lack of time (its own ACL module, Desktop-like GUI, Raúl's CRUD dynamic forms, Raul's SearchController Module, own seed data generator, data sheets import etc). If you are interested you can take a look at the Online Demo. Username and password "admin". All the system documentation is in Paraguay Educa's wiki page, Spanish only.
  1. Concepts
  2. Manual
  3. Use in logistics
Raúl Guetiérrez also made an rpm package to make the installation ever easier, go to our rpm installation wiki page.

The whole system, school server agents, and the framework developed were released under GPLv3. So feel free to get it, use it and modify it. On your favorite terminal do:

"git clone git://git.paraguayeduca.org/projects/inventario.git"

During this system development, I gathered a lot of a new knowledge domain concerning software design and development techniques. Being part of the requirement gathering process and mostly the only [designer, developer, programmer, tester and documenter] helped me through that learning process. But hopefully I will do more team work in the future. :)

UPDATE: Thanks to our ambassador Daniel Drake, the system is being used by Peru and Nicaragua deployments.

jueves, 18 de marzo de 2010

self.showOff(:kianagy)


In the middle of 2008 year, during our winter break, myself and a univerisity colleague (José Prous) wanted to test our technical and programming skills, in order to fight boredom. Thats how we scheduled our 2 weeks available time to produce a game engine from scratch, just to see what we could achieve in that very limited time.



Thats how KIANAGY (Kianagy Is Apparently Not A Game Yet) was born. Our own prototype. When we said "from scratch" we really meant it. So we decided to use the most basic dependencies. The whole engine is written in ANSI C using only standard libraries (threads and sockets) for the server, and OpenGL and SDL for the client.




The whole development process was made in a iterative way, the first version was only a few cubes with basic moves on a plane. At the end of each iteration we decided what would be the next features and what should be changed in order to accomplish them.



We worked in parallel, I took full responsibility for the server and José decided to work on the client side. Kianagy's architecture its pretty simple (simple != good), all the virtual environment and its logic is managed on the server side, the client function is to display the environment state on a graphical way, also catching user's mouse/keyboard inputs translating it into our custom communication protocol. That means that each of us had to deal with an different domain of challenges.



Upon the final iteration, one week after the end of the winter break, we had a very decent prototype. We learn to much in those 3 weeks, in to many aspects and fields. Just to summarize kianagy's features, alias our achievements and code wall of shame :)

  • Client client-server architecture, "multi-player" by design.
  • Custom communication protocol, based on actions and formal definitions of "environment state".
  • Custom Collision system support based on uniform spacing partitioning.
  • In-map transport system, it is based on the tree-like arrangement of the environment objects with relative positions.
  • Chat support
  • Basic combat system
  • Basic NPC (Non Player Character) support.
  • NPC's behavior is modeled using "script-able" Markov chains.
  • NPC-Player interactions over simply chat, based on "script-able" keywords definition.
  • NPC's basic combat support.
  • Custom .map support based on unofficial definitions. The parser was written using flex and bison. Its use on server side was to translate .map files to our custom uniform spacing partition binary files. On the client side for map loading.
  • Custom Octree library as part of the rendering optimization.
  • Custom md2 parser support, also based on unofficial definitions. Used for character model support, the code was based on a online example.
  • Custom library for Cell shading rendering support.
  • Some others I can't remember right now...

The character models were taken from planetquake
The map we used are the ones I still keep from my "mapper" career.

Our conclusions can be summarized on this video.

lunes, 15 de marzo de 2010

self.showOff(:university)




Right after I joined the University, I realized that I would not have to much time for game modding anymore. So I started to take my classes very seriously. I did not do much in the first years, The first 2 years it was basically pure maths, honestly I wish I had more maths, because I am still not so good at it.



I spent my free time learning how to use Linux and helping some gaming communities setting up their game servers and playing online games (Ohhhh, beware of the evil mmorpgs, the root of all evil!!! Just kidding). Actually its a good way to meet people around the world and learn English.



Theres a lot of things to change and improve concerning the current University education system in Paraguay, but I will focus on the good things. The best thing of my education was very rigorous evaluation system it had.



Most of the Computer Science assignments had very crazy exams where the students were suppose to solved very hard assignment related problems in a couple hours, from designing, implementing and calculating space/time complexity of algorithms (All in the same exam), creating new mixed data structures to solve typical computer science problems or maybe just random problems that the professor had at work (yes, creating and implementing included) or just to make formal probes of why randomly created Turing machines just beat you.



Anyways, I am very glad I had the chance to dedicate full time to this academic matters. Read a lot of great books, including Herbert Schildt C's Reference, Deitel & Deitel C++ Guide, Tanenbaum's Computer Networks and Modern Operating systems, The OpenGL Redbook, Carlo Ghezzi's Theorical Foundations of Computer Science, Russell's Artificial Intelligence: A modern aproach and many others including a lot of math books.



So I basically surfed over many Computer Science fields, year by year loving it more. There were plenty of projects I enjoyed so much working together with my colleagues, from writing a multi-player version of Stratego in C, implementing my own version of basically all common data structures, developing small projects using many programing languages like C, C++, Ruby, Python, C#, Delphi, Prolog and Haskell, solving a few of the Kernel Project for Linux Book, implementing classic data mining algorithm, writing an custom version of iptables--, a very reduced subset of C to Ruby translator, implementing genetic algorithms to evolve transition rules for cellular automatons (Paper, Spanish required) and even boring web applications.



The last 2 years I started teaching at the University as Professor's assistant, and had a lot of fun doing it, also went to a lot of conferences and participated in many free software festivals. But by far, the best I found during that time was a very few passionate, dedicated and inspiring professors and studies partners, to which I own most of my success.



domingo, 14 de marzo de 2010

self.showOff(:game_modifications)

Under the "GGO" and some other silly aliases and as I mentioned in my last post, my first passionate computer related work was to support Quake III (or derivate engines) game mods.

In almost of these game mods my job was to make good quality maps (levels, scenarios, or whatever else its called). Looking back I am still very proud of my work, considering all the limitations of Quake III, had to deal with very different fields (Programming, 2D art, 3D art techniques and Architectural principles).



My first project consisted on a Quake III modification called "Saviour of Strength" (the original web site is no longer hosted, but amazingly there are still a lot of content published in modding communities). Basically, it was supposed to be a player vs player combat game plus a few RPG elements, based on Dragon Ball Z anime series. Back then I did not understand the copyright concept, he he, I was thinking more like an "Professional Art Fan" creation.

Over the 4 years I worked on that project released more than 10 maps, some of them were never seen, other were featured on very popular websites like www.planetquake.com.



In the last years of my "Mapper" career I started or joined other projects such as "Rurouni Kenshin Redemption", another anime combat game and many others which names I can't even remember.

As I mentioned before, in the later 2003 I stopped all serious work, and started spending more time on university matters.



One of the most interesting aspects of this kind of work is that you never forget how to do it and even with years of inactivity you always come back with greater skills and ideas.



The tools I used were, GtkRadiant for the basic structure design and game internals, Terragen for the sky boxes, EasyGen for terrain generation and any text editor for the shaders and sometimes 3DStudio for fancy renders.