Category Archives: Software

Chrome First Impressions

Sometimes, using Windows does have its advantages. For instance, not having to wait before I could try Chrome. I didn’t get to be excited about software releases since I switched to mostly using Windows again, so this is a very nice change of pace. And who would have thought, that out of nothing a new web browser would appear, that actually does make a difference.

Even the installation made a nice impression, effortlessly importing my Firefox settings (for once this is not a mess) and even asking me if I would like to switch the default Google search to something else (nice touch).

The interface is definitely one of the slickest I have seen in a while, and one of the most consequent applications of the “less is more” mantra. There is not much, but what is there feels insanely smooth and polished. The titlebar is particularly elegant, with the integrated tabs. In fullscreen, the titlebar collapses and the tabs touch the screen edge, creating an OS-X menu-like effect with Fitt’s law benefits. Mostly it’s about the little touches though, like instant bookmark saving, being able to open the first autocomplete entry without scrolling down, not getting the dropdown cluttered with huge URLs I never typed in the first place. The homepage does not feel like a useless gimmick, but actually fits very well into the overall design. All in all it feels like an extremely well designed piece of software.

Equally impressive however has been the speed. It is hard to believe how light the application feels, and everything from starting the browser, over switching tabs, to loading pages feels perfectly responsive. This honestly beats every text editor I currently have installed (with the possible exception of Notepad), and it’s a bit of a mystery to me how this is even possible. Certainly WebKit has a large part in it.

Speaking of WebKit, it has turned into a very impressive engine. Not long ago I didn’t expect that it would ever get close to Gecko before Gecko would close the performance gap, but now I believe that I was probably wrong. Every time I tested WebKit recently it has impressed me with its accuracy on even the most complicated sites (and sites which I never tested for it), while still being lightning fast. Add to this advanced features like multiple CSS backgrounds or rounded borders (I have to say though, that the latter look much smoother in Firefox 3), and I got very interested in seriously trying a WebKit based browser. Now with Chrome I am certain that WebKit will establish itself as a serious alternative to Gecko, and I’m curious to see how this will play out. Mozilla might have to kick in a gear if they intend to keep the lead. 🙂

So far I am very impressed, even more so than I expected to be impressed, and unless further testing reveals some glaring deficits, I am very certain that Chrome will be a big hit (hopefully not just eating from Firefox marketshare, but also from Microsoft). This is the first time I have been so excited about a browser since the first releases of Phoenix Firebird Firefox.

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).