Monthly Archives: September 2008

Home Technology Upgrades

Well sooner or later some hardware has to be upgraded. I got some stuff I really like.
New Laptop
Since Mandy is off to college at MSU – and she called me and mentioned that her laptop needed reformatting (again) since it was slowing down – I splurged on a new MacBook from the Michigan Computer Showcase. It was a great price – $1299 – including 2GB RAM and 3 years of Apple Care – and a free (with rebate) iPod touch. Someone will the the touch as a gift probably. I also bought two licenses at faculty price of WIndows Vista – I will try to avoid giving Mandy Vista (shhh don’t tell her) as long as possible – not that I don’t like Vista – I actually really like a VIsta a lot – I just want a mono-culture of operating systems. This frees up Mandy’s AMD based laptop – I might end up with my own PC laptop out of the deal after things shake out and I give myself Brent’s laptop.
New Printer(s)
I finally retired the LaserJet4 printer – it was a workhorse – but it did not have a power save mode and it just bothered me to be paying to both heat and cool the house all summer long.
I almost went and got an HP Color Laser – HP makes a nice one for about $400 – but this time – I did not rush – and I googled – before the purchase (instead of after the purchase) – it turns out that the color cartridges need replacing even if all you do is print black and white – sorry HP – that does not compute for me.
So my next printer choice was the Brother 2170w – for a little over $100 you get a fast compact B/W laser printer – with wireless and wired networking – and from my previous Brother experience – I knew that I loved their approach to strong mac support and Vista support.
I decided to buy it on Amazon because I missed the sale at Office Max – and the printers were $80.00 – I figured – Heck! That is about the cost of a toner cartridge – so I bought two so the kids have their own printer – and when one toner runs out – we have a whole spare printer! I worried a bit about having three Brother printers on the same network – but figured Brother had that figured out.
I was going to wire the printers instead of wireless – but once I experimented with wireless – I skipped the wires. Here is the pattern – you connect the printer to the network – install the drivers. You can reconfigure the printer using the BRAdmin lite software (Windows only – good to have Vista dual booted on the family mac). It scans the LAN and finds the printers – and you can tell them to become wireless printers. I have a nice Airport Express with security on the second floor – so they get strong / fast signal. You give the WEP password – viola! You have a wireless printer.
All the printer drivers – I installed as Ethernet – not wireless – after all the printers just have IP addresses.
On the Mac you just add a printer – when there are multiple printers the list of printers (Bonjour) appends the Mac address to the printer name – so you can figure out which one you are talking to. On Windows – the add printer did not work to find the printers on wireless so well – so I used BRadmin to find the printers and then just told Windows to look at the right IP address – from that point forward printer install was trivial and obvious.
I ended up putting both printers on wireless – since it is so dang fast and so seldom used – it is just two less wires tangling under our feet. And the printers can go anywhere there is a power plug – very nice.
So now we have three networked Brother printers – inkjet and two lasers all on the network and working on all my operating systems in the house.
Summary
This felt really good – my goal as CTO of the home is to keep tech support calls o a minimum – my approach is to fix problems before they occur – things like two internet connections (cable modem and DSL) and an auto-failover router. I have just learned over time that network attached printers are the only way to go – and that you need a lot of printers – because they will fail at the weirdest time – sometimes it is technical and sometimes it is supplies. But in all cases – I am far away from home – it is 12:30AM and there is a major homework project due tomorrow morning.
Moving toward an all-Mac computing environment and everyone either having an iPhone or iPod – also makes things nice – iTunes libraries work well and share well (with Apple TV too) – and we have lots of charger cables for iPods and iPhones laying around the house.
So this time next year when Brent graduates from High School – there will likely be one more Mac laptop purchased. After that I will simply have to get another more iMac that dual boots in the basement – and I will be 100% mac hardware in the home.
Vista and XP will be present where folk need them – but as I pointed out in a blog post – Mac seems to support Vista and XP better than most PC-only hardware vendors.

I found the CENTER tag in CSS

I have been hating on CSS because I can’t use the center tag. It is like – just CENTER it DAMN it!
Here is the magic bits:
http://archivist.incutio.com/viewlist/css-discuss/44878
/* Helps IE to center. */
div#outerdiv {
text-align: center;
}
/* The margin version for real CSS savvy browsers. */
div#div_to_be_centered {
text-align: left;
margin: 0 auto;
width: 650px;
padding: 0; /* Zero to prevent IE box trouble. */
}

Warning: Chuck is Starting to Like JQuery

Well I have started hacking on my “next generation LMS” this weekend – I hope to have an early prototype in hand in time for a Monday meeting with the Med school folks. I settled on a framework for the prototype – promise you won’t laugh. JQuery, JSON, PHP, and MySql – yes – I know – so boring. But I can get help from other developers.
And I realized with MySql and the built in PHP5/Apache server on my Apple Laptop – I was nuts to do anything else. I really will miss database portability – for a few minutes :).
So the first part of the weekend is to do some JQuery to build the menu system (isn’t it fun to make really basic stuff at the beginning of a project?). My first reaction to JQuery was “yuck!” – I had seen Prototype in Ruby and loved it – because it did the few things I needed.
When I first saw JQuery, it was like “Where is the simple stuff?” JQuery was a freaking DOM Operating system and all I wanted was a few utility things. And worse – the JQuery documentation does not give simple examples for simple things – the JQ community assumes you are a battle-scarred Javascript guru when you walk in the door.
While the JQ syntax is obtuse, it is far better than the code these gurus wrote previously. For me – I never wrote that complex code – I am just a dummy – I don’t want to learn the nasty way for IE5 and then re-learn the easy JQ way. I just want it easy!
But with a cool mentor like Noah – I get over my mental blocks and get the simple stuff figured out – and once you get the simple stuff working – JQ is a wondrous place. If you wonder how wide the document is, start in Google – look at this page:
http://www.howtocreate.co.uk/tutorials/javascript/browserwindow
Oh yea – who is your Javascript daddy? You need to write case statements within case statements withing case statements. If you are patient and keep googling, you will find this page:
http://plugins.jquery.com/node/1089
A 4K download to find the document width – Better than me writing all the case statements – since the dimensions plugin documentation was not set up for dummies like me – it showed me how to do a million amazing things but not the simple thing I wanted – so I got bored with trying to figure that out – I kept Googling…
And finally I came to this:
alert( $(document).width() );
Uh – this is right there in JQuery 1.2
I can now make my menu dock on the left! Yay!
Note to self: Don’t assume JQuery cannot do something – just keep looking – someone will have blogged a simple JQuery code solution.
The more dummies like me who use JQuery – the more simple examples we will have. Coming up – the simplest JSON / JSONB example you ever saw – I call it the “Missing JQuery tutorial”..

Fixing the Mac Air Audio Plug Design Flaw

Yes – I know – if it was “Designed in Cupertino” – that means that it is perfect and that I should change. Unfortunately Cupertino went through a phase where they decided that the typical headphone/speaker plug was too big – and so they were going to force a new size down folks throats. Given that Apple wants things thinner, lighter and smaller – it made sense.
But the world simply did not change fast enough. The original iPhone and the Mac Air assumed a very small headphone – jack (the diameter of the plastic) around the jack. For a while – I just used my iPhone headset with my Mac Air and conformed to the new Cupertino way.
But as classes started, I was stuck trying to plug my air into the large audio plugs in the lecture rooms and was doomed – I want to make a simple extender cable that has the small diameter male plug and then it is a 3-inch wire ending in a female plug – then I could plug into anything – kind of like those short USB extenders.
But I decided to just fix the design flaw. First I grabbed some wire cutters and cut off most of the aluminum that was in the way just below the audio plug. I cut and bent and got most of the aluminum removed.
This took out most of the aluminum out but left it a little ragged. So the next step was to use masking tape and cover every single opening of the Air (including where the little flip out audio plug was). The *last* thing I needed was little aluminum particles floating around my Air’s innards.


The next step was to grid off the rough edges with a Dremel tool and then use a bit of emery-paper to get them smooth again. Then I blew all the aluminum dust off before removing the tape.

The I removed the tape and viola – I can plug in any audio plug into my mac Air!

Don’t blame me if you zorch you Mac Air with aluminum dust. I was really nervous and careful about the aluminum dust. Your mileage might vary. I do wish Apple would fix this in some upcoming Air – just like they fixed it for the iPhone 3G. Or at least sell the audio extender.

What Language/Framework to use on a brand-new project?

In the next 24 hours I will be starting a new project – a “next generation LMS system” for the UM Medical School – this is a small prototype but I hope it shows the way for how LMS systems will work in the future.
My angst today is what to write it in – and frankly I am still not 100% sure – if you have any suggestions – hurry up – I need to know soon.
Should I use Java?
Java scales and when you have a lot of code – strict interfaces are great. But Java simply means that when you try to build an open source community – you will be ridiculed by hobby programmers for choosing Java because it is too *hard*.
PHP + MySql / LAMP?
Man this is tempting – it works so well – ISP’s make this work for $3 per month trivially. It is really really direct to slap stuff together. And it is nice and relational. It feels so hacky though. Maybe PHP5 makes it feel a little better.
Ruby on Rails?
I love Ruby on Rails – I have never felt so productive in an environment – it is the best way to write elegant code I know of. But it needs to find a hold in the market place. I do not like the feeling of living on the edge and having to become a zealot and sell folks on the framework before I sell them on my product. Last year this time – I put together a small LMS in Ruby – and it was great fun – http://www.rubytoozday.org/. I could even start with that code for my NG project.
Python and App Engine?
Google is behind this – I like that a *lot*. I like Python. I like App Engine’s free accounts. I worry that I cannot scale my service in App Engine yet – there is no pay account and I cannot run App Engine on my own production infrastructure. Oh yeah – and that missing relational database might be a bit of a learning curve. At the same time – in the real world of big-time scalability – sharding is your friend – so why not byte the bullet and force myself to understand sharding.
So on the drive into work this morning – it seemed that even in 2008 – there was no good solution to this problem. DANG!
But as the miles rolled by – I realized that my new application was really about Javascript, JQuery, JSON, REST, and some back end. And I was fussing about what the back-end would be. I already had made much of the decisions of the project without realizing it.
So this makes it less painful to make a choice. Because it is only the headless back end that I am talking about. Even so the back end is an important bit.
So unless I change my mind in the next 24 hours – it will be Python with the following caveats: (a) the real good stuff is isolated into code that does not depend on the App Engine at all, (b) any APIs are defined in REST/JSON and not in Python itself.
The thing that scares me the most is learning sharding under pressure. This is the App Engine risk. I will need to hide my storage behind an abstraction. If I feel too much pain too quickly, I may fall back to PHP or Rails – that will be a harder decision – because Rails is so productive but I don’t have it memorized yet – PHP is a hack but I do have more of PHP and MySql memorized.
Oh the pain of making this decision!
If someone wants to help and/or get involved in this – let me know. I don’t have enough time to do this and I am pretty much a beginner in the technologies I am intending to use (REST, JSON, Javascript, JQuery, and Python App Engine). I guess that is why they call it “life long learning”.
Seriously, if you want to help, I would much appreciate it – I need folks who can really *help* – I do need folks smarter than me who have more time than me. I may be even able to use Med School funds to pay the right person to work on this with me.

Twittering with Trek: SI539 and Python

Trek Glowacki made a cool blog post about the switch of SI539 from Ruby to Python. Trek has been involved with SI539 in various roles for about 2.5 years and he is the smartest Ruby/Rails guy I know.
Here is his post (read this first):
http://wonderfullyflawed.com/2008/09/08/python-for-all-sure-why-not
Here is my response:
Great post Trek. I agree with 90% of it. I am always nervous about changing the world by teaching something that is “better” but not widely accepted. This way SI graduates are unprepared for their jobs when they come out of school – but they are well prepared for advocating for a future state that may or may not happen.
Frankly the switch from Ruby to Python in SI539 was because someone made a comment to me about how useful Ruby was – and I felt kind of bad teaching something with a small market share that was very elegant. But this might be a cool future state: SI502 teaches Python and in a future semester – I teach SI502 more efficiently so I can get some basic App Engine into SI502 – particularly to reinforce the essence of the Request Response cycle and show how the browser and web servers interact to make the “Web”. At that point we could make SI539 move more quickly just switch SI539 back to Ruby and even turn SI539 back to a project course. I assure you that I still have all my Ruby slides in place and with RUby 2.0 maybe SitePoint will keep a book in print for more than 3-4 months :) In this future world – it would be nice to teach Ruby 2.0 and teach it at a high level abstraction that you like. Having the nasty nuts and bolts well in hand having learned the CGI-like world of App Engine – students would be better prepared for the level of abstraction that they would encounter in “Trek’s – Ruby on Rails – The One True Way” :). That all could be really really cool.
We need to solidly teach HTML, basic programming, and the request response cycle in SI502 – and then SI539 could take off from there.
This dialog needs to continue as I am sure it will.

Learning Styles – Warning – Partial Rant

Lots of folks talk about learning styles – and lots of learning software claims to support multiple learning styles – and lots of grants are written and funded to produce material that supports multiple learning styles – etc etc etc.
So I have a really stupid question – as a teacher – I am having real trouble turning all of the learning style talk into clear and coherent guidance for me as to how to alter/improve my teaching to adapt to and support multiple learning styles.
Go and Google “learning styles” – you will find mounds or research on what to name learning styles and lots of pop-psychology web forms that tell you what your learning style is – in one or the other person’s learning style name space.
Try Googling this:
“how to author content for different learning styles”
You will still have to pick through the religious battles about which is the best way to categorize learning styles – or my personal paper about the learning style inventory I came up with – and my survey to check this out – and how I gave this survey to 200 people and wrote a stupid paper about it.
After you get past the myriad of people trying to make their name – the Severance Learning Style Inventory Test! You might find a paper talking about what to *DO* about different learning styles. Google found me this one:
http://www.mrs.org/s_mrs/bin.asp?CID=2725&DID=171663&DOC=FILE.PDF
I can summarize it – give folks some text and give them some animations – and they do better than without the animations – pretty simple and direct – at least we are moving to what to *do* about it.
I got all interested in this because my students are starting to teach me about different learning styles in how they approach my class. And I am finding it really exciting. This may seem crazy – but in a way learning styles kind of remind me of unit tests for software – unit tests remind us to test many paths through our code.
People with different learning styles will take different paths through the material in a course – both the material I provide and the material they can find on their own. I find this out (just like a unit test) – when a student takes an unanticipated path through my course materials and something goes wrong because I assumed one path through the materials and did not compensate for multiple paths. SO when I notice a new path through the materials – I make sure to think about that approach from that point forward.
I always like to give my students a lot of materials – hand out s, screen casts, lecture notes, podcasts of audio – and I let them find their own way through the material. Here is a couple of learning styles I notice:
– Start from the beginning and do everything – this is the way that works well – I made up all the material and sometimes I slide a detail into a screen cast that I forgot to put into the handout and then never go back and improve the hand out – those that skip the screen cast will run into trouble later.
– Start from the assignment and work backwards – look at the assignment – and look at all my materials as possible references to dig through. I am not well set up for this – because there is no good way to search through all of the handouts and video and audio that I produce so the student gets right to what they need – this is kind of the inverted learning style – and frankly a very common learning style in the web/google world – go until you get stuck and then use Google to get you out of a jam.
– Skim through the presented materials as they go by – go to lecture – listen – don’t do any readings – when there is a task to do – the student has a rough idea about what knowledge is where – but needs to go back and dig deeper in the areas that the assignment pulled out. This works pretty well for my courses – students build a lightwiight index as they skim forward and then have their own neural search engine to be able to zero in and find the material they need to know more deeply to make the assignment a success.
Of course this means that assignments must test/touch on the real learning objectives – because that is when all the learning styles kind of come back together – everyone needs to get the assignments done – they will learn at least that much – so the assignment is where you get their attention.
I am going to experiment with these concepts in the course materials I produce from now on – and try to get my students aware of their paths – so they can tell me what works and what does not work and how I can improve.
I am really excited to have the prospect of teaching www.si502.com for a few years with large classes – so I can refine the same material over time and get to the point where I can teach it better and better and be more sensitive to learning styles.
And after a while of course – I will make my own inventory – the Severance-Chuck Learning Style Inventory – write a book and convince Psychology departments to teach it as if it were Maxwell’s equations.

Thoughts on Google Summer of Code 2008

Sakai/IMS had two great students (Kathleen/Jordi) and one student who did not complete the project – this is pretty typical success rate for Google Summer of Code. Leslie Hawthorn – our fearless SOC leader asked the list of mentors how we could better deal with students who did not make the cut by the end of the program. Here is a simplified version of my note to Leslie and the list.

Continue reading