Monthly Archives: June 2009

Python Beginner Textbook for Younger Programmers

I am an advocate for using Python as a first language and for using programming as a tool to explore abstract concepts and technology literacy (Informatics) starting in elementary and middle school. Here is a book written for kids using Python that looks like it can support making Python accessible to younger learners.
Hello World! Computer Programming for Kids and Other Beginners
The book is written by the father and son pair of Warren D. Sande and Carter Sande.
Here is an interview with Warren and Carter on Canadian Television with the authors:
http://watch.ctv.ca/news/clip186877
Here is the web site for the book including several sample chapters:
http://www.manning.com/sande/
This is very cool and I will buy the book and then review it in more detail.
On first glance looking at the sample chapters and table of contents, it looks well suited for K-12 applications since has many short chapters, gets into graphics quickly using its own GUI (easygui), and is careful to have lots of additional explanation in areas that readers might have questions. Of course since Carter Sande is still in K12 it is very natural to have it structured properly for K12.
Perhaps after students get done with Warren and Carter’s book – the students and teachers will want to learn HTML and do web programming on Google App Engine! And of course there is a book for that – Using Google App Engine.
This all moves us further down the path of technology literacy based on foundations of open source technology and transforming K-20 education to include technology literacy at the right places.
Congratulations to Warren and Carter!

Brent Severance Holt High School Graduation 2009 Memories

Here is the obligatory cute High School Graduation memories video for Brent Severance.
This is a video which contains some early memories for Brent. The video includes video from the 1995 Easter Seals telethon and Brent singing at the Sycamore Elementary School Talent show in 1997, 1998, and 1999. Brent has Cerebral Palsy.
http://www.vimeo.com/5305387
Brent graduated from Holt High School in Holt, MI and will attend Lansing Community College in the fall.

What to do with Your old iPhone when you get a new 3Gs iPhone

As soon as my ATT store has iPhone 3Gs is stock I will upgrade – I held off upgrading last year – so this is my year! Next year I will be kicking myself – but what the heck!
I want to give my old iPhone to Brent to replace his phone – he simply hates carrying his phone around and so maybe if I give him a phone+gaming platform+SMS with keyboard+Wifi Surfing – he will be carry his phone around a lot.
What I don’t want to do is pay $20.00 for his data plan which he will really not use. I do want to give ATT my money because I will likely pay for tethering on my new phone regardless of the cost.
Bu you need to put the data plan on the phone – when you activate and if you take it off later – it still uses data here and there and you can rack up a bad bill pretty quick – so you need to really turn off data.
I was so cheesed about this that I figured I might finally jailbreak my phone. Driving away from the ATT store I even though about jail-breaking and going to T-Mobile for Brent (I wuz steaming). So far I have not jail-broke my phone on principle (yes – I even resisted “free” tethering – and yes that was hard to resist) – since I am an unabashed Apple-fan-boy I feel good about the “have never jail broke my phone”.
And then here is a super-duper blog post that effectively shuts off 3G/Edge data without a jail break by making a fake APN – I don’t know what that means exactly – but it works. Here is the blog post:
http://www.iphonedownloadblog.com/2008/10/11/using-an-iphone-without-the-data-plan/
And here is the web site it works at:
http://unlockit.co.nz/
I would go to the blog entry because it has instructions. The instructions worked for me on a first-gen iPhone. I immediately undid the Fake APN (following instructions) since it was only a test. But so far this looks pretty nice.
I will do a bit more research and if things feel right, I will end up with three iPhones on my plan (iPhone 3Gs for me with tethering, iPhone 1G’s for Brent and Amanda with data plans turned off). I do have to check to see how much Amanda uses her data plan.
As best I can tell the only bad thing about the no-data-plan is the loss of the visual voice mail feature.
Funny thing about this – if the iPhone family data plan was $10 – I would put it on all the phones and never have a second thought. If the family data plan is $20 per phone – I get all crazy and go to great lengths including contemplating jail-breaking phones and switching to TMobile – I have no explanation for this seeming inconsistency. Perhaps the best explanation is that $40 per month is getting awfully close to the payment on a new or slightly used motorcycle.

Reply to Ray Henderson’s Blog Post

Ray Henderson of BBLearn made a post about their directions in standards:

Read Ray’s Post

Here is my comment:

Ray – I am really glad to see this post. I hope to see you at DevCon in a few weeks and catch up. The real value of being part of Blackboard is the reach that you can have when we all deploy high impact standards. I think that there is a very strong value proposition for a company with a dominant market share to participate and strongly contribute to interoperability standards. When market-dominating products do not solidly support standards – people get a feeling of lock-in – in a sense there are likely many organizations which will not consider a commercial offering that does not support real and interoperable standards because (a) it does not play well when there are multiple learning solutions on a campus, and (b) the sense of vendor-lock-in is particularly distasteful in a teaching and learning context. And as you say, it is not enough for Blackboard to participate – it is necessary to lead and to add significant horsepower to the building of standards. In a sense, I would like to see Blackboard build on the leadership you have shown in the IMS LTI 2.0 group. Working closely on LTI 2.0 with Lance Neumann, George Kroner, and John Fontaine has been a delight. Now lets move it to the next level with leadership participation-levels in standards like IMS LIS and IMS Common Cartridge. I would say “welcome to the jungle” – but you have years of experience in the jungle already :).

Clearing Entries in App Engine – Clearing the Data Store

It would be nice to have bulk clear of the App Engine Data Store. Many folks have resorted to little REST like ways to do this. Here is my take on it:

class PurgeHandler(webapp.RequestHandler):
def get(self):
if not users.is_current_user_admin() :
self.response.out.write('Must be admin.')
return
limit = self.request.get("limit")
if not limit:
limit = 10
table = self.request.get('table')
if not table:
self.response.out.write('Must specify a table.')
return
q = db.GqlQuery("SELECT __key__ FROM "+table)
results = q.fetch(10)
self.response.out.write("%s records" % len(results))
db.delete(results)

Nothing fancy. This could easily be improved and I may improve it after I get some free time.

Reference: I got my inspiration from this Google Groups Post

TwiterFon – Upgrade to TwitterFon 1.5.2.ipa – Fail – TwitterFon Pwnd

I upgraded my iPhone to 3.0 – Yay Apple – once again you show the love to us gen-1 owners! I figured that I would upgrade my other apps to get a horizontal keyboard.
I love TwitterFon – it is my favorite iPhone app. So I wanted a horizontal keyboard – there was an upgrade to version 1.5.2 – that mentioned “tested on 3.0” – what a LAME release note. Reminds me of Y2K – “We cannot assure you that our previous product that you currently own is Y2K compliant – but our new products are Y2K compliant – hey dude the product is a blender – it does not even have a clock in it!” (end of Y2K rant).
So I upgraded from my current version to TwitterFon 1.5.2 – it now gave me ads! Yay – I can tolerate ads if I get a horizontal keyboard! But NOOOO – no horizontal keyboard. Now I am ticked off so I search Google for:
downgrading an iphone application
And find this page:
http://iphone-application-developer.blogspot.com/2009/05/downgrading-iphone-app-something-we.html
I did it and it worked – just don’t empty Trash right away and you have a safety net!
YAYAYAYA – Downgraded my TwitterFon.

Playing iPhone Music on a Motorcycle through a BlueTooth Headset

I use my iPhone with a headset during my motorcycle rides to and from work – it allows me to receive Cell calls. One thing that was bothersome was the lack of the ability to play music through the in-helmet bluetooth headset.
Now of course this is a headset aimed at voice so it uses the non-stereo, low-fidelity bluetooth so I am not looking at concert quality (i.e. this is *not* A2DP).
I saw some blog posts about how to use the Voice Mail feature to function as a work around.
Here is what you do: (1) Set up and pair up your bluetooth headset and make sure it works for phone calls, (2) Go into your iPhone iPod app and start playing something, (3) go into the phone app and go into voice mail – where it used to say “Speaker” it now says “Audio” – for me it just starts playing in the headset as soon as I am in the Voice Mail screen. I assume it routes audio-out to the headset so you can hear voice mail messages and until you play a voice mail message the music just streams to the headset. At that point do not press any more keys and you will hear your music.
It may be OK for a regular Bluetooth headset walking around – but in my motorcycle helmet the fidelity for music was so bad that it was almost pointless. However when I switched to a book on tape it was passable. So I will listen to all my books on tape on during my motorcycle commute.
My headset is a BlueAnt Interphone. I really love the headset – the microphone is amazingly good – the speaker could use a little noise canceling action – I have to put it pretty close to my ear to have a conversation at 70mph.
I cannot wait for the new iPhone 3Gs and its new voice dialing – oh yeah – when I buy it (after the lines to buy get shorter) – I will do a on-motorcycle review if the iPhone 3Gs+Blue Ant. I hope they don’t break the voice mail hack so I can listen to my books on tape while riding with no extra hardware.

Initial Hacking of Java App Engine on Macintosh

I started building my first Java App Engine Application. I added the plug in to Eclipse and created my first application. Make *sure* to uncheck “Use Google Web Toolkit” unless you really want it. If you are just making a simple servlet – you probably don’t want GWT.

Other than that, it is amazingly simple. When I skimmed the documentation it appeared that not much changed except for the addition of WEB-INF/appengine-web.xml file – and that was pretty much it. The rest is pretty much pure servlet. Sweet.

When you use the Run, option it runs Jetty which puts your application at / (i.e. not /servletname). Somehow, there is no way to stop Jetty when you need to recompile a class and want a full re-deploy. Now I don’t know how well Jetty does with hot-deploy – maybe you just recompile. But for us Tomcat refugees we want to restart once in a while.

Here is how I do it with my Mac:

ps -ef | grep geronimo | grep -v grep | awk '{print "kill " $2}' | sh -x

Then just run your app again from Eclipse.

The next thing that went wrong is something strange with the Mac Java VM and the harsh security confines of the App Engine – HMAC signing using a native library on the Mac – so you get this sweet traceback:

java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.keychain)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
at com.google.appengine.tools.development.DevAppServerFactory
at com.apple.crypto.provider.HmacCore.(HmacCore.java:26)
at javax.crypto.Mac.init(DashoA12275)
at net.oauth.signature.HMAC_SHA1.computeSignature(HMAC_SHA1.java:74)

Now this is *not* a problem on a deployed Java Application on the Google production environment – but it makes testing kind of less fun. So the workaround is make the following setting:

Eclipse -> Propject -> Properties -> Run/Debug Settings -> select your target -> Edit -> Arguments -> VM Arguments

-D--enable_all_permissions=true

Now you might get in trouble because you end up with something working on your mac that fails on the GAE production because it bypasses the Java policies – but at least you can HMAC on your Macintosh.

Cool Mail Message – Creative Commons

I got this really cool mail message

Hello Mr. Charles,
As a member of Linux Kullanıcıları Derneği (Turkish Linux Users
Association) we are preparing a documentary called "Free Software in
the World and Turkey". We have a part about Apache in the script and I
wanna use a part of your "Internet and Web Pioneers: Brian Behlendorf"
at http://www.youtube.com/watch?v=23F70w3atsM
We will release the documentary with GPL and I need your permission to
use your video with appropriate license.
Thanks in advance,
Baris
Member of Turkish Linux Users Association

Of course I said “yes” and sent Baris a high quality copy of the video. This is what Creative Commons Attribution is all about!

Google Wave – 24 hours In

I am still absolutely loving Google Wave. I now have a a Wave with Victor Maijer were we were trying to figure out how he could speak Dutch using Rosy the robot and then he had to go to a meeting. Michael Sofaer made a robot so we could find folks since the lookup function is not all there yet.
In general I am loving it still and now when I use Facebook and Twitter – I just wish all my pals were in Wave now. I don’t completely like the UI – but the combination of collaborative editing and threaded instant messaging and a nice sorted inbox are nice – it just needs to somehow be rethought to give me what I want when I want it.
I looked more into group support and found this page:
http://www.waveprotocol.org/whitepapers/google-wave-architecture
It talks about groups – but comes up way short of the feature set I want. You can add a group (i.e. pure list of folks) to a wave. What I need is groups plus roles within group and I would a wave to be ownable by a group.
We also need ways to permit wave writing and reading (and perhaps a few other permissions) based on group membership.
I think that this an be made to work if (a) groups can be provisioned by robots, and (b) there is a finer grain permission scheme than “this person or this group is a member of this wave”.
It is funny – in the welcome waves they had to lock down permissions so we would not hack their “welcome waves” – they apologize that the software does not deal gracefully with attempting to edit waves that you cannot edit. Hmmm. Sounds like the Wavemeisters are quickly reaching the same requirements conclusion. So why not dive in and just add context, group, role, and permission across the board. Hee hee – once I get stuck on something I just keep saying it over and over.
I will also say over and over that Wave is sooo cool – with some rethink of the UI and some smart robots – Wave is the answer to a communications and document dashboard and lets us combine Facebook, Twitter, Email and IM together – Wave On!