Debug shell scripts (well, kind of)

I have to look up this one frequently, because it is really helpful.

If you want to see what lines of a shell script are actually executed, place this line in your code:

set -x 

I usually do that after the funny thing called Shebang (#!/bin/bash – I can also never remember this one correctly), but surely you can place it right before the section where you expect the problem. If you have an idea where the problem might be, that is. If not, just start from the beginning.

Cool thing: the variables are replaced in the output, or as the man page puts it:

Print a trace of simple commands and their arguments after they are expanded and before they are executed

Expand your Windows Taskbar: Dual Monitor Taskbar

If you use multiple monitors with Windows, and ever wanted to have the $%#ยง! taskbar spread across all monitors, here’s your cure:

It can also be set up to let the Windows only appear on the taskbar of the actual screen. This is very handy.

It’s free, but it hasn’t been updated for a while. Better get your copy now.

Typo3 Extbase: Object not saved

Recently I stumbled upon a nasty problem with Typo3′s Extbase. The instance of an object was not updated, but as usual (for Flow/Extbase, that is) there were no exceptions, no log entries, no hints… Extbase just silently refused to save the object. Great!

After debugging through the code once more (my number 1 source of information regarding Extbase nowadays), I found that 1 of 80 columns of the related table was missing in the TCA array! How dare it! After adding it, everything was working as expected.

The core problem: when fetching the object from the repository, Extbase only populates those class members that are configured in the TCA (which in Extbase will be the DataMap later on). This also means that the class member I forgot in the TCA was missing! Then I used a Setter to set a the mentioned missing value, which added the class member.

Extbase uses spl_object_hash() to keep track of the objects during a request. Of course, due to the missing member, the existing object and the to be updated object had different hashes … got it? Yeah…

I really wished Extbase would communicate more with the developer. Just silently refusing to do stuff is not ok, in my opinion.

How to use the MySQL GUI client HeidiSQL with a remote DB server

Most IDEs nowadays work nicely with remote servers. But how about MySQL? phpMyAdmin is ok when you only have to use it once in a while, but a pain in the a… for everyday work.

So I wondered if my favorite MySQL Client HeidiSQL (which has a slightly stupid name, but this shouldn’t keep you off from trying it!) was able to help…

… and it was! You simply have to use the connection type “MySQL (SSH tunnel)” and set up the two tabs in the Connection Manager correctly:

1. Tab "Settings":
- Hostname:
- User: [mysql-user]
- Password: [mysql-pwd]
- Port: 3306 (default)

2. Tab "SSH tunnel"
- SSH Host: [server-name]
- Port: 22 (default)
- Username: [ssh-user]
- Password: [ssh-pwd]
- Local port: 3306

(thanks to Thomas Haller for the nice aggregation!)

It simply works like a charm (given a decent internet connection, of course) and gives you all the comfort a lazy Windows user wants (and needs :-).

Another tip from Thomas blog: if you experience problems with the connection, try to delete the path to the plink.exe. This will show the error messages which otherwise would be suppressed.

cwmobileredirect v1.4.3 released

After more than two years of no active development on my Typo3-Extension cwmobileredirect I decided to release a new version, because it is still in use by quite some people. I’m really glad it was helpful for others so far!

Amongst small bugfixes and changes it is now prepared for Typo3 6.x and comes with a handy update script which will allow easier updates in the future.

For those of you who have not yet heard of this cwmobileredirect (there might be one or two people still out there): this little extension, that was developed in the Pre-Responsive-Web-Era, detects mobile devices and redirects the user appropriately. Actually it does a little more, so if you’re interested you can read more in the official Typo3 Repository (TER):