Modifying a live linux kernel

Before reading this, I just need to say something: I’ve no idea of linux, I’ve no idea of programming, I’ve no idea of computers… Everything you read here might have been invented, so, please, do not reproduce what I write here. If you do, bear in mind that you do it under your own responsibility. In fact, what is a computer anyway? The other day we were having issues with a box that was used as a NFS box among other things.


Some time ago I discovered Multitail, a tool for displaying in a tail-like fashion any kind of information. I works by splitting the console window in many parts and displaying the info you want on each of those screens, whether it is tailing a file or the output of a command via a ssh session. It also has coloring support (which you can extend using regular expressions) to tailor your needs.

More on setting a subversion mirror repository

A few days ago I wrote about setting up a subversion repository using svnsync. On that entry I was using svn+ssh authentication, but there are some gotchas to take into account to avoid having a security issue.If you recall correctly, we had a unix user with which people will access the repository. If we haven’t taken any extra protection, that means that anyone that has their ssh key on such a user’s ~/.ssh/authorized_keys file can log into the system.

Speeding up trac's response time

I’ve been trying to speed up an installation of trac over the last few days. The web interface took ages to display each of the directories or files within the subversion repository. But this one wasn’t too big. The only change to the subversion repository is that we started using a vendor branch imported into our main repository using svm So, after a few hours trying different solutions, and reading trac’s source code, I think I got where the bottleneck was.Well, it was which was causing the bottleneck.

Setting up a subversion mirror repository using svnsync

With the new version of subversion 1.4 you have a new tool called svnsync with which you can maintain mirror repositories quite easily. I’ve been working on one at work and would like to share with you my findings in case it interests anyone :-) Understanding the problem In order to have a mirror repository, it is important that commits only happen on the master and then they are synchronized to the mirror using the svnsync program.

Mini tutorial on gdb

Thanks to Matthew: gdb --args program/to/debug --whatever break Foo.c:532 # to put a breakpoint at line 532 of Foo.c run # to run it, until it hits that line bt # to display the stacktrace (backtrace) frame 2 # to change the stack frame you're looking at list # to list the sourcecode for that stack frame step # to step into the next command for that frame next # to run the code to the next command continue # to continue onwards print bar # to print the contents of variable bar printf "%08x", bar # standard printf for bar delete 2 # to remove the 2nd breakpoint Obviously, you need to compile things with -g as an argument to GCC.

Playing with web services

Some of you may know that I run a website for displaying the temperature in Seville which has many visitors, mainly from Seville. I’ve run that website since 2001 and it is actually number one when you perform a google search on temperatura en sevilla. I find it quite useful. Eversince I have implemented various related services, basically playing around in my free time. Some of them are a RSS service and a jabber service (which you can subscribe by adding to your jabber application - even Gtalk -).


As part of another assignment for the Distributed System course at the University of Sussex we have been doing some research on Chord, a distributed hash lookup primitive, and, in the end, implement part of what is called a chord ring in java. The idea behind Chord is a research paper in which a distributed protocol for adding nodes to the system, insert data into it, retreive it and drop from the system is described.

On Distributed Computing using RMI

Ok, so I have this assignment in one of my courses at the University of Sussex, Distributed Systems. The thing is that we need to implement a distributed event notification system, in which clients subscribe themselves to the server to which some event generators sends their events. All of this, using RMI (Remote Method Invocation) in Java. The assignment is an introduction to distributed objects in java by implementing this little system.

On XML and Java

As part of an assignment for a course at Sussex University I have to create a Servlet to run a small application, one to deal with a wedding list. It involves quite a few technologies, including XML, javascript, CSS and JAVA.So far I am not specially happy with the course as I haven’t enjoyed it as much as I thought initially. I think it is because there are so many technologies considered in such a short period of time, but I think that Java itself made me feel very uncomfortable from the very beginning (As an example, I found the Java DOM API to be quite awkward to use).

Creating images on the fly (human verification)

Ok, so yesterday I implemented all the logic behind a anti spam system for pybloxsom comments. The only thing missing was the generation of images on the fly, showing the secret number in a way that humans can read it and also making it weird enough to mess an OCR system. So, I spent some time investigating PIL, the Python Imaging Library, a set of python modules to manipulate and create images.

Adding human verification to comments

I’ve been nailed by a bastard spammer for some time at another blog I happen to run in Spanish. What he usually does is try to create hundreds of comments pointing to some kind of crappy web site I don”t intend to visit at all. All I know is he uses lots of times the word casino and grants. Investigating a bit, I learned he uses the UserAgent AIRF string, which happens to be used by this program: roboform, a program for automating the filling of forms, somehow a paradise for spammers :-( As It says in the FAQ, newer versions disable the use of that UserAgent string so it makes it virtually impossible to filter those comments from a web server point of view.