Just another blog

Archive for February, 2009

Unlock your T-Mobile G1

Posted by PAS on 23 February 2009

I have successfully unlocked my T-Mobile G1 for free? How you ask? After 90-days, T-Mobile allows you to unlock almost any phone you have purchased from them with the T-Mobile branding, and all for FREE. The process can take about 2 weeks (as it did for me), but it worked. Here is how:

  1. Call T-Mobile on 1-877-453-1304 from another phone (not your G1). I got that number from their Contact page
  2. Its the standard voice prompt thing, so say English, enter your G1’s phone number, then when they ask what you want help with, say the magic word “Agent”
  3. Then they ask what you would like to talk about, and say “SIM Unlock Request”
  4. My experience with T-Mobile has been pretty good, within a minute I was talking to the real person. At this point, you verify your identity, and explain to them you want to unlock you phone because you are going overseas and want to use another SIM card.
  5. They will ask you for you phone’s IMEI number. This is a sacred number, so be careful who you give it to, as you can report the phone stolen, give them the IMEI number, and have the phone permanently disabled. You will find the number:
    1. on the side of the box your phone came in,
    2. on the G1 itself under Settings -> About phone -> Status, or
    3. by dialing *#06#
  6. Give them your email address, and within 14-days, you will get an email from T-Mobile with your unlock code.
  7. To unlock the phone, power it off, insert a non-t-mobile SIM card, and power it back on
  8. At the prompt, enter the unlock code from the email and you’re done!

The reason for writing this post is I had no idea this could be done for free with any T-Mobile phone after 90-days has past. There is no need to pay $25 to any scam site, just do it legit, for free, and without issue.

Posted in Blog | Tagged: , , | 3 Comments »

Django and Google App Engine Tutorial

Posted by PAS on 17 February 2009

Hi have been playing around with Google App Engine for a while now, and wanted to learn Django on a new application I am building. The two articles I started with are:

Both Django and GAE are being developed as I write this, so although these instructions are kind of recent, they are already out of date, or rely on you having knowledge of Django. Since there are a lot of others with no Python or Django experince wanting to learn, I thought I would make a tutorial that works as of today, but who knows a month from now or even tomorrow.

Note: This tutorial is written for Linux. Mac/Windows users will have to translate :-)


Django comes as a .tar.gz file, but we want a zip file to take advantage of the Zipimport library, so some conversion is needed.

  1. Download the latest Django and untar the file (in this case, it is 1.0.2)
  2. cd Django-1.0.2-final
  3. Create the zip file, but without the admin section since App Enging supplies it’s own
    zip -r ~/ django -x ‘django/contrib/admin*’

Get the Helper

The App Engine Helper or Django is an open source bootstrapper for getting Django started on App Engine. Downloading it from the website will currently give you quite an old version (r52) which will not work in this tutorial. Instead, use subversion to get the latest (r74).

  1. cd ~
  2. svn export gae-django-tutorial
  3. cd gae-django-tutorial
  4. mv ~/ .

Setup App Engine

As you would with any GAE application, edit the app.yaml file to refer to your application ID. The Helper also needs to know where your Google App Engine SDK is, since it is going to change how you start the development server, so create a link to it:

  1. cd gae-django-tutorial
  2. ln -s /path/to/google_appengine .google_appengine

Start the development server

Django has a different way of running the development server. Instead of using to start the dev server, do the following:

  1. python runserver

If everything is running correctly, you should see something like:

INFO:root:Checking for updates to the SDK.
INFO:root:The SDK is up to date.
INFO:root:Running application google-app-engine-django on port 8000: http://localhost:8000

However, if you are like me and saw an error like the following:

ImportError: No module named antlr3

Then you will need to install the antlr3 python module. Luckily this is easy.

  1. Go to and download the latest zip
  2. unzip
  3. cd antlr_python_runtime-3.1
  4. sudo python install

Lets see the site! When you go to http://localhost:8000/ you should see a page saying “It worked! Congratulations on your first Django-powered page.”
Pretty (un)impressive huh?

Ok, now lets start doing something. Kill the server by pressing Ctrl-C. The Django tutorial is the next stop, which involves creating the Polls Django app. You can read through there to get a full understanding. For simplicity, I am only what I did to get it working.

  1. python startapp polls
  2. cd polls
  3. Edit
    from appengine_django.models import BaseModel
    from google.appengine.ext import db
    class Poll(BaseModel):
      question = db.StringProperty()
      pub_date = db.DateTimeProperty('date published')
    class Choice(BaseModel):
      poll = db.ReferenceProperty(Poll)
      choice = db.StringProperty()
      votes = db.IntegerProperty()
  4. Edit (notice that order_by() from the Django tutorial is just order() here)
    from django.template import Context, loader
    from polls.models import Poll
    from django.http import HttpResponse
    def index(request):
      latest_poll_list = Poll.objects.all().order('-pub_date')[:5]
      t = loader.get_template('polls/index.html')
      c = Context({
        'latest_poll_list': latest_poll_list,
      return HttpResponse(t.render(c))
  5. cd ..
  6. Edit and add to urlpatterns
    (r’^polls/’, ‘polls.views.index’),
  7. mkdir -p templates/polls
  8. cd templates/polls
  9. Create index.html
    {% if latest_poll_list %}
    {% for poll in latest_poll_list %}
      <li>{{ poll.question }}</li>
    {% endfor %}
    {% else %}
      <p>No polls are available.</p>
    {% endif %}
  10. cd ../..
  11. Edit and add to INSTALLED_APPS
  12. Now you can run the dev server again:
    python runserver
  13. And go to:
  14. You should see the message “No polls are available.”

Adding some data

You can go through the rest of the Django Tutorial to fill out the rest of the views. One last thing to know is the admin site. To view it, go to:

  1. http://localhost:8000/_ah/admin

Notice that the Datastore Viewer is empty – it doesn’t even know about our Poll or Choice Models. Don’t panic. Go back to your terminal, and terminate the dev server. Now run:

  1. python shell

This brings up a special python shell with the Django environment set up for you. Now you can run:
>>> from polls.models import Poll, Choice
>>> import datetime
>>> p = Poll(question=”What’s up?”,

You have just created a new Poll. To end the shell, press Ctrl-D.

If you start the dev server again (or if you never stopped it in the first place), you should be able to go to:
to see you new Poll, and go to the admin site:
to see and create new Polls

Easy huh? :-)

Posted in Blog | Tagged: , , , , , , | 4 Comments »

Vegemite Beer Bread

Posted by PAS on 3 February 2009

I should have posted this on Australia Day (when we made it), but I haven’t got around to it until now.

Aussie Vegemite Beer Bread


  • 3 cups of self-rising (raising?) flour
  • 1 beer (375mL can or 12oz bottle)
  • 1 big knife-load of Vegemite
  • Grated Parmesan cheese
  • Left over butter


  1. Preheat the oven to 375°F (190°C)
  2. Lightly grease a small bread tin (about 9 x 5 x 3 inches) with the butter
  3. Get a big mixing bowl, tip in all the flour, add the beer and mix it up. We have found a whisk useless, but a spatula quite good
  4. If you like parmesan cheese as much as us, add as much grated parmesan to the mix as you wish
  5. Add the mix to the bread tin.
  6. Load up a knife with vegemite and run it through the mix – the vegemite will come of the knife and marble through the dough
  7. Bake for 60 minutes
  8. If you didn’t get your cheese fill, at the 40 minute mark, take the bread tin out, and sprinkle grated cheese on top of the bread
  9. After 60 minutes, you should be able to put a skewer into the bread and have it come out clean. Let the bread cool a little, cut and eat as fast as possible :-)

Posted in Blog | Tagged: , , | Comments Off on Vegemite Beer Bread