iOS 10: not that bad!

I’ve been rocking a jailbroken iOS 9 for some time now, but I just recently decided to upgrade to iOS 10 and see what it’s like inside Apple’s jail.

Apple is smart, you see. It knows that people hate ads, and jailbreaking is one foolproof way to block ads. So it made an adblocking framework, so that people like me now have one less reason to jailbreak. And it works.

It feels faster.

The lock screen widgets are actually useful, for instance, now I can swipe left from the lock screen and see which trams are leaving from the nearest stop from my location (Fahrinfo), so I don’t have to call up the app anymore.

Number26’s widget shows my account balance even when my phone isn’t unlocked, though. I wonder who thought that was a good idea.

The Control Center is a definite improvement. The old one was too cluttered.

The swipe from lower right gesture from lockscreen to open camera was never reliable. Now it’s simply swipe to the left. Perfect!

In Photos, the edit button is now next to the favourite and delete button. Great! It used to be in the top right which was always a stretch. Now Details is up there which is a lot more appropriate.

Real thought was put into this platform, I’m glad I switched from Android. The iPhone 5S is still going on strong, and all this while I had to deal with CyanogenMod and whatever kanged ROMs some random teenager uploaded on Mega.

iMah replacement battery for Macbook Air (System Information dump)

Long story short – it works perfectly in my 2012 Macbook Air (Ivy Bridge).

This is a System Information dump.

Original battery:

Battery Information:

  Model Information:
  Serial Number:	D8623030D0XDKRNAN
  Manufacturer:	SMP
  Device Name:	bq20z451
  Pack Lot Code:	0
  PCB Lot Code:	0
  Firmware Version:	406
  Hardware Revision:	000a
  Cell Revision:	162
  Charge Information:
  Charge Remaining (mAh):	0
  Fully Charged:	No
  Charging:	Yes
  Full Charge Capacity (mAh):	3255
  Health Information:
  Cycle Count:	331
  Condition:	Service Battery
  Battery Installed:	Yes
  Amperage (mA):	187
  Voltage (mV):	7876

System Power Settings:

  AC Power:
  System Sleep Timer (Minutes):	0
  Disk Sleep Timer (Minutes):	0
  Display Sleep Timer (Minutes):	0
  Wake on AC Change:	No
  Wake on Clamshell Open:	Yes
  Wake on LAN:	Yes
  AutoPowerOff Delay:	14400
  AutoPowerOff Enabled:	1
  Current Power Source:	Yes
  DarkWakeBackgroundTasks:	1
  Display Sleep Uses Dim:	Yes
  Hibernate Mode:	3
  PrioritizeNetworkReachabilityOverSleep:	0
  Standby Delay:	4200
  Standby Enabled:	1
  Battery Power:
  System Sleep Timer (Minutes):	10
  Disk Sleep Timer (Minutes):	0
  Display Sleep Timer (Minutes):	5
  Wake on AC Change:	No
  Wake on Clamshell Open:	Yes
  AutoPowerOff Delay:	14400
  AutoPowerOff Enabled:	1
  DarkWakeBackgroundTasks:	0
  Display Sleep Uses Dim:	Yes
  Hibernate Mode:	3
  Reduce Brightness:	Yes
  Standby Delay:	4200
  Standby Enabled:	1

Hardware Configuration:

  UPS Installed:	No

AC Charger Information:

  Connected:	Yes
  ID:	0x0921
  Wattage (W):	60
  Family:	0x0085
  Serial Number:	0x00f02236
  Charging:	Yes

iMah battery:

Battery Information:

  Model Information:
  Serial Number:  W01107AW7D3BA
  Manufacturer: iMah
  Device Name:  A1405
  Pack Lot Code:  3230
  PCB Lot Code: 30db
  Firmware Version: ddae
  Hardware Revision:  dac2
  Cell Revision:  2b39
  Charge Information:
  Charge Remaining (mAh): 5124
  Fully Charged:  No
  Charging: No
  Full Charge Capacity (mAh): 7355
  Health Information:
  Cycle Count:  1
  Condition:  Normal
  Battery Installed:  Yes
  Amperage (mA):  -1753
  Voltage (mV): 7780

System Power Settings:

  AC Power:
  System Sleep Timer (Minutes): 0
  Disk Sleep Timer (Minutes): 0
  Display Sleep Timer (Minutes):  0
  Wake on AC Change:  No
  Wake on Clamshell Open: Yes
  Wake on LAN:  Yes
  AutoPowerOff Delay: 14400
  AutoPowerOff Enabled: 1
  DarkWakeBackgroundTasks:  1
  Display Sleep Uses Dim: Yes
  Hibernate Mode: 3
  PrioritizeNetworkReachabilityOverSleep: 0
  Standby Delay:  4200
  Standby Enabled:  1
  Battery Power:
  System Sleep Timer (Minutes): 10
  Disk Sleep Timer (Minutes): 0
  Display Sleep Timer (Minutes):  5
  Wake on AC Change:  No
  Wake on Clamshell Open: Yes
  AutoPowerOff Delay: 14400
  AutoPowerOff Enabled: 1
  Current Power Source: Yes
  DarkWakeBackgroundTasks:  0
  Display Sleep Uses Dim: Yes
  Hibernate Mode: 3
  Reduce Brightness:  Yes
  Standby Delay:  4200
  Standby Enabled:  1

Hardware Configuration:

  UPS Installed:  No

AC Charger Information:

  Connected:  No
  Charging: No

Why I switched from Android to iOS

My LG G5 got stolen by a beggar in a leather jacket (but that’s not why I switched).

Rest in peace, my beloved G5.

I keep the box on my desk to remind myself not to be so fucking stupid again.

The truth is, the camera wasn’t perfect. I dreamt of making it a mini-computer on the go, with a Bluetooth keyboard, Termux with so many packages installed, but then I realized:

I don’t want to see such little but important details being fucked up again.
I don’t trust that I’ll get Android updates in the future, and I don’t want to deal with custom ROMs anymore, because I don’t want my phone to be like a computer.

While I was back on my HTC, trying to run a recent version of Android (4.2) without crashing…

I saw my dad with his iPhone 4 running iOS 7. It’s slow, and the camera isn’t impressive. But the photos never had issues. The camera always takes a photo within 300ms, whether or not it is in focus. It is slow because of iOS 7, not because someone forgot to program TRIM support into the kernel (thank you Android!). And there’s still app support for iOS 7, so he can use it today.

I saw my friend with his iPhone 5, which came out the same year as my HTC One S. It runs the latest version of iOS, runs Google Maps faster than my phone, can even play Pokemon Go and run the number26 app (required to have a bank account with number26).

I bought an iPhone 5S for 260EURs. As of 2016, I estimate it has at least 3 more years of useful life left. The camera is still miles ahead of the Nexus 5X or 6P – it starts faster, burst mode is incredibly fast, and you don’t have to install another app for that. I only wish I had bought this phone in 2013.

The LG G5’s camera isn’t perfect

Now although the G5 can take great photos, and the wide angle is truly useful:

Franzi IKEA

I still found many things wrong with it:

  1. In darker situations, the noise reduction is way too strong, making the photo look like a watercolour (the wide angle needs more light than the main camera). This is what I’m talking about:
    20160517_212214 lowlight near home 1 20160517_212516 lowlight near home 2
    Videos are the worst. Here’s an uncompressed still from a video quality comparison I made:

    LG’s Camera app

    The noise reduction algorithm is the same (because they both use Qualcomm’s ISP), it’s just dialed down in OpenCamera. You can see the texture on the white wall now. The pillows look better. The texture on my dad’s underpants looks better. And despite what it looks like, my dad was not moving his arm in the first picture. Just look at the file sizes. The first is 820kB, the second is 1.8MB because it contains way more information.

  2. LG’s Camera app only lets you take photos at full-res 16MP. I can’t believe nobody noticed this. I don’t want 3-5MBs of watercolour! In fact I don’t want to spend 3-5MB on each photo, period! In the end I had to write a python script to do the resizing.
  3. It’s still slow to focus like a normal smartphone because it doesn’t have PDAF, or phase-detect autofocus. At this price range, it’s inexcusable. The Galaxy S7 is freaking fast. The iPhone 6 is second place. If my girlfriend makes a funny face, I don’t have 500ms to wait for the phone to focus.
  4. Burst mode does not work in Manual mode. Why? The Galaxy S7 can do this.
  5. The volume-down shortcut to quickly launch the camera is great – but LG uses the proximity sensor so it doesn’t launch if the G5 thinks it’s in your pocket, so you can’t ‘preload’ the camera in your pocket. There’s no need for this. The volume buttons are hard to accidentally press in your pocket anyway.
  6. I can’t change the volume button shortcuts!

Getting Django easy-select2 to include JQuery and friends

Select2 is how you get boring dropdown lists:

to look like this:

And django-easy-select2 is a little Django app that quickly turns that on for whatever widgets in your form you choose.

  1. Add easy_select2 to INSTALLED_APPS
  2. In your
    from easy_select2.widgets import Select2, Select2Multiple
    When using the widget, don’t just use the class name, provide an instance, like Select2()

If only it were that easy. The documentation for easy-select2 forgot to mention:

  1. Include {{ }} in the head section of your template

Otherwise jQuery and the other magic stuff that actually does the list hiding and searching/whatever doesn’t actually load in the browser.

Upcoming Book: Linux Tutorial for Normal People

For the past month I’ve been hard at work writing a Linux tutorial. What, you say? Aren’t there enough Linux tutorials out there, the Linux Documentation Project, the installation guides etc? And wait, who are you to teach anything? And what, I have to pay for it?

Yes, there are many guides out there that can teach you about Linux for free. But none of them tell you why things are so, how they came to be this way, and what’s the rationale for doing things this way. The worst ones just tell you what to type at the terminal.

Not to mention, which of these would you sit down and read if you were bored? None of them, that’s what. You’d only read them if you wanted to install Linux.

So this pet project is my challenge – to take everything I know about computers and write about it in an interesting way.

I’ve already put the first few chapters up for free, so you can decide for yourself if you like the way I explain things. Later on I will release the ebook that explains networking and how to host your own site with WordPress, as well as how it all works internally.

Explained: Rooting The LG G5 (H850 EU only)

The G5's Always On Display is great especially when you plug it in. Beautiful David Hamilton photo to accompany your dreams all night.
The G5’s Always On Display is magnificent. Beautiful David Hamilton photo to accompany your dreams all night.

Required background information

Android phones have 3 system levels:
Each level can modify the level above it. So in order to modify system, you need to first make recovery do your bidding. And to do that, you need to unlock the bootloader.

In Android phones, internal storage is split up into partitions:
/boot: contains the Linux kernel and ramdisk. SuperSU and no-dm-verity will patch the files here.
/system: Android.
/data: Apps and settings are installed here. A factory reset just wipes this partition.
/recovery: recovery system goes here. We will flash TWRP onto it.
/cache: amongst other uses, LG’s Software Update downloads OTAs here.

Android platform tools:
adb: works in recovery and Android (if Development Mode is enabled and USB mode is not Charging Only)
fastboot: works in bootloader
adb reboot (bootloader or recovery) – Totally great! Now you don’t have to fiddle with button combos to get into recovery.
adb push/pull – really easy way to get/put files on phone’s storage. Uses MTP
fastboot flash (image) – flashes a certain partition with whatever image file you have on the computer.

LG G5’s recovery button combo:
Hold Volume Down+Power.
When you see the LG logo, let go of Power and press it down again (keep it pressed).
Keep holding both buttons.
It will ask you if you want to factory reset. Say yes only if you want to lose your data.


You will lose all your data. Get it off the phone.


First you must unlock the bootloader. Follow LG’s instructions here.

After you do this, from now on whenever you boot your phone it will say “Your device software can’t be checked for corruption”.


Now that the bootloader will let you flash something onto it, you can change the recovery. The stock recovery only displays an Android with an open stomach – you can’t do anything on it. Download TWRP for the LG G5 here.

With your phone plugged into your computer and USB debugging enabled, type:
adb reboot bootloader
The phone will reboot into a black screen with some small text that includes “Welcome to Fastboot Mode”:
fastboot flash recovery twrp-3.0.2-0-h850.img
Upon reboot, the G5’s system will find that the recovery has been flashed, and will restore the old version. You don’t want that. So send TWRP to the phone again and tell the phone to boot directly into it:
fastboot boot twrp-3.0.2-0-h850.img
When booted, TWRP will automatically patch /system so that it won’t try to overwrite TWRP on the next boot.


Put a microSD into the LG G5, because /data (internal storage) is encrypted and TWRP can’t read/write to it. That’s why we’re going to wipe /data later and patch Android to not use encryption.

OK, now you’re in TWRP. It’ll ask you to swipe right if you really want to allow system modifications. After you swipe right, you need to flash or else you won’t be able to boot into Android again, only into the bootloader/recovery.

Backup your /boot and /system partitions. Tell TWRP to save the backup to the microSD card.

Download SuperSU and, and use adb to push these files from the computer onto the G5’s microSD over USB.
adb push /external_sd
adb push /external_sd

Install and using TWRP. These will modify the /system and /boot partitions, which is why we backed those up earlier.

Go to Wipe->Format Data. Don’t Swipe to Factory Reset – it’s not the same thing. It removes all the files in /data but it can only do that if it can read/write /data – which it can’t at the moment.

Congratulations. Just Reboot->System.

If you ever get stuck at a white screen that says “Encrypting”, boot back into TWRP and Wipe->Format Data. And make sure you flashed


This is what we’ve all been waiting for.

Hate Facebook/Instagram/Evernote? Want to get rid of those stock apps? They’re in /data/data.

Hate ads in free apps and websites? Install Adaway. Of course, you won’t find it on the Play Store 😉

Wifi passwords are stored in plaintext in /data/misc/wifi/wpa_supplicant.conf

Install TitaniumBackup. it’s so much more flexible than backing up /data, because you can transfer your apps+data into a totally different ROM, like Cyanogenmod.

How I got an LG G5 (I paid for it)

old faithful HTC One S
Ye Olde Faithful., originally in blue-gray.

It happened again.

I had a new idea for a blog post and was typing it into Google Keep, when my HTC One S rebooted again.

It never did that before I flashed Cyanogenmod 11 on it. The One S was my old friend. I remember when I first got it in April 2012 – I had just gotten dumped by my first girlfriend, and I needed something to make life enjoyable again (and a phone more bearable to use than the insufferably slow LG Optimus One). I took pictures with it and posted them on Facebook, hoping to show my new ex-girlfriend what a nice life I was having without her. All those desperate messages to her wall of silence – written on that phone.

And when that didn’t work – it accompanied me to the gym, where I dropped it on the stone floor. It was in my pocket when I did my first clumsy cold approaches with girls on the bus – there is no winter colder than a teenage German girl on an overcast day. I remember the very first time I tried an opener on the waitress at Grand Cafe – I felt totally stupid, the exact opposite of James Bond. I would then read everything to do with picking up girls – especially the Book of Pook… on that phone.

HTC, being the shit company they were, only supported the phone for 9 months (later they would go on Reddit asking people to “give us another chance” with the One M7). So at some point, I flashed Cyanogenmod. I even bought a new body and battery and completely rebuilt the phone. But it wasn’t enough. Without Android from HTC, the camera was sluggish and took ugly pictures. And it would reboot itself spontaneously. Plus it got slower over time because the Cyanogenmod kernel doesn’t support TRIM. It was time for a change.

Continue reading How I got an LG G5 (I paid for it)

From Windows 7 to Arch Linux

So you’ve gotten quite comfortable with your home which you’ve been living in for the past 5 years. But your life has changed so much that it doesn’t quite fit anymore, even if it does keep you warm just as well as it did before. So many files here and there from when you did this or that, and you don’t even remember what they contain anymore and you don’t have the time to go through every one of them. It’s time to rip everything out and start all over again.

So with some excitement, and maybe just a little wistfulness, you type ‘parted; mklabel gpt’ and wipe your partition table clean.

This wasn’t because Linux had gotten better – oh no. In fact it’s quite the same as it was years ago, when everybody was declaring every year to be the year of the Linux desktop – flaky drivers here and there, small niggling things that require quite a bit of research to get working right, and always the possibility that a package update might break something.

But what’s the alternative? Windows 10 has improvements but you have to flip half a dozen switches (ok, more) to get it to not talk to Microsoft,  and even then, it seems like it still does. I grew up on Windows, but it has gotten so complicated that I don’t know what’s what anymore, and actually I don’t think anyone at Microsoft knows either. How could they? The whole thing has gotten out of control, the Windows directory is at least 20GB with all the patches, you need a SSD to get it to run quickly, and putting a swanky new interface on it that isn’t even applied consistently everywhere just makes it a joke now that I’m using OS X daily.

Then there’s AVG Antivirus, which loves to remind me that I haven’t bought their product. But I don’t have a choice, because any antivirus that’s worth a shit is commercial. Wait, do I still need antivirus? What about spyware, rootkits?

Then there’s the little niggling problem that my workflow on OS X doesn’t translate well over to Windows, not without cygwin. See, I work a lot on the console. And cygwin on Windows is an ugly hack, Linux in a VM on Windows is better, but I still have to remember to fire it up, and then I have to check its IP to ssh into it. But then I can’t use Windows programs to edit files in the VM without setting up a lot of stuff.

Then there’s the fact that I’ve been keeping my pictures/music collection on a ZFS pool for the past two years to prevent bit rot, and I would like not to have to fire up a VM and wait for Samba to announce its NetBIOS hostname when I want to listen to my music anymore.

Gentoo was an obvious first choice. My first foray into Linux was with Gentoo because they had the best documentation. I was familiar with how things While waiting for stuff to compile, I wanted to listen to some music. worked, I wanted to keep track of USE flags to not pull in dependencies, and it was sure to teach me a thing or two today still. Plus compiling things would make great use of my Phenom II X6 (but apparently a Haswell Core i3 can approach its level these days).

I chose an EFI+GPT installation with OpenRC, but apparently the minimal install ISO doesn’t boot in EFI mode, and you can’t really install GRUB2 in EFI mode properly with being already in EFI mode, because you need efivarmgr to edit the EFI variables, which aren’t accessible in BIOS mode. For some reason the Gentoo Handbook, which normally mentions small things like this that make or break the user experience, omitted this little detail. Fortunately all I had to do was temporarily rename the GRUB2 executable to EFIbootShellx64.efi, which my M5A99X EVO always looks for, and I could boot into the system, whereupon I promptly installed GRUB2 properly.

I pored over each config in the kernel sources, compiling a kernel tailored just for my use case and nothing else, that included drivers just for my hardware. I added discard to my /etc/fstab, -march=barcelona to /etc/portage/make.conf, and those zfs packages to /etc/portage/package.accept_keywords. I edited the USE flags and kept them in alphabetical order.

Then I tried to emerge mate.

I had to add all these extra USE flags just to get it to start. It wasn’t my meticulously pruned system anymore, no, it was now a mess. I was forced to accept the reality that GUIs are extremely complex and I just am not willing to deal with the little details of it all. Basically, I had to accept that I wasn’t going to have any control over what went into my system anymore.

Once I had gotten over myself and added the USE flags to make.conf, the emerge failed halfway because libgnome-keyring wasn’t pulled in when it should have been. I found a one year old post about this exact issue on the Gentoo forums. One year old and it still hadn’t been fixed. Report a bug? Get real, I’m still trying to get my desktop up and running here.

Once everything was up and running, I fired up Firefox and went on Youtube to celebrate. But the audio was skipping every second or two. Ugh. I listen to music on my computer all the time, and not having audio work properly was another thorn in the side on top of all these problems I had already which are, admittedly, characteristically Linux. I Googled but nobody had anything concrete. The closest I came was some guy on a forum advocating passing ‘snoop=0’ to the snd_hda_intel module when loading it. I tried it, and it just made the sound not work.

Around this time I started getting issues with the USB ports not being able to assign an address to plugged in USB devices. This did not happen with the Asmedia XHCI controller, only the built in AMD EHCI controlled ports. Weird, but then the GUI wasn’t a priority yet.

Then on the Arch Linux wiki, which had a larger Troubleshooting section than Gentoo’s with slightly more relevant entries, linked to the kernel documentation. Hmm. I have a Realtek ALC892 codec, with a Intel HD Azalia compatible sound system, and an Asus motherboard, so I passed model=asus-mode1 to snd_hda_intel and it worked!

It worked! I was breathing fresh air again – obviously this sort of problem shouldn’t have occured in the first place but that’s what Linux does – it forces you to learn the nitty gritty. I chalked it up to Linux and listened to some Carpenters to soothe my growing annoyance.

At this point I had realized it was taking too long for me to get anywhere, and Gentoo, which was supposed to be lean and mean through CFLAGS and judiciously applied USE flags, was not lean and mean anymore because I had to pull in lots of dependencies for the GUI and I was probably going to pull in a lot more in the future each time I installed graphical software because after all, this is my main desktop, I’m not going to type at the tty on it all the time. Plus, Arch Linux had a much better wiki. I found myself on it all the time when I had a problem even though I was running Gentoo.

So I figured I’d wipe it and install Arch Linux. Having had my patience worn thin, I didn’t bother with the EFI+GPT option this time and went straight for the BIOS+MBR. Installed the base system, everything took less than 20 minutes because I didn’t have to compile anything. Then I booted into the new system without a hitch. Thank god, something finally working out of the box.

Within another hour I had my MATE desktop and Firefox back, a point which took me several hours to reach in Gentoo and a lot of messing with USE flags and wondering if I really wanted this in my system or not (now: who cares). But the USB problem still occurred intermittently, I couldn’t use my mouse, and the audio was skipping again. No problem, I passed ‘model=asus-mode1’ to the snd_hda_intel module. But it didn’t work.

This is Linux all over again, I sighed. What did I expect. Why didn’t I just install Windows 10. My entire weekend is gone, my eyesight probably slipping because I have to spend more time in front of the screen in addition to the time I already do at work… now that I’m older, I really don’t have patience for this shit anymore.

And on top of that, my Realtek 8111E Ethernet just decided not to send any packets, despite bringing the physical link up. And I knew it wasn’t my Linksys WRT54GL, because that thing is solid as a rock – I trust it so completely because it has earned it. So I was stuck without the internet on my main computer, unable to install new packages.

On my Macbook, I decided to read the other documentation pertaining to the HD Audio module. On this page, I found something interesting: position_fix. I had no idea what a LPIB register was, and I wasn’t about to spend time figuring it out. I put in ‘position_fix=1’ and YES! My sound works again!

The networking and USB detection problem, however, was more difficult because there was nothing I could change, no options to tweak. I kept rebooting (thankfully Arch Linux boots in less than 10 seconds) hoping each time that the network would at least work again. It never did. I read a blogpost claiming that the USB overcurrent protection might be causing it, and that I should just unplug the computer for some time and it’ll be right as day. That didn’t work either, and I left it for a good 5 hours.

Finally in sheer frustration I reset the CMOS.

And the next time I booted, everything worked perfectly again! The network, the mouse was showing… oh yes! Now I recalled old Mac zealots recommending to ‘reset the NVRAM’ to prevent weird problems, and similar exhortations from the SGI and Sun SPARC communities. It made sense. The NVRAM in the PC world is called the CMOS, and problems never arise with Windows because everybody writes their BIOS to work with it.

Writing a BIOS is thankless work, so companies tend to test it against Windows and nothing else. I know Fujitsu in particular doesn’t give a fuck – the Primergy RX300 had broken ACPI tables. If a server vendor couldn’t be bothered to test its products rigorously, what about a consumer motherboard vendor that markets itself to gamers?

So now, finally, I have a wonderful setup. It automounts my ZFS pool, runs foobar2000 through WINE, can serve an rsync daemon, runs Dropbox, git, runs the Python and bash scripts that I write on OS X, doesn’t add hidden desktop.ini files to folders, doesn’t automatically put up a firewall on incoming connections, and more importantly, doesn’t talk back to Microsoft. I can ssh into it when I’m not home, and actually get stuff done in Linux, because you can’t get anything done in Windows with just the command line. Also,

And when I sniff the network and find that this computer is sending packets to the internet, I can pinpoint what it is, because I know that this OS isn’t doing anything behind my back. That it’s not doing anything behind my back is EXTREMELY important. For instance, Windows automatically has a firewall on the network interfaces. When I forward a port, and I don’t get a response, I always have to wonder: did I mess up when configuring the router, or is something wrong somewhere? I spent so much time getting so frustrated over this before realizing that Windows has a firewall up by default. I know what’s doing what and what’s set up in which way. In OS X I don’t know what’s doing This is extremely important, twhat most of the time, but I don’t have to because it always works perfectly and has sane, reasonable defaults. Not so with Microsoft.

The Windows era is over. Slowly but surely Microsoft is making it worse and more bloated with each passing incarnation, and only Office is keeping people on that platform. If people aren’t switching to OS X or Linux, they’re certainly doing more of their computing on Android or iOS.

How to install exfat-fuse on 10.5.8 PPC

Just a few notes for the future.

Macports installs a lot of dependencies, plus it cannot compile osxfuse (can’t use another port anymore) because osxfuse wants XCode 3.2, which doesn’t run on Leopard (only Snow Leopard). Use the binary provided on the official OSXFUSE website.

Use tigerbrew to install python 2.7 and scons. Just to install scons, Macports will install a lot of different crap, but at least it knows that python 2.7 is required to get scons to work properly. scons 2.3.4 is supposed to run on python 2.5.1 according to the documentation, but if you try you will end up with this error. Apparently ‘as’ only works with exceptions since python 2.6:
Import failed. Unable to find SCons files in:
Traceback (most recent call last):
File "/usr/local/bin/scons", line 190, in
import SCons.Script
File "/usr/local/lib/scons-2.3.4/SCons/Script/", line 76, in
import SCons.Environment
File "/usr/local/lib/scons-2.3.4/SCons/", line 56, in
import SCons.SConf
File "/usr/local/lib/scons-2.3.4/SCons/", line 199
except TypeError as e:

After you have python 2.7 and scons, you can follow the instructions on the exfat-fuse website. And it works.