Safari Download Manager: The End of an Era

by on Nov.01, 2015, under Mobile, Projects

This post has been a long time in coming.

As you all may have noticed by now, Safari Download Manager hasn’t been updated in some time. There is, in fact, a fairly low chance that it’ll ever be updated by Francis or myself again. By and large, we’ve parted ways with the world of consumer tweak development by getting normal jobs and working for reasonably normal companies.

SDM specifically (and tweak development on the whole) is a pretty important part of our lives. While I can’t speak for Francis, the experience I gained in working on it was instrumental in my growth as a developer. In cutting my teeth and rewriting the bad parts of the codebase I grew, and it was this that helped me secure a professional position as a software engineer. I couldn’t be happier with what I’m working on, but it and Francis’ job preclude spending a lot of time maintaining SDM.

With that in mind, we’ve made the decision to release it as an open-source project! We want people to have the opportunity to learn and grow from both our mistakes and our triumphs. With the notable exception of the branding (the delightful icon, that is), the entirety of the codebase is now under the 3-clause BSD license: you can use the code however you please so long as you retain the license/copyright attribution and do not use its name to endorse or promote any derivative software.

In the interest of transparency, I’ve undergone painstaking effort to preserve the integrity of its history—every misstep, bug, and fix should be visible in detail. While it’s a little old, it’s my hope that SDM can still shine as a beacon of best (or at least alright) practice in tweak development. Countless hours spanning many late nights over the years were dedicated to its design and development, and it’d be a shame for that all to go to waste.

There’s a lot of super-cool stuff in there:

  • SDM works fairly seamlessly on iPhoneOS 3.1 all the way through iOS 5.x. There are a couple issues with 6.x support, but it generally worked “alright” there as well.
  • Support for Safari’s BrowserPanel implementation (a carefully-choreographed dance to ensure that various UI state transitions work and don’t break user interaction.)
  • Crazy-flexible preferences with customizable contents.
  • more, of course, but it’s hard to list everything

You can find the source here.

See You Space Cowboy..

Leave a Comment : more...

Fixing Steam for Mac on a case-sensitive filesystem.

by on May.12, 2010, under Gaming, Hacking, Mac OS X

While it should not be necessary, it is possible (with a bit of symlinking) to get Steam on OS X working with a case-sensitive boot volume.

This can be done as follows: (continue reading…)

18 Comments :, , more...

On Case Sensitivity

by on May.09, 2010, under Annoyances, Gaming, Mac OS X

Or, at least, that’s what you’re supposed to do when you try to use Steam (OS X), StarCraft II, or practically any Adobe product on a Mac with a case-sensitive boot volume.

Steam claiming that it requires a case-insensitive volume.

From the factory, a Mac ships with a case-insensitive filesystem. This seems to be an Apple simplification, (continue reading…)

8 Comments :, , , , , , , , , , more...

Cache or Check?

by on Sep.17, 2009, under Annoyances, Mac OS X, Mobile, Projects

On September 9th, 2009, Apple unveiled the (disappointing) updates to their iPod line, and released to the world iPhoneOS 3.1. The first, while notable, is nothing interesting in comparison to what they’ve done in the latest release of iPhoneOS.

With the latest release of their desktop operating system, OS X, Apple made great improvements to the system’s speed and application load times (supposedly, I’ve heard mixed reviews of Snow Leopard.) iPhoneOS 3.1 brings in these new enhancements, further streamlining the software on their mobile devices.

The single most impressive, noticeable change I’d like to discuss today is library caching.

(continue reading…)

4 Comments : more...

CyDelete 1.0.0

by on Mar.25, 2009, under Mobile

CyDelete is an iPhoneOS addon (using MobileSubstrate) that allows you to delete programs installed with Cydia just like they were App Store applications. I recently released it to BigBoss‘s Cydia Repository, and it’s received 2123 downloads at the time of this post. It’s been up for about an hour.

Just a brief post to let you all know what I’ve been up to.

Full post here.

2 Comments : more...

Pico-ITX and gPXE (in BIOS) do not mix, outside of blenders.

by on Mar.25, 2009, under Annoyances, Hacking

I’ve been sitting on this post for quite some time. I recently bought (and later sold, long before this post was typed) a Pico-ITX motherboard, an x86 motherboard smaller than my hand.

I named it Marcus and crafted a custom installation of Gentoo (as I do for every new computer) for it. I also decided to slipstream a gPXE (Enhanced PXE Network Boot) image into the BIOS. All seemed well, and I flashed it.

Reboot time came. I tried to enter the setup screen to configure my new toy!
(continue reading…)

1 Comment : more...

Hard Drive Suicide

by on Jan.24, 2009, under Annoyances, Linux

How now! An external hard drive?
Clatters to the floor
[Within enclosure] O, I am slain!

Well, it happened something like that…

I was about to attach my external enclosure (containing a Seagate 120GB 2.5″ SATA hard drive) to my other laptop, when the cord came up short and the drive slid off my desk.

To the floor three feet below…

While it was running.

Hard Drives are rated to withstand falls from a few feet, but only when they’re not running. When they are running, however, the heads smash into the platters, spinning at 5,400 RPM.

So I’m running a fsck on the drive, and it finds a bad block (about 2.3 million 4096-byte blocks into the disk). As I went to pull my laptop and hard drive into my lap, and the hard drive slides off the desk again. In the same place, and landing the same way.

By this point, I’ve started to give up. Fsck tells me that there is a bad block in the same place, and I check the SMART statistics: 0 Reallocated Sectors.

I write data to the bad sectors to force them to reallocate. This goes on for quite a while (with the badblocks tool, among other things such as creating as many 10GB files filled with zeroes as I could (I got to 6 files of various sizes before the drive began buzzing) and I get up to about 150 reallocated sectors (Or around 90 as a calibrated hard drive value; for the record, the failure threshold is 36. The drive started at 100.).

I decide to back up the data (only one of the actual files on the drive is corrupt; all the damage is in unallocated space) and delete some things I have elsewhere. 156 reallocated sectors.

After backing up the data I decided that it would be best to do a destructive write test. Writing to bad blocks causes the drive’s firmware to reallocate them on a different section of the physical disk.

By the middle of the test (700,000 4096-byte blocks, starting at the first corrupted region), the drive began buzzing again, and when I finally gave up, it had reallocated about 2,100 sectors, and the calibrated value was down to 44.

At this point, I gave up.

Rest in peace, Seagate. You have been with me since I got my laptop. Thanks for all the fish.

On another note, I’m now in the market for a new 2.5″ SATA drive.

UPDATE: The drive is a lost cause. I’m not writing anything to it, and it’s reallocating sectors on its own.

Reallocated_Sector_Ct 0x0033 018 018 036 Pre-fail FAILING_NOW 3282

Powered-on time: 305 days, 6 hours. Rest in Peace.

7 Comments : more...

Windows 7 Beta

by on Jan.13, 2009, under Windows

I have to say, Microsoft really did a great job here. The beta version of Windows 7 (Build 7000) is far more usable at this stage than Vista ever was. All my issues (see here and here) with Vista are not present here.


  • Wireless worked immediately; during setup, no less! (screenshot)
  • All my hardware was detected and drivers automatically downloaded from Windows Update, without my intervention. (screenshot 1: All drivers installed; screenshot 2: Installing my SATA card)
  • User Account Control is 100% less intrusive, and doesn’t hang while blanking the screen.
  • Aero is Beautiful in this release.
  • Paint got a complete overhaul (screenshot: menu) and can do something similar to Word’s AutoShapes.
  • Progress bars in the taskbar. (screenshot)
  • Calculator now has a “Programmer Mode.”
  • It’s fast, in both setup and use.

Minor Issues

  • Address bar icon in IE8 doesn’t support PNG transparency properly. (screenshot)
  • Folders no longer display the size of their contents unless the contents are selected. (screenshot 1: Windows 7; screenshot 2: Windows XP)
  • Paint uses the Ribbon Interface (not an issue, just hard to get used to). (screenshot)

While the beta expires in August of 2009, I foresee great things for Windows 7.

2 Comments more...

WordPress for a New Year

by on Jan.02, 2009, under Projects

The title says it all; This combines my love of (read: veiled interest in) talking about random things online with my love of having a new toy to play with.

Plus, Howettblog® is now completely located on the HowettNET server!

Leave a Comment more...

iTunes App Store Hacking

by on Dec.19, 2008, under Hacking

App Store Category List

App Store Category List

Last night, I tried to figure out how the iTunes App Store (as accessed from the iPod Touch) worked.
I was able to simulate the app store experience, and here are the few notes I took on the matter.

All replies from the App Store are gzip-compressed.
If any of these steps fails, the connection is terminated.

  1. The device queries for a “bag” (ix=2), which contains a signature and a signing key.
  2. The device sends a non-binary plist (XML property list) of its current applications to a WebObject called “availableSoftwareUpgrades”
  3. The app store replies with a list of all the information for those applications. It is up to the iPod itself to determine whether/not there are upgrades.
  4. Periodically, the device makes a request to (which replies 100 Continue instead of 200 OK), which I believe is for stats tracking.
  5. The device reads software categories and loads icons (WebObject viewFeaturedSoftwareCategories)
  6. The device loads the contents of a category (WebObject viewGenre)
  7. The device loads an application’s information descriptor (WebObject viewSoftware). This for some reason contains the text to be used in the price display, as well as the “INSTALL” or “BUY NOW” text.
  8. The device initiated a secure connection to download an application. This is where I had to stop my research, as I couldn’t track this.

Tools used:

  • curl (Commandline URL Fetcher)
  • Wireshark (packet capturer/analyzer)
  • Apache (Web Server, used here to serve fake App Ptore pages)
  • A single firewall rule on my router to redirect all traffic coming from the iPod back to my computer (iptables -t nat -A PREROUTING -s ipod -p tcp -j DNAT –to Note: I couldn’t redirect to a computer inside the router’s network, so I had to hook up via WiFi to the router AND via Ethernet to the modem)
Modified App Store Application

Modified App Store Application

Not much useful information into the app loading process was gleaned from this, unfortunately, though I did manage to snap some “neat” screenshots of my meddling.

Applications are signed, though, so even if this was an exploitable vector, the device would need to be jailbroken first, thus making this useless.
Neat nonetheless.

5 Comments :, more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!


A few highly recommended websites...