Updates

It has been a while since my last blog entry, so it is probably about time that I provide some updates. I have not done a lot of programming lately and recently I have not even used Linux most of the time, so things are going rather slowly.

Thanks to a patch by Jürg, Scratchpad now compiles again against Vala SVN. Since I don’t have much use for it right now when I don’t use GNOME, help would be much appreciated. I do hope to get back to it sooner or later though, as I still don’t know a real alternative to it.

While looking for a decent text editor for Windows I found e, which has many good ideas. Interestingly a Linux version is planned, but unfortunately it is proprietary.

Meanwhile I got severely addicted to Go and thus I’m afraid Chessmonk development is on hold. Fortunately the first (and only) release was already very usable as a PGN viewer, so I hope it will be of use to some people. Feel free to use any of the code or graphics in your own projects.

There has been no progress on the Lua Gtk Theme Engine either, it is still in the state of basically usable, with a few crucial details missing. It is unlikely that I will find the time and motivation to finish this unless I get a sudden urge to create a new Gtk theme, so if anyone would like to continue it, let me know.

A for myself, I realized that I enjoy design more than programming after all and intend to make a more serious attempt to get into web design, especially the visual side of it. For now I want to gain experience and build a portfolio, so please let me know if anyone needs a website done.

Hopefully I will have something to show again the next time a post is overdue. :)

Updates

Lua Gtk Engine

I’ve been working on a Lua based scripting engine for Gtk themes. Right now it isn’t really useful without example themes and documentation, so I will write more about it later. If you want to try it anyway, get gtk-engines from CVS and configure with –enable-lua. It still needs some work, many widgets aren’t supported yet.

For the API I’ve tried to find a middleground between flexibility and simplicity. It is based on simple drawing functions with parameters, for example: rectangle {x=0, y=0, width=200, height=200, radius=3, filled=true, color={1, 0, 0}}. Most parameters are optional. It is possible to specify both colours and gradients (linear and radial) with arbitrary colour stops. The nice thing about passing parameters like this is that you can store and modify them in a Lua table, for example:

myrect = { x=0, y=0, width=200, height=200 }
myrect.color = {1, 0, 0}
rectangle (myrect)

There is also a shape () function which takes an arbitrary number of normal and bezier points to create any shape you want. A screenshot that shows most of the current widget coverage:

Lua Engine

Writing themes like this is a lot more fun, especially since you don’t need a recompile and restart anymore before you can try your changes. But most importantly users will be able to install Lua themes like any other theme via drag and drop, instead of having to install a new engine, just because they prefer their Clearlooks to have square corners… Performance seems to be completely acceptable so far. The difference is measurable, but almost neglectable compared to the actual drawing times. Lua is a scripting language that was developed with speed and size in mind, so it adds minimal overhead.

Chessmonk

For chessmonk, I decided to split up the chess board part into a separate package. Not just the display but also any chess logic will be contained in this package, so it will become easier to create different board window types. I got this idea when reading about a software called Chess Position Trainer, which is based on a similar chess board widget. This still needs a lot of work and isn’t functional yet, but if you are curious you can find it in the gtkboardview branch of the Subversion repository.

Chess Tournament

I didn’t dare blog about this before, because I assumed it must bring bad luck. ;) I recently played a seven round swiss tournament in Krefeld and surprisingly was able to reach fourth place with a performance of over 2100 (Final Standings).

In the last round I had white against the third seed of the tournament (2060 DWZ). I didn’t really expect to win this game and reach the price ranks, but then it even became a nice miniature after my opponent made a mistake soon after the opening moves:

1.d4 g6 2.c4 Bg7 3.Nc3 d6 4.e4 Nf6 5.Nf3 O-O 6.Be2 e5 7.O-O Nc6 8.d5 Ne7 9.a4 a5 10.b3 Nd7 11.Ba3 h6 12.Ne1 f5 13.f3 b6 14.Nd3 Nf6 15.b4 axb4 16.Bxb4 Nh5 17.a5 c5 18.dxc6 bxa5? 19.Nb5 Be6? 20.c7 Qd7 21.Bxd6 Bxc4 22.Nxe5 1-0

Scratchpad meets Vala

Scratchpad 0.3.0 is out.

I am very happy with this release, it is a lot faster and a much better codebase. Basically everything has been cleaned up a little. I will now try to release bugfixes more often and focus on getting the project interface done. Changes since 0.2:

New Features:
- Complete port/rewrite to Vala, Scratchpad now runs (flys) natively!
- Tag-based replace mechanism.
- Use GUniqueApp for single instance behaviour, so startup notification
and focus stealing should work better now.

Removed Features:
- No more GnomeVFS, waiting for GVFS!
- Revisions. Wasn’t happy with them, to be reconsidered.
- Autosave and save options. Now defaults to save on focus out (saving
your laptop batteries).
- Tools menu.

Bugfixes:
- It’s practically a rewrite, so all bugs should be brand new!
- Icon sucks less.

Known Problems:
- Font changes won’t take effect immediately.

Tag-based Replacing

I have never been happy with replace dialogs in text editors, so when I was about to re-implement this feature in Scratchpad for Vala, I decided to try something different. Instead of going to a dialog, you replace text by first “tagging” some parts of text and then entering the replace string. Aside from getting rid of one annoying dialog, this approach is also more flexible (you can add and remove tags at will) and reassuring (you never have to guess what will happen). Aside from tagging the current selection (ctrl+t), you can also tag all recent search results (shift+ctrl+f) or tag a selection and jump to the next occurance in one step (ctrl+g). I’ve made a short screencast to demonstrate this:

Tag-based Replacing Screencast

This was the last missing feature I wanted to implement after the port to Vala, so you can expect a release of the native Scratchpad version any day now. It’s mighty fast. :-)

Made in Switzerland

I’ve recently stumbled across two very interesting but not (yet) well known projects:

Vala

Vala is a “compiler for the GObject type system”. The great thing about it is that it provides a modern, C#-like language but does not require the overhead of a virtual machine or interpreter. Of course you can also use libraries created with Vala from other programs created with C or any of the bindings, which makes it a possible choice for platform development.

Despite being a very young project it already works extremely well and the developers are very responsive. I am very excited about this project because it has the potential to make low-level GNOME development a lot less scary for newcomers and more productive for everyone. I am already porting Scratchpad to Vala, which means that the next release will likely be completely native and as fast and lightweight as it looks. :-)

Paldo

Paldo is a relatively new distribution created by the same two swiss students who created Vala. Like Ubuntu it is GNOME centric, follows the “just-works” philosophy and usually provides only one application per task. Unlike Ubuntu it does not make any changes to upstream when possible and is a lot more simplistic. The package manager (Upkg) is running on Mono and serves binaries by default, while essentially being source based. Package specifications are as simple as one could imagine, so adding your own custom packages is a piece of cake. It basically just involves writing down the commands required for compilation and installation and (optionally) listing some deps. Even listing the deps is simple, because Paldo keeps packages together (so headers are always installed for example) and does not use dependency version numbers (other than interface version which is part of the package name of course). So far it appears very developer-friendly to me, so I would recommend it to advanced users looking for a simple and lightweight GNOME-centric distribution that just works.

Chessmonk goes Cairo

I rewrote the board view widget to get rid of the dependency on GnomeCanvas, now it only uses GtkDrawingArea and Cairo. In the process I “cleaned up” the animation code by making it automatically figure out all required animations between two positions and added piece fading and (optional) coordinates for good measure. Here is a little screencast showing it in action, of course being a gif it is not of high quality:
Board Widget Screencast

Scratchpad 0.2

This is actually a very old tarball, I never quite finished it to the point that I was happy with a new release. But since the old version is not available anymore and the next version with the project interface is quite a while off, I decided to release this now.

http://www.chorse.org/stuff/scratchpad/scratchpad-0.2.tar.gz

Scratchpad

Revision Browser

Scratchpad is a spatial text editor using Gtk#. It features a revision browser and real autosaving. In true spatial philosophy, it is not possible to create a new document from inside a scratchpad window, instead you will have to create a new document using your file manager and then open it. Other useful features in this release are a type-ahead search bar (which is quite common these days), intelligent wordwrap defaults and some advanced keyboard shortcuts, including ctrl+enter to create a new line and ctrl+C, ctrl+V and ctrl+X will act on the current line when no text is selected. That makes shuffling of lines very comfortable without having to learn any new key bindings. I intend to add a lot more features to make Scratchpad as convenient and efficient as possible for developers.

Notes for this release: You will need Gtk# and all that stuff, also the Mono bindings for dbus and gtk-sourceview. gconf apparently has to be killed once after installation…

Chessmonk 0.1

Now that Chessmonk is actually very usable as a pretty PGN viewer, I decided to make a release with the intention to generate some feedback.

Get it here:

http://www.chorse.org/stuff/chessmonk/ (hosted by Patrick Schnorbus)

Requirements:

You’ll need recent PyGtk and gnome-python libraries. It also uses GnomeCanvas. Gentoo users, make sure you have the SVG loader for libpixbuf installed. :)

Screenshot (click for larger size):

Chessmonk 0.1

Mirage, Chessmonk Progress

Meanwhile I released a new theme and created a project page for Chessmonk on Google hosting, so it now has a SVN repository. If you are looking for a pretty PGN viewer, I strongly suggest you give it a try.

I’m not sure yet whether I will release 0.1 once I took care of the remaining quirks, or if I wait until it has a wider set of features.

Edit: Fixed the links, sorry!

On The Future Of Chessmonk

While I’m mostly doing polishing work (preparing for a first release), I’m getting a better idea about what I ultimately want to accomplish with the Chessmonk GUI. I intend to support the following tasks:

  • Viewing Chessgames - The most simple use-case, which is very straight forward. Opening and viewing PGN files already works. I also intend to add database queries in the future, so you can view a subset of your large reference database.
  • Analysing - Features I intend to add for this task are a free analysis mode, chess engine evaluation and positional database queries (like scid’s tree view).
  • Editing - The ability to enter new moves, variations, comments, etc. Also to save a modified PGN file or to import games into a database.
  • Book and Repertoire - Although I never used it, I very much like the simple philosophy of Bookup. It should be possible to manually evaluate a position in the database and use these evaluations in the positional database reference view. Especially when using back-solving (basically figuring out what’s the best evaluation when both sides play the best moves), this can be a lot more helpful than simple result statistics. Additionally I want to allow the user to flag every position as belonging to his opening repertoire, so the program can mark all games which involve any of these positions and novelties played in lines from the opening repertoire.

So as you can tell, I plan to add complete database support, but in a manner that does not take away from the current simplicity of the interface. I will most likely go for a relational database like PostgreSQL, which would make it easy to add online databases.

All this might sound a little over-ambitious for now, but the good thing is that I can approach one step after another, without being forced to ever complete them all. I still would like to invite additional comments from other chess players who use chess database software (not chess clients).