Super-legible Heiti-style Chinese font for Debian GNU/Linux

I’m struggling with those crazy Chinese fonts in Mingti and Kaiti style and couldn’t find a goot Heiti font, but now this page:

http://wiki.debian.org.hk/w/Where_can_I_find_fonts_for_GNU/Linux

Mentions that there is a perfectly fine Heiti-style font available in Debian: ttf-wqy-zenhei. So do this and be happy: apt-get install ttf-wqy-zenhei

Here’s a sort of preview from Wikipedia’s multilingual support page:

The samples above are in Heiti, the ones below in Mingti. Putting it into a screenshot makes it look shitty, so you’ll have to install the font (don’t install any other Chinese fonts!) and look at the page zoomed in to see it really well.

Der Plural von Fotos und der schweizerdeutsche Akkusativ

Weitere Anzeichen für ein Aussterben des Alemannischen, kürzlich gehört:

“Er hät fotos zeigt.”

“Z foti” (das Foto) ist aber eines der Wörter, die den Plural mit -na bzw. -ne bilden: Auf Khûrertütsch “d fotana”, bei den Zürchern “d fotene”.

Stirbt diese Pluralform aus, betrifft das zwar nur ein paar Hundert Wörter, aber eine prägnante Eigenheit unserer Sprache, die sie vom Deutschen unterscheidet.

Im gleichen Zug gehört: “das isch voll für n arsch”. Diesen Spruch so aus dem Deutschen zu holen ist aber Blödsinn, da dem Schweizerdeutschen der Akkusativ fehlt (meist wird der Nominativ zum Ersatz).

Es müsste also heissen: voll für dr arsch.

Ruby Rot: Are your Rails apps stuck without upgrades?

I see this pattern in many projects: Someone has a good idea for a web app and creates it in Rails (2.0, at the time). The development takes some time, the project starts to include a few smaller Rails upgrades, up to perhaps 2.3.11. Rails 3 comes along, but an upgrade to Rails 3 is deemed too expensive right now, so it’s not done.

Rails 3.1 comes along, then Rails 3.2. Even an upgrade between 3.0, 3.1 and 3.2 is quite a lot of work. Upgrading your app straight from 2.3.11 to 3.2 turns into a major undertaking, so this is never planned, it never happens.

You end up with a Rails app eternally stuck at 2.3.11, sysadmins complaining left and right about your lack of Gemfile, your incompatible Ruby version (need to use 1.8.7, which doesn’t even compile properly on modern compilers…), your incompatible RubyGems versions (need to use 1.6.x since 1.8.x and higher breaks many old gems), your incompatible gems (you vendored all those gems? Oh boy.)

In the end you have something like code rot, you have Ruby Rot. No one wants to touch your app anymore. Maybe you’ll rewrite from scratch for Rails 3.2. Either way, you’ve painted yourself into a corner.

What does that teach us? Always upgrade your Rails apps as soon as a new Rails version is out? What is your strategy?

Microsoft reinvents GNOME 2′s UI

Microsoft will remove gradients, reflections, blur and glass effects from Windows’ GUI in Windows 8. That means it’ll probably look like XFCE or GNOME. We have come full circle!

Microsoft added all those effects to Windows Vista, us FOSS nerds copied the effects (and more!) with our compositing managers like Compiz and the new GNOME 3 shell, now Microsoft removes them again — will we follow?

I’m using XFCE anyway, so I’m probably ahead of the current fashion trend :)

The secret to a really productive desktop environment

I recently discovered how to increase your productivity by 300% or more*. I’d like to share this with you, so that when you follow my advice, you can PayPal me €100 for every hour you save.

  1. Buy an SSD. Really, this is important.
  2. Switch to a minimalist desktop environment like XFCE.
  3. Turn off any and all distracting eye candy, transitions and animations.
  4. Replace the slow software you use with faster equivalents.
  5. Enable e-mail notification, but don’t look at the e-mail exactly when it arrives, leave it for a few hours or at least until you’ve finished what you’re working on at the time.

And here’s a screenshot of what that looks like:

I use Terminator instead of gnome-terminal or xfterm so I can look at multiple terminals and multiple tabs at the same time. One terminal has a red background so I immediately know it’s my local root terminal without having to read any titles. This saves me from switching between lots of tabs before finding the right thing.

The desktop environment is XFCE, which is super-fast out of the box, and I’ve set up the bottom panel so that it makes the best use of Fitts’s Law. The panel is 32 pixels tall, the window buttons are nice and big so it’s fast and non-annoying to switch windows. The bottom right has instant messaging, calendar and mailbox notifications and a volume slider — and nothing else! I could even remove the volume.

Also, there is a second monitor to the right of this one showing more stuff, so I can look at what’s really important right now with one glance instead of having to unfocus from the task in front of me.

The mail client is Claws Mail, which is fast as hell and has many time-saving features for hardcore mail users like me.

The web browser is Chromium, which is Chrome without the Google in it. It’s very fast, still faster than Firefox, and more stable IMHO, so that crashed browser sessions don’t lose me any productivity.

With this setup, every response I want from my PC is almost instantaneous. I click check mail, whoosh, there’s the new mail. I ctrl-enter to send an e-mail, fthagn, the window is gone, the mail is sent. No effects, no wobbly windows, no desktop cubes, no sliding shit, stuff just happens super-quickly instead.

The rest is just discipline. Focus on the task at hand and build a desktop environment for yourself that doesn’t distract you. No Twitter, no Facebook, no games, no news, no RSS feeds. Do those in your spare time. I’ll pretty much guarantee you’ll be more productive like this.

Now about that PayPal donation (thanks!):

*YMMV, IANAL.

Avoding “Invalid byte sequence in UTF-8″ with Ruby and CSV files

If you’re running into a ton of problems reading e.g. an ISO-8859-1 encoded CSV file into your (probably UTF-8) Ruby or Rails application, and if the error you get is “Invalid byte sequence in UTF-8″ even though you’re giving CSV.open the correct encoding options, here’s a solution.

The example CSV file is a tab-separated, ISO-8859-1 encoded file with CRLF line endings. You’d expect the following to work:


CSV.open(@infile, "r:ISO-8859-15:UTF-8", {:col_sep => "t", :headers => :first_row})

But it fails mysteriously! Even though the conversion to UTF-8 goes without problems, you get an ArgumentError complaining about some illegal byte sequence. If you analyze deeper, you might find (in this case) a complaint about rn. The solution is very, very non-obvious: You need to specify the row separator in addition to your encodings!

mjtko from the #rubyonrails channel on Freenode discovered this. If we change the line to the following:


CSV.open(@infile, "r:ISO-8859-15:UTF-8", {:col_sep => "t", :row_sep => "rn", :headers => :first_row})

Boom, there’s your working CSV object, with working encodings.

Watch TV on your PC, no ads, no Flash

Roman Haefeli strikes again: Watchteleboy makes it possible to watch dozens of live TV channels using mplayer in your very own machine, without the need for Flash, a web browser or any other such nonsense.

Here’s the source code: https://github.com/reduzent/watchteleboy

Here are Ubuntu packages he maintains: https://launchpad.net/~reduzierer/+archive/reduzent

And here’s an Arch Linux package of it that I maintain: http://aur.archlinux.org/packages.php?ID=52232

Caveat: This only works if you’re located in Switzerland or in some other place that Teleboy’s geotargetting likes (such as Italy).

It’s Quality Assurance Duck!

My development team got a new member: A rubber duck that goes “öööp” when tests fail:

This is an all-analog, no-automation thing. When I see tests fail on our integration server, I smash people over the head with the squeaky duck. Eventually I’ll hit someone hard enough to produce a graceful öööp.

So far it’s working well, test success is back to 100% green :)