Code reading and Bug fixing 101

Summer is here, and Google Summer of Code is on its way. The biggest hurdle new contributors often face (after compiling trunk ;)) is to get their head around the project they would like to work on, understanding how it works, where the parts fit in, and how to fix bugs or make improvements. Speaking from my experience, it took me the better part of a month to understand how KWin worked before I could actually hack on it for Season on KDE.

Knocked out of Node Knockout

(This is one of those you-don’t-really-have-to-read-it kind of posts) I was very excited about Node Knockout. I had a great idea for an IRC bouncer + websocket based client called Ircsome using node, qooxdoo and a couple of other things. I knew that I would only get 24 hours since Sunday had higher priority events, but I believed I could get the basic app working in 24 hours. Until things went downhill from last week.

KWin tiling is merged

I'm glad to announce that yesterday the kwin-tiling branch was merged into kwin trunk by commit 1118677!. It will be available in KDE SC 4.5. Please keep in mind that it is an experimental feature with rough edges. Bug fixes are already on the way, but some things, like session saving and so on are absent. Please do add feature requests and bugs to the KDE bug tracker. This screencast should show off a few things.

Quick and dirty Instant Messaging with Redis

(Aside: Yes this is a post after a zillion years, but I have a few more lined up, and waiting for some important stuff in about a week) Redis is a wicked cool NoSQL database, in that storing stuff is not the only thing that it does. Mathias Meyer already has a collection of Redis use cases, but this great idea is mine. Like all good ideas it emerged in the shower :) ( I was not aware of Pieter Noordhuis' MUC when I did this, in either case mine deals with one-to-one IM )

Automatic builds with some inotify magic

The inotify feature in the linux kernel allows you to receive events about changed files. Using pyinotify, here is a simple script to watch for changes to source code and run "make". Everything is hard coded right now, and since I was using CMake with out-of-source builds, the directory structure is that way. It also uses the command line notify-send tool to display notifications. Perhaps some day I will make it configurable and more useful.

KWin preliminary tiling

Yesterday I committed code which adds a semblance of tiling to kwin. Every time you launch a window, it will be maximized vertically, but each window shares the width of the screen equally. You can check out code from KDE svn. The location is /home/kde/branches/work/kwin-tiling/ You'll need to edit $KDEDIR/share/config/kwinrc and set Placement=Tiling. Then you are ready to go. Right now there are no configuration options, no key bindings, nothing!

Reworked Graffiti's first render

After quite a few weeks of work, Graffiti has (again) reached the stage where it can render it's first words. It's now at 488 lines of code, of which the CSS related stuff itself comes in at 288 lines! There is no word wrapping yet, or any layout logic. I've been busy fixing quite a few bugs in the CSS overlays and so on. This is how you would use it.

opensocial recent tracks

After two days of OpenSocial hacking, here is my app, which fetches the users Recent tracks and displays it on the profile. Now since there is no way to directly fetch the username, I had to resort to asking the user. Also 1.0 although usable has a few errors which aren't handled smoothly. But they do not pose security risks. For now its in the sandbox, if you have access you can view it here Last.

Stop coding already

I am sorry to say this to myself, and it is a sad way to end the year, but I've to give up on decent projects for a few months. The next few months are 'while true: study' months for 12th standard students, since the exams supposedly decide your life. Which means most of the time my mind is just looking forward to not thinking and unfortunately programming is thinking, even if it is fun.

No, my code is not stagnating

Though it does seem like that, since I haven't posted about any development in weeks. I've been working on a game in C++/SDL and its taking some time since this is the first time I'm building something with levels and passcodes and stuff. It's not going to be anything extraordinary, but it will take about 2 weeks more.

Tetrablocks and Login Win32 versions

I forgot to post this but Windows executables of both Tetrablocks and Login have been uploaded to 22bits. Compiling them on Windows was a bit of a nightmare. Tetrablocks has got all of its text drawing code removed since I couldn't get SDL_ttf to link. So you won't see the score or the game over message when playing it on Windows.

ColourCode: 1.0 Released

I'm quite pleased to announce the release of version 1.0 of ColourCode. You can download and know more about it from the ColourCode homepage. Please leave your feedback and bugs in the comments

ColourCode: Some thoughts about the future

Before I write about the possible future of ColourCode, let me get a few things out of the way. First today I fixed an extensionless file bug, and you can now force languages in ColourCode. Now that thats out of the way, I was just thinking about how much interest I still have in ColourCode. I mean writing it was a lot of fun and gave me some new insights into design but I don't feel the same interest I had in parsing and analysing language files, that I had when I began ColourCode.

ColourCode: 1.0 almost done

ColourCode is done. It now has support for PHP and HTML which it didn't have before. Perl support will probably get in before the stable release. This version has been bumped to 1.0. I think I've made a really good project and that it deserves the 1.0 tag. PDF support will not enter the 1.0 release but is on track for 1.1. All that is left now is testing some highly tweaked files.


Language support ColourCode now has support for C# and Javascript, completing support for the original language set. I'l be adding Perl and HTML soon enough. Bugs On the C based languages front there is a small logic error in the multiline comment system. I am currently trying to iron it out. Snippet feature dropped I've decided to drop the snippet feature since its not universal (doesn't make sense in PDF) and since CSS is now dynamically generated, giving the CSS data to the user and having him embed it will be quite annoying.

ColourCode: Almost done

In the last two days ColourCode has reached a stage where I can say that it is finally ready for release. Everything apart from implementing language handlers is done. PDF support might not be added. It all depends on how patient I am in releasing it. Meanwhile you can download a nightly build and view demos for Ruby and Python from the link above.

ColourCode: Making progress

ColourCode has been getting along quite well for the last week. I now firmly have the basic design for my plans in working code. The language parser and handlers are coordinating well and this might just be one of the best designs I've ever envisioned. Once the main program is in place writing language handlers and formatters for ColourCode will be really easy. At this stage only the Ruby language handler is complete, and until I can make it work perfectly for a large amount of code, no other handlers are expected.

ColourCode: New ideas and old improvements

Now that TetraBlocks is done, its time to start working on the latest and greatest ColourCode release ever. Though the next version should be called 0.3, I might bump it up a few notches if everything works out as planned. One of the major things I've been planning is to implement the Language Descriptors in Ruby itself rather than text files or XML. This would allow them to be more context sensitive and basically do more stuff to improve highlighting.

TetraBlocks: It is done

To much applause and enthusiasm (atleast by one guy) TetraBlocks is released to the world. Probably the millionth clone of Tetris, you can proudly claim your own version at the Tetrablocks page. Only available as a source archive for now, a windows executable is in the works

TetraBlocks:The finishing run

After having dumped the initial TetraBlocks code, the new version is coming along quite well and has proceeded especially well for the last few days. The few things left involve the deletion of lines and score keeping and putting a cap on the height. I've decided to do away with the menu and highscores system since it added for excess complexity. Here is a screenshot of the latest developments.

TetraBlocks: on freeze

TetraBlocks has been put of freeze for a few days. I've got pieces rotating and stuff, but thats it for now. Right now its time to concentrate on more generic issues like writing a small highscore and menu framework, because I know that these two things are necessary in almost any game you will ever create. So if I can get those two things done, it will save me a lot of time.


...or why I never maintain my old programs much. The reason I create some software, fix a few bugs, do a few minor version upgrades and then let it be, until someone really needs something is because, well, I like to do a lot of different projects in different fields. Now it so happens that I am still in school, now going to standard 12, which in India means bad.

Pixelframe: It is DONE!

Pixelframe is ready. You can grab it from . Please report bugs at the Issues page .

Pixelframe: Almost there

So after 3 weeks of development on getting it to work in Internet Explorer, Pixelframe is ready. Testing is almost complete and after wrapping up a few loose ends it will be released. Some of the things remaining are converting PNGs to GIFs since IE has a problem with displaying PNGs, handling an unforeseen theme error, and a few look-n-feel changes. You can check out the almost working version ( uploaded at the time of writing this post ) at http://22bits.

Back in Business

I forgot to post, my computer's back for 2 days now and Pixelframe development is back on track. I have given up on the max-width property in IE, because no matter what expression() I use, it doesn't work. As for the settings page, the style isn't getting applied, but most of the Javascript errors are ironed out. ~2 days left for it to be ready. Need to start writing the themeing docs.

Pixelframe: Getting Closer

Pixelframe is getting closer and closer to finishing, in fact if Internet Explorer stops hiccoughing every now and then it will release on Sunday. Right now I have uploaded version 0.9 since the feature set is complete, only two problems are left. Both unfortunately and logically are due to Internet Explorer IE refuses to show the settings page.There are problems in IE with respect to maximum width.As soon as these are solved Pixelframe will be released.

Pixelframe Preview

As Pixelframe is nearing completion I have uploaded a pre-alpha not as a download but as a demo. Most of the features are complete. The few remaining are sorting out bugs and writing some documentation. To see the demo with two galleries try these links you have comments about improvements, please post them below.

Dynamic delegation in PHP

While working on Pixelframe I devised 2 methods to dynamically delegate tasks to appropriate functions. These methods may already be known and used but these are mine and I thought it would be good to post them. These are particularly useful for handling requests where you call a certain function/script based on one parameter ( say 'action' ) and pass the rest of the parameters to the function /script. So here goes.


Recently I discovered the Trac SCM for project management. And its really great. Especially for lone developer projects. It has a inbuilt server, so know need to configure Apache for mod_python.Good offline documentation embedded within the projectSmall download sizeSimple setup for projectsSVN browsing and good diffsWiki feature allow TODO list maintenanceThe last is particularly useful when you have been storing TODOs in your SVN commits till now :D. So I am using Trac for both ColourCode and my secret project(soon to be revealed), and I am loving it.

Learning the hard way

I have come acrooss some rare occasions in programming in which the language/environment/common sense really wants you to learn after literally breaking you head. Thats what happened today in a javascript app I am doing (Shh! Its still a secret). For 2 days I have been trying to use everything I know to clean up a problem I was having with every node firing the event when only one should've been.

Colourcode 0.2 released

ColourCode 0.2 has been released. In addition to the features mentioned in the previous post it now supports C# and Shellscript and Javascript. Check it out at the ColourCode homepage

Colourcode 0.2 nearing release

I am quite pleased to announce that ColourCode 0.2 on which I have been working for the last week is nearing release. 0.2 has the following features over 0.1 support for multiline comments , also when they are embedded inlineoptionally printing line numbersSupport for quote escapes in strings when a backslash precedes it ATM there are a few bugs Also there will be support for more languages

Game Of Life:LOGIN

I am proud to present my latest creation LOGIN or NIkhil's Game Of Life, my very own Conway's Game of Life simulator. Written in C++ using SDL. I wrote it mainly to learn SDL and because I truely enjoy life. Currently it only runs on Linux. Read the README file in the package for instructions on installation and usage. Here is a nice pic of part of a r-pentomino cycle for your enjoyment:

ColourCode 0.1beta released

I am pleased to announce the release of version 0.1beta of ColourCode. ColourCode is a Ruby program to generate syntax highlighted HTML files. Currently it supports HTML, Java, C++, Ruby and Python. For more information and (not)features see the ColourCode homepage

Initial ColourCode Success

As I mentioned in a previous post, I am working on a Ruby generic syntax highlighter. Well today it had its first measure of success by producing this HTML: It is buggy as can be seen from the mess up near the end, and write now I haven't chosen the best colours nor a complete correct language definition for Ruby or any other language, but the major part is done.