Torn between Java and Ruby

I just found out that one of the programmers I respect most has moved on from Java to Ruby. Now I am really torn! The commitment you need to make to a tool chain makes being a current and great Java and Ruby developer almost impossible. I guess, if any one can do it, Leigh can.

Java NIO 2

There is interesting stuff being done for Java NIO 2 that I was not aware of and can definitely use when it becomes available in Java 7.

yEd Graph Editor Recommended

I was searching around for a node & arc editor for the Macintosh recently and settled on yEd graph editor by yWorks. While it is mostly a showcase for yWork's graph toolkits it is a very competent editor with good usability. Its visual design also fits in well with the Macintosh. I did try OmniGraffle and its kin because of their broad support for more graphic notations but I found that so much of the user interface emphasis on aesthetics -- pixel alignment, shadowing, etc -- took away from simply getting the diagram drawn. I suspect this observation says more about me than the tool! Anyway, I recommend yEd.

Suggestions on best practices for school web sites

I was asked for some guidance or suggestions on best practices for school web sites, specifically for a K-8 district. The demographics of the town are such that about 64% of the kids in the public schools are hispanic with a significant number of those students coming from homes where only the children speak English. Additionally, the website would be part of a larger strategy of trying to get out the message that the public schools are far better than most tax-payers and parents would tend to believe.
Just to state the obvious, ask the parents and this does include you with your parent hat on.

A successful web site -- or any information tool -- must to be used by both staff, teachers, parents, and children. So, for example, when a school administrator needs to know when Ms Field's 5th grade field trip is returning to the school grounds the web site is used rather than a phone call placed to the teacher. If you don't have this happening then maintaining the web site for parents and children will be seen, rightly so, as extra work and so will get minimal attention.

Regards the contents, learn from the Lean manufacturing world, and build only what is needed when it is needed. Don't create a grand design, but instead focus on a very few key areas.
There is a tendency to provide a personalized experience for each user -- a kind of "My School" page. For example, Ian Lopez's kids are in 3rd and 4th grades and when he uses the web site its content will be arranged for him so that he sees only content relevant to his children. Don't do this. Personalized experience will make it more difficult for parents to support each other and work together to understand how to make use of the web site. Keep the web site's experience the same for all users.

There is a tendency in these situations to create a top down, administration focused, hierarchical organization of the content. Don't do this. Few organization's can restrain themselves from creating deeply nested structures that, ultimately, require a priori knowledge to use. Don't separate school-wide notices, grade-wide notices, and class-specific notices in the site's presentation. Organize the content by teacher and by day so the user has one page to see all the relevant information. As a general rule, think of your web site as a bunch of one-page reports focusing on a teacher's class and ordered by date. Imagine this page being printed and sent home with the student in the "backpack express" and this student's parent being as informed as a parent using the web site. The relevant Google query here is "situation awareness."

While comprehensive navigation, orientation, and search tools will be needed don't include them in the initial web site. The goal is to have one page and the one page does not need these tools. Instead, the home page is little more than a list of teacher and staff links at the end of which is the one page containing all the content the parent needs.

Lastly, since your audience needs both Spanish and English content then provide both side by side (as is done by the Canadian government). Don't elevate one language over the other and don't segregate them. This is a cost that should not be avoided. Do it right.

There are lots of platforms upon which to run a school site. I find the school-focused ones to be mostly a decade out of date regards their model of community and, similarly, dated regards user experience. What I have presented above can be implemented using Google's spreadsheets, calendars and some custom HTML and CSS. It is not technically difficult.

I am leery of packaged solutions and would rather empower someone to use a small number of flexible tools to craft their own solution. Look around at the uses that FileMaker, Excel and Word have been put too and you see empowerment in action. From an engineering standpoint, the results are often brittle, sometimes factually wrong, or simply scary, but the creator was able to achieve his or her goal without the need for IT support. So create a foundation by having a well considered information architecture, good tool choices, a dash of computational thinking training, and some under-the-covers engineering process and you can let the school do their own thing.

With that said, I feel very strongly that for a period of a few years there needs to be regular reviews to re-calibrate the web site. I would much rather see a school spend money on consulting than on tools. Unfortunately, spending money on "the right tools" always seems like the most direct and least expensive path to take. This is almost always the wrong choice because you are passing off the responsibility of understanding how to communicate with your users -- your school's parents and children -- to the vendor. The vendor's model of your users is at the intersection of all their customers' users. I can tell you that the users of Peace Dale Elementary School in South Kingstown, RI are far different than those of Robertson Elementary School in Central Falls, RI. And worse, the vendor is most likely to offer a solution that enables communication TO your users and not WITH your users.

The following are links to other stuff that I have written about that might help

19% of my after tax income pays for health insurance

All the people that I know of who object to INCLUDING a public option -- as opposed to having ONLY a public option -- do so from the comfort of either retirement or working at a large employer. In retirement you already have a government sponsored health plan in Medicare and part D. If you are with a large employer you already have a good health care plan at little cost. Try working for a small company or being self-employed and having to worry every month about the dual horror of being laid off (or not having enough business) AND losing your family's healthcare. There is no grace period with healthcare insurers when you can't make a policy payment for a month or two.

Given the simple facts that most people in the US are employed by very small businesses that struggle with cash flow every month and that 1/6 of the US population (!) already have no healthcare we can't let this horrendous healthcare situation continue.

Damian Conway and Dan Mayer OSCON 09 Ignite presentations

There are a number of good presentations from Ignite OSCON (OSCON 2009) at Damian Conway's presentation on the Symantic Web (starting 50 min) is very funny and probably quite true. Dan Meyer wants help building a teaching portal.

File system explorers need to support a grid view

I was reading about Kanban Boards the other day and it struck me, again, why do all file system explorers -- Finder on Mac OS X, Windows Explorer on Windows, Nautilus on Linux, etc -- only show either lists or trees of the contents. What I want, and want fairly often, is grid views.

In the KanBan example, let's say I have tasks A through N where each task is a file containing the details of the task. (In Agile software development the detail would be the story.) Tasks A-C are yet to be worked on and are in the "To Do" folder. Tasks D-G are in progress and are in the "Doing" folder. And Task H-N are done and are in the "Done" folder. A KanBan Windows Explorer might look like this sketch. The folder's grid layout would be configured via a simple control much like the multi-page print control used in most spreadsheet application's print dialog window.

I think most people tend to have organization folders each with several sub-folders that's contents are of roughly equal importance. For example, I will have a client organizational folder that contains folders for time-sheets, invoices, legal, and specific projects. A specific project folder is itself an organizational folder that contains client resources, external resources, and project resources. I want all these organizational folders to have their sub-folder's laid out in a single row grid. Having grids in the file system explorer gives me a powerful and simple means or visually organize my work without have to learn and use yet another application for an enhancement.

Working Ruby + Stomp example

I wasted too much time this morning getting Stomp for Ruby to work with ActiveMQ. The issue was that the example in the Stomp documentation did not work as is. It is missing a "join" call! Given the general weakness of the documentation perhaps I should have ignored the example sooner. Anyway, here are working consumer and producer examples. Firstly, ensure that ActiveMQ is configured for Stomp: Add to the "activemq.xml" configuration file, within the transportConnectors element, the following

<transportConnector name="stomp" uri="stomp://localhost:61613"/>

Save as "producer.rb" and run using "ruby producer.rb"

require 'rubygems'
require 'stomp'

now =
queue = "/queue/hellos"

puts "Producer for queue #{queue}"

client = "system", "manager", "localhost", 61613, true

for i in 1..100
puts "producing #{i}"
client.send queue, "#{now} #{i} hello!", { :persistent => true }
sleep 1


Save as "consumer.rb" and run using "ruby consumer.rb"

require 'rubygems'
require 'stomp'

queue = "/queue/hellos"

puts "Consumer for queue #{queue}"

client = "system", "manager", "localhost", 61613, true
client.subscribe queue, { :ack => :client } do | message |
puts "message=#{message.body}"
client.acknowledge message # tell the server the message was handled and to dispose of it
client.join # without this the above subscription is not activated.

InfoQ: Realistic about Risk: Software development with Real Options

The Realistic about Risk: Software development with Real Options presentation on Agile development practices is interesting. It explains how agile projects and agile firms can further improve their portfolio management by more overtly using financial options practices -- both as a buyer and as a seller. I don't fully understand all that was said, yet, but it did strike me as a useful perspective for thinking about a project's and a firm's cost risks and revenue risks.

The presentation pacing is slow. The Q&A at the end is worthwhile.

Scratch 1.4 Released!

Scratch is one of the best tools for early teaching of programming. I have been eager to use this with Henry and Owen but have held off as it -- that is, abstract, analytical thinking by 9 year olds -- conflicts with many of the principles of the Waldorf school they attend. It does not really matter when you learn to program, but when you do try Scratch.
"We are happy to announce the release of Scratch 1.4. With this new version, you can ask users to input text from the keyboard (using the new "ask" and "answer" blocks), take photos directly from built-in or USB webcams, and control robotics with LEGO WeDo. This version has a more flexible user interface, so that it can work on smaller screens, such as on netbook computers."

More at Scratch 1.4 Release Notes.

The pinnacle of secondary math education should not be calculus but statistics and probability

Arthur Benjamin says that the pinnacle of secondary math education should not be calculus but statistics and probability. There is nothing wrong with calculus it is just that very few people need to use it in their daily lives. Knowing statistics and probability, however, can be used by almost everyone at some point in their day or week. How would budget conversations change if you could use uncertainty in revenue projections with your audience? Worth 3 minutes of your time.

Found via Daniel Pink.