Installing CyanogenMod and Open Gapps on an old Samsung Galaxy S2 i9100

Last week, I dropped my OnePlus One phone. The touch screen broke, and stopped working. Eventually, I will buy a new phone, but for the time being, my father gave me his old Samsung Galaxy S2 i9100. It was running Android 2.something, so I decided to upgrade it to Cyanogenmod 13 (which uses Android 6.0).

I had some troubles with using the Cyanogenmod wiki, so I used googles cache. It took me more than a day to realize that Cyanogenmod seems to have ceised existing. So I guess this was the last time I installed CyanogenMod. But nevertheless, let's document how I did it, because it was way more difficult than I expected it to be.

I am using Fedora 24. I think I installed adb as follows:

yum install android-tools

The installation of CyanogenMod 13 itself is well documented in the wiki, but I had some troubles using heimdall to flash a new recovery image. The error message was:

Partition "kernel" does not exist in the specified PIT.

I was using the 'zImage' from the tar-file I downloaded using the direct download link on the wiki page.

What I had to do, was unplug the device, reboot it into download mode, plug it in again and then I had to enter:

heimdall flash --KERNEL zImage --no-reboot

So KERNEL should be in all caps, but it was really necessary to unplug, reboot, and replug. Which I found out after way to many tries.

When the new kernel/recovery was installed, I booted into recovery, and I was able to install the latest nightly (ever as it seems) using adb sideload.

But then I wanted to install the Google Apps, and even though I downloaded the 'pico' version of Open GApps, my device complained about not enough space availabe. (Error 70 or something.) So I had to repartition the device, in order to increase the size of the system partition.

I needed a Windows PC to accomplish that, and I followed more or less what's on this thread on XDA-developers.

I downloaded Odin v3.07 from this very page, and the zip with pit-files as well. I don't like it at all to download software from a random forum thread, but I really got desparate, and I was happy it eventually worked. I needed to install the drivers for the phone as well, but those I downloaded from samsungdrivers.net. (Not sure that's an official site, but some firewall blocked the zip-file with the drivers from the forum posts.)

Now if I remember it correctly, I used Odin with the pit file I9100_1GB-System_3GB-Data_512MB-Preload.pit file to change the partitions on my phone. To be fair, I was just guessing. I didn't flash a kernel using odin, because I got an error message.

So after repartitioning, I re-flashed the recovery image with heimdall, I reformatted the internal sd card in recovery mode, and then I sideloaded CyanogenMod again, and the pico-image of OpenGapps.

And it worked. For the last time. I guess I'll keep an eye on Lineage OS and Dirty Unicorns.

eID en Fedora. 24 deze keer.

Bijna iedere keer als je je eID wilt gebruiken onder Linux, moet dat anders. Die indruk heb ik tenminste. Vandaag lukte het na veel proberen op deze manier:

Ik heb de middleware uiteindelijk handmatig gebuild, van de tar.gz-source die ik downloade van http://eid.belgium.be/en/using_your_eid/installing_the_eid_software/linux. Achteraf bekeken was dat misschien niet nodig. Hoe dan ook, ik moest deze pakketten installeren om de middleware te kunnen builden:

sudo dnf install pcsc-lite-libs pcsc-lite-devel gtk3-devel

Blijkbaar moet ook de pcscd-service gestart zijn, dat is iets voor de usb-kaartlezer.

sudo service pcscd start

Zo werkte de eID. Dit keer had ik ook Java nodig. Waarschijnlijk om de security van de eID terug wat ongedaan te maken. Ik installeerde de rpm van https://www.java.com/en/download/linux_manual.jsp, maar dan moest ik ook nog de browser plug-in kunnen gebruiken:

ln -s /usr/java/jre1.8.0_111/lib/amd64/libnpjp2.so ~/.mozilla/plugins

Allez, we kunnen weer even verder. Tot volgende week waarschijnlijk, wanneer Fedora 25 gereleaset wordt :-/

Nog een dikke week voor de belastingsaangifte...

Dus tijd voor mijn jaarlijkse blog post over Tax-On-Web met Linux.

Dit jaar met Bunsenlabs, maar dat is eigenlijk een getunede Debian 8 (Jessie).

sudo apt-get update
sudo apt-get install eid-mw eid-viewer
  • Dan nog in about:config security.tls.unrestricted_rc4_fallback op true zetten. Waarschijnlijk is dat een security isssue.

Dat was het. Browser herstarten, en het werkt. Probeer eventueel de test als je niet zeker bent.

Ik heb niet expliciet een browser add-on moeten installeren, maar er is er wel een geïnstalleerd in mijn Firefoxinstantie: Belgium eID 1.0.18.1-signed.1-signed. Ik ben niet zeker of die mee kwam met een van de packages van daarnet. Misschien zat die gewoon nog ergens in mijn Firefox Sync.

Happy tax-on-webbing!

Een minimum aan git

(Disclaimer: Deze tekst heeft nog wel wat opkuis nodig.)

Van zodra je eens een programmeeropdracht moet doen die iet of wat complex is, moet je eigenlijk een versiebeheersysteem gebruiken. Zo'n versiebeheersysteem helpt je bij te houden welke wijzigingen je maakte aan je broncode. Stel dat je een aantal wijzigingen maakte, en je bedenkt je dat je het toch beter op een andere manier zou aanpakken, dan kun je die wijzigingen makkelijk ongedaan maken. Of als je merkt dat iets niet meer werkt sinds enige tijd, kun je makkelijk zien wat er sinds dien veranderd is, en dat kan je dan helpen om het probleem te localiseren.

Als je iets serieus moet programmeren, dan gaat een versiebeheersysteem meer dan eens je hachje redden. Je zou dus denken dat het gebruik daarvan opgenomen is in elke cursus programmeren. Maar dat bijkt niet het geval. En daarom deze blog post.

Lees verder…

How to apply a patch?

Suppose that you want to use e.g. a CiviCRM extension like CDNTaxReceipts , but you want some extra functionality, and someone told you that there is a patch available.

Now suppose you don't use git, and you don't have a clue about how a patch works. Then this is the easy way to apply it.

  1. You download the patch file, and you save it on your file system, e.g. as ~/Downloads/39.diff

  2. You use the command line. Supposing you unpacked the archive in ~/dev/CDNTaxReceipts-3.1

    cd ~/dev/CDNTaxReceipts-3.1
    patch -p1 < ~/Downloads/39.diff
    

Here you are. You patched the extension.

If you use Windows, the hardest part will be finding a patch executable. On almost every other OS, patch will be available by default.

Belgische fiscale attesten met een CDNTaxReceipts-hack

Sinds kort hebben wij een coole CiviCRM-instantie op het werk. En één van de dingen dat we daarmee willen doen, is fiscale attesten afdrukken. Ik dacht dat we waarschijnlijk niet de enigen waren die zoiets wilden doen, dus ik heb wat gezocht op het Internet. Tevergeefs. Misschien zocht ik niet goed genoeg, want hoewel België wereldwijd op de vijfde plaats staat wat betreft CiviCRM-implementaties, heeft er nog niemand CiviCRM gebruikt voor Belgische fiscale attesten. Of er is niemand die eraan gedacht heeft om te documenteren hoe het kan.

Maar nu dus wel.

Lees verder…

Exploding a string with value separators to an array in CiviCRM

CiviCRM stores its multiselect custom field values in the database by concatenating the values, e.g. like this

*value1*value2*

(I replaced the CRM_Core_DAO::VALUE_SEPARATOR by * because the real unicode character, #&01, does not show anything sensible.)

This represents

(
    [0] => value1
    [1] => value2
)

Now if you just use explode(CRM_Core_DAO::VALUE_SEPARATOR, $value), you get

(
    [0] =>
    [1] => value1
    [2] => value2
    [3] =>
)

This is probably not wat you want. What you really want to do, is

CRM_Utils_Array::explodePadded($value)

I just put this in a blog post, because I always forget, and Google doesn't seem to know.