Linux Kernel Internals...

Have you ever wanted to know the Linux Kernel Internals? Well, today, while browsing the web, I came across this article. It is an interview with Jens Axboe, the hacker that launched the development of the 2.5 branch of the Linux Kernel with his rewrite of the block layer.

If you ever wanted to understand a little more about how Linux works, just read the interview. It is well worth the time it takes to read it. In fact, I'm know installing the kernel 2.6.19 on my Laptop and I'm following some of his advices, specially the notes about I/O Schedulers. What do you want? My Laptop is a 6 years old machine: if I can squeeze a little more performance out of it, I will!


The Community

Today I was browsing through my usual RSS feeds and I ran into this one. It is a presentation about "How To Herd Cats and Influence People". Jono is right on the money: the community is the key to keep a project alive. In fact he is even righter when he mentions that the process should be defined, not a peace of bureaucracy that no one wants to follow, but a simply defined.

I'm saying this because I'm trying to contribute to Rhythmbox and I'm having difficulties on how should I make things. You see, when I involve myself in a project I like to respect the already made decisions. For instance: I don't want to start immediately by questioning the chosen architecture. The problem is that if I don't understand the architecture it will be difficult to contribute.

What's there left to do? Well, I'll choose one implementation, the one that is quicker and that doesn't seem to break the application's architecture and move ahead; submit the patch and wait for feedback. I hope that the feedback contains some sort of guidance if they don't like the solution I'll propose.


Thesis Progress... or lack of...

As you already know I'm writing my Thesis. Facts are that I haven't made any progress in it and I believe I should really channel all my energies to it. It is almost the end of January and I want to end it as soon as possible.

The problem is that it has been some weeks since I have written anything on the Thesis. It is not that the subject isn't interesting, but since I shot for the impossible for the given time frame I'm writing about what I wanted to achieve. Facts are that I didn't achieve my end goal and that makes me frustrated to a point that I can't write about it. I guess the rage needs to build up before I write a single line in the Thesis...


It is not the Language: It's the Library!!!

In my last post I said that it was time to brush up my C programming skills. Well, it turns out that my C programming skills are way OK. The problem is that I don't know GNome's APIs.

It's like when you have one of those enlightening moments when someone explains you how to do something without having to do a Marathon before. I'm always saying: "Developer, know thy tools!". It seems this sentence is now haunting me because I don't know GNome's APIs and I'm paying the price: I end up look, searching or even reinventing something that has already been done all over again.

I know most of Java SE APIs by hart, their patterns and how they should be used. I know them so well that I can even abuse of them to my benefit. In fact, it is not the first time I go to Java's source code to see how something is done so I know if I can use it in a given way. In fact, the last time I did this was just a couple of days ago when I wanted to see if the Preferences API in Java 6 used the Context Class Loader of a Thread when instantiating the Preferences Factory. This is how I feel in Java: like a fish in the water because I have been using it since its first version.

With C and C++ it is different. I'm using C++ in my Thesis to program a robot and I need to learn its API and the API of the framework I'm using. For the remote control and UI I'm using Java because I feel more comfortable with it.

But GNome has a whole set of APIs that I want to get to know. The main problem is that, like most open source projects, the documentation is not what it could be. Maybe I can contribute on this end, that is, as I'm learning the API I can document it, or at least write some articles about it. What I would really love is to have something like the Java's reference API for all GNome's library. I'm using DevHelp and I can see the classes that exist and their API, but most functions aren't documented and what I'm missing is an introductory path to an API. For instance, if you want to use GDK PixBuf library to load a JPEG how would you do it? I know how to do it, but after scavenging the API for fifteen minutes.


I need to brush up my C Programming Skills...

It looks like I have been Eating my own Dog Food for too long. I'm saying this because I usually make new code using code that I have already written down. This makes things easy: the principles behind the code are almost the same (if we don't factor in the natural evolution that comes with Age and Experience); the architecture is know; the flow is know and so on.

I'm trying to add a new feature to GNome's Rhythmbox application and I'm finding out that I'm a bit lost in their source code. It is a mix o C, with object oriented support built from scratch, and Python. Problems? Well, I don't understand their architecture and I have never written anything serious in Python. End result? I'm lost :-|

For me this means that I need to brush up on my C skills and also to learn Python. Maybe this was just the excuse I needed: a worthy challenge that would force me to dig into someone else's code.


Beating an RDBMS...

My latest assignment at work is to try to make a dedicated storage system that we can use to be the performance of a RDBMS when making statistics. I know it seems strange, but the first tests show that a dedicated storage system can be something like 5 times faster then a RDBMS, even without optimizing the storage.

It goes inline with a recent article from the MIT guys that indicates that for specific applications a dedicated storage system can be up to 10 or more times faster then a conventional RDBMS, even if it is a really expensive one. Well, I've known this all along: the RDBMS needs to be sufficiently generic and if you know the nature of the data and the operations that are going to be performed you can always make something faster.

The problem with attempting to make something faster is that you will have to solve some of the problems that an RDBMS already did. No, I'm not talking about Transaction Management, but concerning how data is store. You need to structure your storage in a way that enables you to update, read and delete effectively. And believe me: although this might seem simple, it is not!

Now my days are spend around managing files in blocks, splitting block in slots, making linked list in files, metadata, storage format, etc., etc. And I still have to think about defragmentation techniques...


Learning New Languages

I think it is about time to start learning a new programming language. I think it has come a time where you should really use the best tool for the job and not just reinvent the wheel just because your language doesn't do a certain thing.

There are many languages out there that I wanted to try, like Ruby and Python. But what I'm also pondering to try C#. I have always delayed this because C# first seemed like a clone of Java, it didn't ran on Linux and it wasn't truly multi-platform. Today I believe I should know its special constructs if I ever need to use it, because everything else looks very similar to Java and C++. Is like 15% is new, everything else comes from other languages. As with any new language the main step in the learning path is learning is API. Like Java, C# has many modules that address many things. Knowing at least some of them would be good. This is even more true for someone who has been working in the same place for 7 years and sees a dark future ahead.

Today I installed MonoDevelop on my laptop to give it a go. It is still unstable and has already crashed twice, but it should be sufficient to make a few experiments with the language. Ruby and Python are also on my sight, specially the JRuby and JPython flavors.



Do you know a tool called Blender? If you don't maybe it is about time that you do. If you are interested in Graphics, 3D, High Quality Rendering, Physics Engines, Game Engines, Ray Tracing and others of the same kind, then you are a Graphics Geek. Well, at least I think that is what geeks that are interested in Graphics should be called.

Am I a Graphics Geek? Well, probably not fully, but I've always found interesting the world of Graphics. It all started at the University when I had to develop a Z-Buffer Implementation, coupled a a 3D Modeling tool. You see, I went the extra mile. For a simple project where you shouldn't spend more then 40 hours I ended up spending something like 60 hours and ended up with a tool that even made objects by Revolution, that is, you draw a polygon and a line and the engine would warp the polygon around the line making quads as it went by.

What really amazed me at the time is that this is an area were you could always attempt old techniques and new techniques to squeeze a little more performance from the machine. At the time I did this I had a 486 PC at 66Mhz. At that time we had Pentium's 3 at 130Mhz at the University and even those weren't top of the line. The end result? Well, I had to make substantial optimizations to the engine to ensure that it had an "acceptable" performance in my PC. Actually it is a funny story.

When it first ran and produced a good result it took something like 5 to 10 minutes to render a scene. I added back-face culling and it dropped to 2 to 5 minutes. I then added an computational cache for the dots and it dropped to something like 20 to 40 seconds. It was acceptable, but it had a strange output. I was rendering a sphere and it seemed like a density map, like the engine was supposed to produce more colors but it didn't. It was the night before the presentation and I gave up at about 1a.m..

The next day I was attempting to see it running in the University's machines, just before the presentation, and I was already preparing myself to explain the teacher that I couldn't solve that bug. What happened? Well, it toked only 3 to 10 seconds to render a scene and the scenes were absolutely beautiful. Then I remembered that at home it was running with only 8 bit color depth (256 colors). At the University it was running at 16 bits. The teacher was amazed with the speed of the engine and I had to explain the techniques that I used that he didn't teach, some of which I invented - like the calculation cache. I got an A for that work ;-)

So, if you like this area, like I do, have a look at blender and you'll be amazed. But be warned: its engine is far more complex then the one I developed so don't expect fast rendering times. In fact, if you abuse and start adding things like fur to surfaces you're in for a good minutes of rendering time, before seeing the end result...


Maven and TestNG

Yesterday, while browsing through the World Wide Web, I read a couple of articles. The first one talked about Maven. The second one talked about The Top 12 Productivity Killers in Development Methodologies. I was captivated by Maven and intrigued by the second that I decided to blog about Maven and TestNG.

What is Maven? Well, I can quote what is written on its web site:
Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.
What does this mean? Well, it means that you declare your projects dependencies and Maven will take care of all the work, even if it involves downloading the dependencies from the Web.

Although this might seem a simple functionality, if you ever worked with huge projects, specially if they are component oriented projects, you can see the benefit. Imagine that you have a tool that automatically handles your dependencies, builds them, ensures that no dependency is built twice and has all the phases that you need, that is, compilation, testing, packaging, reporting and, for those that go the extra mile, source code generation, etc., etc.

Imagine Ant on steroids: you have a real tool that manages projects described as an XML file, unlike Ant where the goal is to have a build file that is an XML file. The potentialities are even greater then with Ant. I'm saying this and I had to develop a component building system on top of Ant that handled dependencies, ensure that components were built only once, ran unit tests, build test and coverage reports, etc., etc. This was hard, it even has some python scripts in it. With Maven this would be a lot easier.

But lets put Maven at the side for a moment and talk about the other article: the one about The 12 Productivity Killers in a Development Environment. Many of these killers hit the Development Environment in my company so there was nothing new for me on those issues, but there was one strategy that I wasn't aware of. Fact 6 on Page 2 of the article mentioned the idea of having several testing layers.

The idea is to have several defense strategies that warn you the soonest possible of any issue in your project. This can be way before anyone actually testing it for real. Here the TestNG software comes in. The TestNG is like an extended version of JUnit. Amongst many other features it allows you to define a category for your test. This way your unit tests may categories such as: consistency tests (that verify that the component works well on its on), integration tests (that checks that multiple components work well together), system tests (that verify that the system is working well with all components together), functional tests and so on. Or you can separate the tests in fast and slow tests, running the fast ones first to ensure that the production stops on a killer issue. You can even have a category called "Regression Tests" that are ran always as last to ensure that no bug is resurrected.

The problem with any new Methodology is the usual Aversion to Change you find when you propose it. It seems that everybody has been doing it the old way for too long and they don't want to learn a new way. Facts are that as a team grows its methodologies and the way work is carried out needs to be adjusted and sometimes new methodologies are in order.

For instance, where I work we used to be 3 programmers in the team. With a low number of programmers source code access isn't a problem. In fact, if the programmers have some sense you won't get into problems. Now we are almost 10 programmers. What happens? Well, if you are in a project that has multiple versions on the field that need to be supported and you need to make patches for, with also multiple new versions and customer dedicated projects with different features in development... Well, if you don't have a tight control over what gets into a release you are in serious trouble. What could happen? Well, you might need to release a patch on a certain branch, but someone has already checked in some changes in that branch that shouldn't go in the patch. At the same time the changes in the branch should continuously be merged to another branch where development of the future versions is taking place. This is hard to do, specially if you don't control the access to the source code!

I believe a better way is to have several branches for development of new features or bug corrections and a main branch to be used to build deliveries. The idea is that every time you make a delivery you create a branch that will be used to build patches of that version. Over that branch, other branches will be created for the developers to use when correcting bugs or adding features. Depending on the project's plan, when the time comes to make a new delivery, it is a matter of merging all the branches of the features and/or bug corrections to include into the branch that is being used for the new delivery, be it the branch to produce a patch or a new version of the product. This not only tightens the control of the source code but it also allows you to know what exactly changed between one version and another. This information is extremely important for the testing teem: it allows them to know what features or components changed and need to be tested in more detail.

This, I believe, should lead to more quality control in a Software Development Project. But to make it clearer I would probably do better in writing an article about it...


Programmers Block...

I have always been a programmer. I started programming in BASIC with the ZX Spectrum. Incredibly as it might sound I even wrote a game for that computer. Over the years things evolved and know I would like to say that I use the language that serves best the needs at hand, but facts are that I do most things in Java. That is the language that I use at work. At home, for my pet projects, I choose language and it goes from C to Java. Lately I've been looking a Python and Ruby, but I haven't really tried them out.

At work I have evolved to what I call a "Word Programmer". What is a "Word Programmer"? Well, it is someone that makes highly detailed specifications that others follow when programming. I call it "Word Programmer" because "Word" is the name of the Text Editor that the company I work for forces me to use. The idea is to develop software from very high-level languages: English and UML (Unified Modeling Language). It is an interesting work since you get to develop something that the University doesn't teach: Soft Skills. I say this because the compilers that actually turn the source code I write into an executable program are the programmers of the team. Each one with their own personality and experience.

One of the things I learned after all these years as a programmer is that sometimes you reach what I like to tall "Programmers Block". Like it happens with writers that are with Writer's Block, sometimes I simply can write a single line of code. No matter how long I stare at the editor no single line comes out. It seems that my "Over Engineering" neuron is firing all the time and everything seems to complicated. End result: no source code comes out. But then something clicks, the neuron stops firing and source code starts to poor out as usual. I just have to wait for a while.

Has this haver happened to you? Because I believe this is another proof that developing software is just another form of art. If only my bosses figured this out and stopped thinking that the programmer is like a factory worker that consistently delivers 15k lines of source code per day...


My Shared Links..

I don't know about you, but I read a lot of RSS Feeds on a daily basis. I use Google Reader for this but recently I found out that it allows me to create a list of shared items. I found the idea interesting so I'll start trying to use it. The idea is simple: if I find a post, news, article or whatever on the web that I find interesting or funny enough I'll add it to my shared items. These will be available in this page (you can also find a permanent link on the right side of the blog, under My Links and it is called "Interesting Links").

This way you can keep track of what I find interesting, but be warned that you will get a "Filtered" version of what I find in the RSS Feeds I read that is interesting. You may not like it, but you won't know until you give it a try!

Writing a Thesis... a Revelation!

Writing a Thesis is turning out to be a worthy challenge. It is like writing a book! You have to make it fluent and coherent from start to finish, it has to be well written and an enjoyable reading. On top of all this you have to be talking about things that are complex, new and hard to understand. Its like mixing water with oil: the two don't get along and even if try really hard to mix them they won't stay together for too long.

I haven't written a single sentence in my Thesis for a long time. You see, the only things I have to do to finish it are: write the Thesis, deliver it and defend it. It seems simple but I'm finding it hard to focus on the task at hand: writing it!

I always wanted to write some articles or even a book, but if I can't write the Thesis it is going to be hard. I also believe that writing articles or books can be a lot easier then writing the Thesis because I'm writing a text that should teach or help someone grasp a concept. In the Thesis I'm explaining new concepts to those that already understand the old ones.

Strange, now that I have written this it seems that I can write the Thesis like if it was a book that is introducing a new idea to someone who doesn't know anything about it. Strange: it seems that by writing about the problem a solution has presented itself. Its like when: your way to deep in code that you can't see the bug; you ask someone for their help and when you just started explaining what the code does you find the bug.


To Hack or not to Hack?

I 've been looking at existing bugs in GNome's Bugzilla. I was amazed to see that there are several bugs related to showing Album Covers in Rhythmbox. I'm starting to think: "Is it worth to make a patch to show the art embedded in MP3 Files?". A fact is that GStreamer supports it, but the latest version of Rhythmbox from SVN doesn't. It is also a fact that there are already bugs that are addressing the issue and even using a Metadata extension in Rhythmbox to show the Album Cover in the notification message. My efforts might be a little late, that is, if they show it in the tray icon then it is a lot easier to add support for embedded images.

My Conclusion: I went over my head in trying to make a patch for something that it seems others are working on, or at least on parts of. There is already a Bug that handles showing the Cover Art in the notification area. The changes proposed in this bug have been committed so I'll check what they have been doing. If I can find a way to plug in the cover art without having to change many things it would be great. Facts are that I will have to upgrade the GStreamer version on my stable machine to an unstable one to develop this patch...


Hacking Problems...

Today I started hacking Rhythmbox. Things aren't going so well. I expected to be able to quickly hack the new functionality into it but I ran into problems. You see, although Gentoo (my Linux distribution of choice) has GStreamer 0.10.8 marked as stable, which is the GStreamer version that includes the new GST_TAG_IMAGE that I need to show the pictures embedded within the MP3 files, it has the base plug-ins of GStreamer that still don't provide this tag when the ID3 tag on the MP3 file has an image.

I still have to think weather I attempt an upgrade, with all the risks it involves, or weather I simply give up on trying to make a patch for this. It seems to be rather simple after having GStreamer obtaining the image data: I'll use the GDK-Pixbuf library to turn it into something that can be used by the Album Cover plug-in of Rhythmbox to convince it to show the embedded picture. Guess it will take more hacking to get it done, but I don't want to give up just yet.


Hacking GNOME

Have you have contributed to an Open Source project? Well, I have and it was so long ago that I can't remember. Although I have been using GNU/Linux on my laptop since the day I bought it, I have never really used it to contribute anything. The last time I contributed was when I was in the University. I don't think it makes sense to use something that is really free and only give back to the community more "Requests for Improvements".

I use the GNOME Desktop. Why? Well, I like the way it looks, the way it feels and its User Interface philosophy. But I don't want to get drawn into one of those Desktop Environment discussions about the advantages or disadvantages of each Desktop Environment. That's not the goal.

What's the goal? Well, there is one functionality that I've really been missing in Rhythmbox. What is Rhythmbox? Well, a media player and organizer for the GNOME Desktop, that takes its inspiration from several tools. The functionality that I miss the most is the ability to use the Cover Art embedded in the MP3 files.

You see, MP3 files can be tagged using ID3. And in the latest versions of ID3 there is support to include the album art, among other images. Where is this used? Well, some MP3 players show it in their color screens and it makes them more appealing to the eyes.

Rhythmbox currently fetches the cover art from the web. I want to change it to use the art found in the file. If the file hasn't any image then the World Wide Web is consulted.

It turns out that there is already a feature request on GNOME's Bugzilla for this issue. I saw that it was stopped for a long time, looked at what it implied (yes, I actually checked the source code) and I decided to give it a try. Let's see what happens since it has been some time since I try to do anything in C. I've been working with Java like since I left from the University and I've also used some C++ for my Thesis. But this one will be in C, and Python??? I just checked out the SVN version, since the GNOME project just moved from CVS to Subversion recently, and the plug-in is written in Python... Things keep getting more interesting!


Time for Some Swimming

As I already mentioned, I'm a little overweighted. As part of the New Year's Resolution to live my life to its fullest I have decided to start Swimming. By this I mean to start doing some one hour sessions in a swimming pool. Although during the first sessions... well, probably the first month, I won't be able to swim for an entire our it should be a good way to: burn some calories; discharge some stress and get into shape.

Why Swimming? Well, I used to be in the pre-competition in in this area. What does this mean? I used to do something like 200 swimming pools in one hour in all sorts of styles and I would do it three times a week. Since I left it I have never been in shape like back then. At that time I could do whatever for no matter how long and I would feel tired - unless I really pushed to the limit for too long. Now I loose part of my breath one I walk up 5 flights of stairs. I think it is a sign that I need to get into shape.

Now I only have to choose a pool and a schedule in which I still have some time to sleep...


Wearing Glasses

Today is my first day as someone who has to use glasses to work. In fact, this is my first Computer Session in which I'm using glasses. How do they feel? Strange and distracting. I hope this feeling of something in the corner of my eyes goes ahead really fast.

On top of that my sister just scared me with some interesting questions. For instance: do you feel dizzy or with a need to throw up? That scares me. I though the goal of the glasses was to make one see better and thus feel better, not to make one dizzy!

It will be an interesting times, specially the getting used to put the glasses before starting to work.


Having Full-Text Search Working Properly on JavaHelp

Today I'm posting about technology.

This is a problem that I had to solve at work today. We are using JavaHelp for our On-Line help. Like many other have found issues with the Full Text Search so have we. What's the issue? Well, the selection on the help page is of by a few characters and continuously increases until the end of the page. Near the end of the page the selection of the searched word is completely off (see the issue on the Bug Database, a.k.a. Bug Parade).

This issue doesn't happen with JavaHelp 2.0.4 (fetch it from this page - here is the direct link). But for those of you that can't use it just yet, because of the wonderful tool you are using, there is a simple workaround:
  1. Unpack the HelpSet in trouble to a new folder. For instance, if the HelpSet is named help.jar extract it to the folder help);
  2. In that folder there will be a XXX_JavaHelpSearch folder that contains the full text search index. Delete that folder. In our example it will be called help_JavaHelpSearch, very intuitive...
  3. Standing in the extract folder (help in our example), run the jhindexer of the new JavaHelp on all html documents. For instance, if all documents are in the folder docs you just run "jhindexer docs/*.html".
  4. The jhindexer tool creates a JavaHelpSearch folder. Rename it to whatever you found in step 2. For instance, rename it to help_JavaHelpSearch.
  5. Add all the files to a new JAR file without any additional directories. You can do this by standing in the extract folder (help in the example provided) and issuing "jar cfv ../newjar.jar *". After this you have a new HelpSet in the newjar.jar file in which the Full Text Search selects the text properly.
And that is it for the first programming related entry of this blog. Any issue, send a comment.


Cleaning out the Closet...

This weekend has been out of the ordinary. It must have something to do with the fact that I want to do what my heart tells me to do.

I started with a trip to the ophthalmologist (I think that's the work in English for the vision doctor). I had been postponing this trip for a long time and I had been getting some headaches and other symptoms that there was something wrong with my eyesight. Well, it turns out that my left eye is twisted a little relatively to its original position. Reason: too many hours in front of a computer screen. Result: I will start using glasses when working. At least the problem can still be corrected.

My Saturday continue with a global closet cleaning. I'm not talking about cleaning the house, I'm total about a global closet cleaning: when of those cleanings in which you take out everything form your closet, choose the close that still fits you or that you still consider wearing and put out everything that you won't wear. It's amazing what you accumulate in several years: a lot of clothes and some of which I haven't dressed once!

Sunday started with church school. I'm Christian and I teach small children at the church. I don't know how to pronounce it in English, when I found out I'll tell it. But things aren't going so great because people are fleeing from the church. Why? Unfortunately one of the may reasons is the Preacher, but that is a story I don't want to get into for now.

But Sunday isn't going all that will also for other reasons. It is fact that I'm a little overweighted. I need to loose some weight. I really do. It would be great not only for my health but also for my ego. This has turned into a battle in which there is my weight and everyone in my family in one side and me on the other side, trying to keep my temper. I need to learn how to control my temper even if everybody has decided to make their top priority to bug me for whatever reason.

I don't know what is wrong with me but recently I burst whenever I'm pushed and for whatever reason. And didn't use to be like this and I need to find that piece of mind once again. Things are getting so critical that I'm even considering the chance of leaving my family and finding myself a new house away from all the pressure that my family is placing on me. Most times I just want to take my car and run away from all the problems, pressures, critiques and comments.

The point is that even if I run away from all this they won't get solved. I need to attack the problems head on and solve them. I have to do this in order to end my Thesis, to get into shape and to live a better life. If in this process there are others that, even if they believe they are helping, are simply just making matters worst, I simply have to put some distance between me and them. I'm not talking about physical distance, but about ignoring their remarks no matter how offending they are and avoid depending on them to make activities that I enjoy.

I believe they we all need some hours every day or every week to do what you like the most, or simply to feel good about doing something. During those hours we shouldn't have to put up with bosses, problems at work, problems at the university, problems at home or remarks from .... well, I won't go there.

The hard part about all this is that as I'm writing this I keep getting this feeling in the back of my head that I'm being selfish. As I grow older I'm starting to believe that although we are in this world to help others and to try to make a different we also have to be a little selfish if we want to accomplish some of our dreams. Unfortunately it seems that I have always put the wellbeing of others above my wellbeing, my life and my health. I won't do this anymore.


Making Life Changing Decisions

You probably noticed that this blog has been dead for quite some time. Too many things are happening at the same time that I'm have a hard time keeping track of them all. I don't want to make a full summary of all the items on my think list, but I'll give you a glimpse.


First things first: I need to get into shape. I have been postponing this item for way too long. I should I put this... Well, in my youth I was a true sports freak. I was involved in many sports some of which at the exact same time. I did swimming, water polo, tennis, biking and handball. Not to mention all the other smaller things. I even reached the pre-competition series in swimming, that is, the next step would be to train every single day and join competitions. In handball I was federated, that is, I actually participated in the Regional Championship. But I had to give all that up to study.

Please don't get me wrong! I don't regret making the decision of giving all that up. I'm happy with what I do. I have the possibility to do what I like every single day, although that is changing a little. But that is another topic.

So, what should I do? Well, I will start doing some sport and dancing. You're probably wondering "Why Dancing"? Well, it is like a sport and I get to learn something that I have always wanted to learn. At the same time I get to meet new people. For sports I'll go back to swimming. I think it is one of the most complete sports. I don't know if I'll go for a Gym like everyone goes, but I'll probably start swimming right away. For the dance part, I'll go with my sister as partner.


I'm making a Master Thesis. Well, I guess I am. I say this because it has been too long since I actually written a sentence in the Thesis. I need to end the Thesis. It will probably be a rage weekend but I'll get it out of my system.


We have a saying in Portugal when we want to emphasise when thing are getting really bad. It goes like this: "Vai de mal a Pior". In English it is something like "It goes from bad to worst". And believe me, that is how things are at work.

There many things that contribute for this. The first thing is that the division is moving to something like 100Km away from its current location. When your workplace moves this distance you start to make some operations in your head: how more will you spend to get to work it terms of time and money; if you are willing to move to somewhere nearer; if things will get any better there and so on.

With the change the company has decided to hire people that are willing to move to the new location or that already live in its surroundings. They have been doing this for over a year now. But this was a strategy that I didn't saw at first. Their goal is not to reduce the burden on the already overloaded workers that we are. Their goal is to get people in that will absorb the knowledge and tasks of those that don't see them moving to the new location. Recently this has gotten so visible that all the old people are seeing it.

Don't get me wrong, this is a viable strategy on their part. It is a strategy that I don't agree with, but it is a viable strategy. But they have a flaw in its implementation. The oldest people are the most experienced ones and the ones that know the core parts of the system. To replace them you need at least people with almost the same level of experience in the technologies involved. Their flaw is that they are hiring the cheapest resources, people without any experience or basic training or knowledge needed to perform the task.

What I see happening is that the projects won't meet the delivery dates. Why do I say this? Well, simple: the delivery dates are after the move. If the older workers leave the new ones will have to take care of business. The new ones will eventually get things done, but the time they will take to get things done will be greater and there goes the delivery date.

You are probably thinking: "hey, get a grip, everybody is replaceable". Well, I agree with that sentence. It is true that everybody is replaceable. But it is also true that everybody is different and that there are people who are more creative and more experienced than others. What will happen is that something that those creative and experienced people would do in 2 months and that the client would live ends up being developed in 6 or more months and the client will hate it. It is a simple fact that the longer you work on a project and if you are a open minded person, you will get a deeper understanding of the users and their expectations. This is particularly true if you have real contact with the users and you see them using the product and explaining what they want. This is a type of knowledge that can be taught: it must be learnt by trial and error.

On top off all this the group spirit that made me get out of the bed everyday is almost gone. We work to accomplish the dead-lines that are just around the corner, in a group were almost everybody is working without any motivation and some have their own personal agenda.

I still don't know how I will proceed on this issue. Part of me wants to get out before I loose my mind. Part of me wants to say and grab the compensation for being dismissed. Part of me just wants to forget all about these issues, be professional, get the work done and don't let this get into my system. There is also a part of me that would love to get to work and say: "Bye, bye, I'm out of here", in a more lyrical way and in the faces of the bosses.

For now it seems that I will simply train myself to get this out of my system. I'll try to live more my life so that work is just something I do to get paid and something that I'll always do to the best of my abilities.

Know What?

Well, with all these items on the back of my head I have to make some resolutions. I have to give priorities to things and try to enjoy life. I have wasted a lot of time thinking about this issues and just cruising through life like it was passing by me. So, I guess this is my New Year's Resolution: to live my life to its fullest.

What's your resolution?