Nov 092014
 

I edited /etc/sudoers without visudo, and made a mistake. That will prevent you from successfully using sudo again. No real harm done, but it takes rebooting to get it fixed.

1) reboot in recovery mode (press escape when booting so the grub options are shown)
2) drop to a root shell (option in the recovery menu)
3) mount -o rw,remount /
4) visudo (emacs based editor)
5) reboot the system

You should be up and running again!

Oct 232014
 

Thank you, Rabobank, for detecting fraud on my creditcard and automatically blocking the card and rejecting the payments. This has saved me at least 500 euro! Thank you, thank you, thank you.

 Posted by at 13:07
Sep 182014
 

You can’t use ROW_NUMBER() in an update statement in SQL Server, so:

UPDATE TheTable
SET    TheColumn = ROW_NUMBER();

won’t work. But sometimes that’s just what you want. This will do the trick:

UPDATE  Target
SET     TheColumn = RowNum
FROM
(
    SELECT  t.TheColumn, ROW_NUMBER() OVER(ORDER BY t.ID) AS RowNum
    FROM    TheTable t
	WHERE    ...
) AS Target;
Aug 222014
 

Just prolongated my KPN subscription and ordered the Samsung Galaxy S5. Samsung offers a free S-View cover and 32GB memory card until the end of the month, so if any of you (local) S5 owners is interested in the S-View cover, let me know.

Jun 092014
 

I’ve used CyanogenMod before and was very satisfied with it. No bloatware, latest features and stable. Had it on my Motorola Droid (special version, since it’s not officially supported), on my Galaxy Nexus, I have it on my Galaxy S4 (my work phone) and after the latest KitKat update from Sony that drains the battery faster than a crackwhore needs her next shot, I decided to give in.

Bootloader unlock, which means a factory reset (you have to request the unlock key from Sony support). Which was the alleged solution to the battery problems anyway, so what could go wrong.

Enter Murphy.

My Windows 8.1 laptop does not recognize the XPeriaZ in fastboot mode. On neither USB port. Not with Android drivers, not with Sony drivers. Just an unknown device with a yellow exclamation mark in the device list. So I hooked up my phone on my Linux server. Yep. That just works.

CyanogenMod usually works perfectly with the ClockWorkMod recovery instructions. Boot in fastboot mode, flash the boot.img and reboot. Flash the custom rom image, and while your at it the Google Apps, and reboot and done. Not this time. The phone is stuck at the CM boot logo. Read the instructions again. Okay, mandatory “factory reset/wipe data” when doing a fresh CM install. I thought I did that, but hey, let’s restart. Flash boot.img, reboot, factory reset/wipe, install CM, install Google Apps. Reboot. Same thing: the CM boot logo. WTF?!

Google is your friend. I wasn’t the only one with this problem. Seems that the data partition made by Sony is encrypted in a way, and CWM does not wipe it properly or doesn’t wipe it at all. TWRP (TeamWin Recovery Project) should be able to do it properly. Next restart: flash the twrp image, reboot. Wow, nice GUI! No fiddling with the volume buttons, just point and click. Wipe the data partition/factory reset. Put the CM and Google Apps zip in the update queue (!) and flash them. Reboot. Wait. CM boot logo. Wait some more.

YES!!!! It asks for my PIN to unlock the SIM card.

Enter Google account credentials and……..oh wait. I have 2-factor authentication and the authenticator was …. on this phone. What now? Damn you Murphy. Turns out you can install the authenticator on another device, scan a barcode (the squares thingy) from a browser on your desktop and then it “moves” the authenticator to that device.
After that, I could succesfully login on my Google account with my fresh CyanogenMod installation.

Only to find that it does not automatically download all my apps. In fact, none of them. Ah well, at least it’s working again.

One more word: if you play games that are Google Play Games enabled, make sure you install Google Play Games first and then the games. Doing it the other way around will give you strange and unpredictable results. In The Gate for example, I got an “Download failed because you may not have purchased this app” which is very weird, since it’s a Free-2-Play game. Just uninstall, install Google Play Games, and then install your games.

May 232014
 

Started working on a web application with jqGrid as a grid object. Very powerful, and reasonably simple to start with. One thing I found missing, is that it does not understand just a data-array or json string to automatically fill the grid. One *must* give it the colModel parameter as well, basically destroying the dynamic nature of jqGrid. Not a big problem, just a quirk.

May 162014
 

I created the dynamic webservice. So far so good. Solved some hard to find problems (at least, Microsoft doesn’t tell you that these problems will arise). Now for the big finale. WCF in all its wisdom caches WSDL requests. Let us repeat that all together now: WCF caches WSDL requests. And there is no way to tell WCF to not do that, or for that matter to empty the cache. The only way to do that, is to recycle the application pool the service is running in, or (of course) to recycle IIS. It’s that bad.

I tried several methods: messageinterceptors, creating extra instances of the service, etc etc but there’s no way to work around the cache. Once requested, the WSDL is written in stone.

We serve web services that have a customerbased configuration. A customer gives us a data file, which will be the source for their endpoint. In our application is defined which columns are served to the respective methods. But all clients have the same set of methods (web operations). So the wsdl generator looks at the user that is logged in (custom servicebehavior), fetches the relevant column names from the database, and modifies the wsdl accordingly. Every customer is served its own data with its own choice of columns. Works perfectly. Until you change the set of columns and don’t restart the service. No problem on my development laptop or on the test machine, but a big problem if we want this in live in production.

At a dead end with this now. Looking for an alternative. But so far, none of what I find actually works.

Apr 042014
 

First things first: my trial period is over, so since this month I’m a “real” employee of Olbico 😉

I’ve created dynamic web services. Turned out to be a bit more difficult then I expected, since the requirements were quite strict: secure communication, but no client-installs, and the response had to be dynamic, specific for the user that logged in.

First problem was that the default serializing of dynamic objects in WCF doesn’t quite work like you would expect (you can’t deserialize the XML to a proper object anymore), so a custom serializer for the dynamic objects (to be used in the response).

To further complicate things, the WSDL needed to be user-specific. A users logs in and request his/her WSDL. This turned out to be not too difficult, except for the “logs in” part. We didn’t want to work with client certificates, but we had decided to create some security by communicating over HTTPS. To do that with WCF, I needed to create a custom user-authenticator that supports a username/password digest in the request-headers. Google is your friend!

So customers now have (well: will have, it’s not in production yet) their own WSDL, and they can create strong-typed clients on their side, and all data is transferred over in an encrypted way. YEAH!

From our point of view, we only have to maintain one web service/endpoint. All configuration is done in the database. So a new customer gets a login, we define what can be requested (that’s a subscription/payment thing), and the web service now does the rest. No reconfiguration needed. Double YEAH!!