How To Upgrade an AT&T Captivate to Gingerbread with Cognition 5 on a Mac

Disclaimer: Everything you see here is at-your-own-risk. If this doesn’t work for you, or it ends up bricking your phone, etc., it’s your own damn fault. Sorry. All I can say is that it worked great for me.

Prerequisites

You’ll need to download all of these files before you get started. If figuring out how to download these things proves to be too hard for you to figure out, then you should not be attempting this project. You probably don’t understand enough of the basics, and will make a mistake that will likely brick your device.

Now, let’s get started …

1. BACK UP EVERYTHING FIRST!

Use Titanium Backup to back up all of your data and apps. Use ClockworkMod ROM Manager to back up your current ROM.

Don’t say I didn’t warn you …

2. Copy Cognition5-v2.zip to your internal SD card

You’ll need to do this first, before you start the following steps. Hook up your phone using your USB cable and use “mass storage mode” to copy the zip file over.

3. Reboot into download mode

Throughout this process, you’ll need to keep putting your phone into “download mode.” You’ll know you’re in download mode because the phone will display a screen with a big yellow triangle with the Android robot holding a shovel, and the word “Downloading…” underneath it, and the words “Do not turn of Target!!!” at the bottom of the screen.

Android download mode screen

To put your phone into “download mode,” use the following steps:

1. Disconnect the USB cable, remove your battery.
2. Wait 5 seconds.
3. Connect the USB cable.
4. Press and hold the volume up and volume down buttons.
5. Insert the battery.

If you’ve done this right, you should be in download mode.

4. Flash stock Gingerbread using Heimdall

I’m not thrilled with the Heimdall frontend, so I just use the command-line interface using Terminal.app.

First, verify that Heimdall can see your Captivate in download mode. You should see:

$ heimdall detect
Device detected

If, instead, you see this:

$ heimdall detect
Failed to detect compatible download-mode device.

Stop now. Go back, figure out what you did wrong. You cannot proceed until Heimdall can see your phone connected via USB and in download mode.

***

To flash the stock Gingerbread ROM, we’ll need to prepare a little bit, first. Start by extracting the I897UCKF1.rar file, which should contain the following files:

CODE_I897UCKF1_CL273832_REV02_user_low_ship.tar.md5
Kepler_odin_new_part_JE3_S1JE4.pit
MODEM_I897UCKF1_CL1017518_REV02.tar.md5
odin v1.81.zip
SGH-I897-CSC-ATTKF1.tar.md5

We will need to extract the files from two of these tar files:

$ tar xf CODE_I897UCKF1_CL273832_REV02_user_low_ship.tar.md5

$ tar xf MODEM_I897UCKF1_CL1017518_REV02.tar.md5

Now we should have the following files: Sbl.bin, boot.bin, cache.rfs, dbdata.rfs, factoryfs.rfs, modem.bin, param.lfs, zImage. With our Captivate in download mode, we will flash these using the following command:

$ heimdall flash --repartition --pit Kepler_odin_new_part_JE3_S1JE4.pit \
    --factoryfs factoryfs.rfs --cache cache.rfs --dbdata dbdata.rfs \
    --param param.lfs --primary-boot boot.bin --secondary-boot Sbl.bin \
    --kernel zImage --modem modem.bin

Heimdall v1.3.0, Copyright (c) 2010-2011, Benjamin Dobell, Glass Echidna

http://www.glassechidna.com.au

This software is provided free of charge. Copying and redistribution is
encouraged.

If you appreciate this software and you would like to support future
development please consider donating:

http://www.glassechidna.com.au/donate/

Initialising connection...
Detecting device...
Claiming interface...
Setting up interface...

Beginning session...
Handshaking with Loke...

Uploading PIT
PIT upload successful
Uploading KERNEL
100%
KERNEL upload successful
Uploading MODEM
100%
MODEM upload successful
Uploading FACTORYFS
100%
FACTORYFS upload successful
Uploading DBDATAFS
100%
DBDATAFS upload successful
Uploading CACHE
100%
CACHE upload successful
Uploading IBL+PBL
100%
IBL+PBL upload successful
Uploading SBL
100%
SBL upload successful
Uploading PARAM
100%
PARAM upload successful
Ending session...
Rebooting device...

After the device reboots, you should have a working Captivate running stock Gingerbread ROM.

5. Flash Cognition 5 v2 using Heimdall

Again, put yourself in download mode using the instructions from the previous step, then flash the Cognition 5 v2 initial kernel:

$ heimdall flash --kernel Cognition5-v2-initial-kernel.tar

[...]
Uploading KERNEL
100%
KERNEL upload successful
Ending session...
Rebooting device...

From here, follow the usual steps to get into ClockworkMod Recovery, and install the Cognition5-v2.zip update that we copied onto the internal SD earlier in step #3.

If all goes well, you should be able to reboot your phone after the update and be up and running on Cognition 5 v2!

***

If I’ve made a mistake in any of the steps, or have left out important details, feel free to help correct them by leaving a comment below.

Cross-posting from WordPress to LiveJournal woes

WordPress to LiveJournal woes

I hate to do this, but I’m finally fed up with something that’s been bothering me for a while …

I’ve used a series of various WordPress plugins that mirror posts to LiveJournal, and for the most part, they work great. However, there’s been an issue: whenever I edit a post, it appears to delete the LJ post and post it as new. Not a huge problem, except for the fact that any comments left on the old LJ post are lost, which is a real drag.

I’m starting to wonder if it’s not WordPress or the plugins that are causing the problem, but the blog post authoring app that I use: MarsEdit. I don’t think so, but I haven’t ruled it out yet.

So, I’m posting this entry and will be using it as a test entry in which I’ll try to get to the bottom of things, either fixing the plugin that I’m currently using or otherwise figuring out what the problem is. Therefore …

Don’t post comments on this entry, or at least expect them to disappear suddenly as I test.

Thanks.

Update: This post originally was posted to LJ as http://dossy.livejournal.com/68169.html. Here’s the first edit using the WP web interface directly.

Update #2: Great, WP updated the post and updated the LJ post without changing the post ID. Now, I’m editing the post and adding this update using MarsEdit. Let’s see what happens …

Update #3: Aha! After posting the last edit using MarsEdit, the post on LiveJournal disappeared. A new post on LJ was created, with the latest post content, though: http://dossy.livejournal.com/68462.html. Not sure if it’s really MarsEdit’s fault, or a bug in the WordPress XML-RPC interface that MarsEdit uses, or the way that MarsEdit uses it. For completeness, I’m going to note that the WordPress post_id hasn’t changed regardless of how the post is edited.

Update #4: This reminds me, I need to submit an enhancement request for MarsEdit, to refresh an individual post from the server. Having to refresh all posts and pages just to pick up the edits within MarsEdit that I make in the WP interface is quite cumbersome.

Update #5: I’ve also posted a thread on the Red Sweater MarsEdit forum about this issue, to see if I can get any troubleshooting help there.

Update #6: I posted detailed troubleshooting information to the forum, but the summary is that MarsEdit invokes the WP XML-RPC in a way that marks the blog post as unpublished, then published again, and that causes the WP plugin to delete the LJ post and then re-post it. I’ve gone and made some adjustments to the plugin to NOT do this, so hopefully folks commenting on LJ won’t have their comments so unceremoniously deleted. Ideally, MarsEdit shouldn’t be marking posts as unpublished then republished (seriously, what?) but since I can’t fix that, I can fix the plugin to not delete LJ posts in response.

Of course, Google takes G+ very seriously …

So seriously, in fact, that …

Google has just launched games on Google+.

Because, you know, having games on G+ is SO much more important than fixing ALL the horrible usability problems with G+ …

Every time I say something negative about G+, the rabid fanboys say something that goes like this (paraphrasing):

But, but, but, the G+ team is doing all they can to make the service, the experience, etc., better … just cut them some slack and give them time.

… and then, Google goes and does something like this.

Google Mannekin Pis
(credit: Accidental Hedonist on Flickr)

Launching games on G+ now is like pissing on G+ users and calling it rain.

It’s one of the features that users explicitly do not want. In the early days of G+, one of the things most commonly cited by the fanboys as giving Google an edge over Facebook was “the lack of games cluttering up the stream”.

Like I’ve been saying all along, everyone will slowly come out of the “ooh, new and shiny” haze they’re in, and realize how badly G+ sucks in comparison to Facebook.

Google+ will soon join the ranks of Google Wave and Google Buzz. Remember them? Yeah …

Transitioning to a new 4096-bit RSA GPG key

@pleia2 reminded me that I ought to generate a new GPG key, given the recent advances in cryptography, etc. So, I just did. The new key’s fingerprint is:

pub   4096R/8D9740AA 2011-05-18
      Key fingerprint = C535 6302 1171 987D 738E  BFD8 2B1A B2E1 8D97 40AA

My old key’s fingerprint:

pub   1024D/EE812431 2004-08-27
      Key fingerprint = 0B12 F42F 2263 0444 B147  2C66 3587 2D37 EE81 2431

Read the full text of my GPG key transition statement (signed by my old and new keys).

Android USB tethering on Mac OS X

If you’ve got an Android-based phone, and want to do simple USB-based tethering on your Mac, you will find this guide useful. For reference, I performed this with the following equipment:

  • Samsung Captivate on at&t running custom Cognition 4.1.1 ROM.
  • MacOS X 10.6.6

The standard disclaimers apply here: follow these instructions at your own risk. This may void your warranty. Discontinue use if a rash develops.

Getting started: Preparing Android

All we need to do on Android is turn on “USB debugging” – do NOT fiddle with any of the “USB tethering” options or anything else. So, go into Settings > Applications > Development, and check the box next to “USB debugging.”

Android screenshots

After turning on “USB debugging” connect the device to your Mac using the USB cable.

Next, configure the Mac

After connecting the USB cable, your Mac should pop up a window saying that a device “SAMSUNG_Android” needs to be configured, like this:

Mac screenshot

This is a good sign. Click the “Network Preferences…” button, and find that device in your System Preferences’s “Network” section, which should look something like this:

Mac screenshot 1

The first thing to do is enter the values for this screen. Use the following settings:

Mac screenshot 2
  • Telephone Number: *99#
  • Account Name: wap@cingulargprs.com
  • Password: cingular1

Next, click on the “Advanced…” button towards the bottom right of the window. That should bring you to a screen that looks like this:

Mac screenshot 3

First, click on “Generic” and select “Samsung” for the vendor. Next, click on “Dialup” and select “GPRS (GSM/3G)” for the model. Enter in “wap.cingular” for the APN. Leave the CID as “1″ which is the default. When everything is done, the window should now look like this:

Mac screenshot 4

Once that’s done, click “OK” which should bring you back to the previous screen. Next, click the “Apply” button to save all these settings.

Lets try connecting

At this point, you’re ready to try tethering! Go ahead and click on that “Connect” button. You should now see something like this:

Mac screenshot 5

If everything goes well, after 5-10 seconds, it should change to something that looks like this:

Mac screenshot 6

That’s it, now you’re tethered

Not terribly painful, no goofy software installation needed and hoops to jump through. And, here’s a speedtest for folks who are curious:

Speedtest

3.4 Mbit/s down, and 330 Kbit/s up on a 400ms ping isn’t fantastic, but it’s more than adequate for getting work done while out and about.

I hope you’ve found this guide useful and are happily tethered now. If you have any questions or comments, feel free to share them in the comments below!

Can 2011 be the year for personal grid computing?

I just posted a thought as a tweet, but the more I think about it, the more I hope it actually becomes a reality. Here it is:

http://twitter.com/dossy/status/29659038908157953

Sure, I guess this is pie-in-the-sky dreaming, but it makes total sense: combine fast storage with its own dedicated processor for off-loading of data-oriented tasks. 128GB or 256GB of solid-state disk (SSD) is becoming more and more affordable and the form-factor is tiny, rugged, and is energy-efficient. It already uses an industry-standard, high speed (3.0 Gbps) SATA interface. Modern, energy-efficient mobile CPUs like the 1 GHz Snapdragon are readily available.

How much additional engineering would it require to produce a SSD coupled with such a CPU and an API for pushing executables from a host machine down to the SSD which would run them? Even a design as simple as “create a partition on the SSD with a specific partition-type in a size of your choosing, and write binaries that will execute on the local CPU.” You’d write or use a small embedded OS that would run on the CPU, consume and produce data to the SSD volume, which could then be interacted with by a host machine attached to the device.

In a sense, I guess this is what some specialized data warehouse companies have already done, but this would be an economical, off-the-shelf product that individual consumers could use to accelerate data processing for their own personal needs. It would mark the change in the pendulum swing back from “the cloud” to “the personal computer.” It would, basically, usher in another new age of computing.

I’m sure most people who are still trying to wrap their heads around “the cloud” won’t understand why this would be such a dramatic shift, but I know there’s some visionaries out there who will read this and either totally understand, or already are working towards making this idea a reality. I’d like to be part of, and even perhaps have the opportunity to pioneer it. But, it’s not something I can do alone … maybe someone can introduce me to the right people to work with? Who knows … it’s a small world.

But for now, it’s back to work for me …

Disappointing video quality from the at&t Captivate

Totally disappointed by the poor quality of the at&t Captivate’s video recording capability. Here’s a short sample:

Dear Nintendo, bring the sexy back!

You know what? Playing Super Mario Bros., the vintage NES version, on the Wii, really sucks. Why? The slight lag due to the Bluetooth Wiimote just makes the gameplay not feel identical … and it bugs me. :-(

NES console with controller

Nintendo needs to release with a “throwback NES” — a game console contained inside the original NES plastic housing, with every NES title ROM ever released, preloaded on a 64 GB flash chip, with the original connectors and two vintage corded square NES controllers. It would power on, you’d select what game you want to play from a menu, and it would load the ROM off the flash memory. Sure, I’d miss the occasional blowing on the contacts of the cartridge, but this would be such an awesome product.

I’d pay $100, maybe even $150, for it. And I’d play with it a hell of a lot more than I play with the Wii.

In the car, on the bus, revisited

So, my friend Gabrielle asked on Facebook:

Why do people say IN the van or IN the car but ON the bus? Why not IN the bus?

Seriously, this is such an oddity of English, one that must have come up before and certainly have been researched and answered by someone of authority, right?

Well, the best I could find searching the web was this entry in the old Language Log blog at UPenn which describes the phenomenon but doesn’t quite explain it. Not being satisfied by this dead-end, I decided to try and come up with a plausible explanation, myself.

What I came up with was this: “In my opinion, if you can ride while standing on a vehicle, you ride on the vehicle. If you must ride sitting, you sit in the vehicle.” This seems to hold for most of the examples cited in the Language Log entry linked above, except for bikes, which you certainly ride on, but ride while seated.

I guess I’ll have to admit that I’m a closeted wanna-be linguist, because I find languages so interesting. I’d venture to guess that most above-average intelligence native English speakers can naturally choose the correct preposition, either “in” or “on”, when referring to modes of transportation, but how do we do that? It seems natural and innate but there’s no way to codify a rule that describes its correctness? How can that be?

What do you think? Can you see a rule or set of rules that correctly describes the proper preposition in all these situations? Do you have insight into how we can naturally determine which preposition to use, but fail to express concise rules for such selection? Do you even care about this at all?

Let me know in the comments below.

Review: Samsung Captivate on at&t

Samsung Captivate on at&t

Despite the news that RIM was going to finally launch a new touch screen slider phone “any day now,” which did finally launch as the BlackBerry Torch 9800, I decided to give an Android phone a serious look.

After looking at the various options that at&t offers, I decided to give the Samsung Galaxy S-based Captivate (details: Samsung, at&t) a try. I ordered three new phones–one for me, one for my wife, and one for my Dad–at the start of August, and by the 6th, we had our phones in hand.

Right off the bat, I’ll have to admit that I went into this with extremely high expectations. I know, big mistake. To be honest, after dealing with BlackBerry phones for the last two-plus years, I was excited at the prospect of finally getting on a modern platform that didn’t involve using that crappy iPhone OS.

On the surface, it sounds really promising: a fancy 4-inch Super AMOLED display; lightweight at 4.5 ounces; 5MP camera; 512MB of RAM and 16GB internal SDHC; Samsung’s 1GHz ARM Cortex-A8 Hummingbird CPU. With these specs, there’s a whole lot of potential to build something really incredible.

My first disappointment was the “Email” app that ships with Android 2.1 on this phone. Apparently, I’m not alone, so much so that folks have forked the code and released their changes called K-9. However, K-9 still has its warts: I can’t figure out how to copy-and-paste text from an email message, without “replying” to it and copying from the quoted text area, then discarding the reply. Perhaps I’ll “fix” this and submit a patch.

Next, the lack of out-of-the-box wi-fi tethering was disappointing. I went and rooted my Captivate and then installed Android Wi-Fi Tether on it. Having a free, open source “solution” is a great thing, but certainly not for the average, non-technical consumer.

The Calendar app. isn’t too bad, but I sadly discovered a shortcoming in it: there’s no way to duplicate an event. I’m not talking about creating a recurring event, but taking an event and duplicating it. Suppose you have an event, like a doctor’s appointment. You go to your appointment, and at the end, you schedule your follow-up appointment. It’d be really convenient to be able to just copy your current appointment, and paste it on the new date and maybe adjust the time. Can’t do that with the stock Calendar app on the Captivate. You have to just add a new event and enter in all the data. Annoying, to say the least.

Battery life also seems disappointing. The specs claim over 300 hours (over 12 days) of standby time, and over 5 hours of talk time. Given the amount of email and Twitter and Facebook I get, even at an hour interval for refreshes and K-9 mail set up to do IMAP “push,” my battery seems to last around 4 hours before needing a charge. I suspect the 3G data use of the cellular radio uses more juice than voice “talk” time … and the notion of “standby” time is a bit misleading, since when the phone is doing background data tasks, it’s really not “in standby” as its actively using the radio.

Another huge problem is the fact that GPS on the Captivate appears to be totally broken. The TeleNav GPS navigation application is pretty much unusable, with it not being able to track your location properly, which causes it to constantly reroute as it tries to figure out where you are. Supposedly there’s a workaround, where you can manually reconfigure the phone to use Google’s Location Server, which I’ll try soon, but again, this is just poor out-of-the-box experience and “fixing it yourself” isn’t really a satisfactory solution for a non-technical consumer.

On one hand, I wonder if I should have bothered making the switch from BlackBerry to Android, yet. Despite my complaints with RIM and BlackBerry products, the few things they could do, they did reasonably well. But, I’m tired of waiting for RIM to catch up. Maybe the next generation of touch-plus-slider devices following the Torch 9800 could be an option, but for now, I’m going to stick it out with the Captivate, hoping that Android 2.2 brings some fixes, along with community-developed Android functionality closes the gap between “sucks badly” and “usable on a day-to-day basis.”