Mag+

This posting about Mag+, a possible future digital magazine, is a very well considered design. The short video is well worth watching.

Google Street View for meetings?

I had this device idea for meetings and was wondering if you have seen anything like this. The core of the idea is Google Street View technology but applied to meetings. One (portable) device is setup in the middle of a meeting space (room or table). The device has enough cameras and directional microphones to gather 360 degrees of visual and audio input. The output of the device is, for example, a 360 degree QuickTime movie with 360 degree audio (if there is such a thing). As you reviewed the movie and moved its directional focus around the room you would more clearly hear the voices of those in foreground of the camera. This would be a great device for all kinds of public and private meetings.

Feel free to steal the idea if you can make it happen! Just keep me informed. Thanks.

Mangle-wheel and pinion

"36. Mangle-wheel and pinion -- so called from their application to mangles -- converts continous rotary motion of pinion into reciprocating rotary motion of wheel." Found in Five hundred and seven mechanical movements. I wonder what proportion of technical people in the past were expected to know this stuff cold compared with those today? Then again, they didn't know about mathematical programming either.

A Congressman was seated next to a little girl on the airplane...

Today's email contained this:

A Congressman was seated next to a little girl on the airplane. He turned to her and said, 'Let's talk. I've heard that flights go quicker if you strike up a conversation with a fellow passenger.'

The little girl, who had just opened her book, closed it slowly and said to the total stranger, 'What would you like to talk about?'

'Oh, I don't know,' said the congressman. 'How about global warming or universal health care?' and he smiles smugly.

'OK,' she said. 'Those could be interesting topics. But let me ask you a question first. A horse, a cow, and a deer all eat the same stuff - grass. Yet a deer excretes little pellets, while a cow turns out a flat patty, and a horse produces clumps of dried grass. Why do you suppose that is?'

The California legislator, visibly surprised by the little girl's intelligence, thinks about it for a minute and says, 'Hmmm, I have no idea.'

To which the little girl replies, 'Do you really feel qualified to discuss global warming or universal health care when you don't know shit?'

Witch and showing minimized windows

A friend tweeted some time ago about being able to open any Macintosh's application's minimized main window using a consistent command key. Since I started using Witch I have been able to do this. Since Cmd-Tab is grabbed by Apple, I assigned Cmd-1 to invoke Witch. I have configured Witch to place its cursor in the list of application windows on the current application's first window -- which has always been, in my experience, the main window. The result of this is that I type Cmd-Tab and then Cmd-1 I effectually am able to bring the application to the foreground and have it's main window presented foremost even if it is minimized.

Note that I could just use Witch with Cmd-Tab but I find that my mind-fingers connection for "move to another application" to be too tightly bound to Cmd-Tab. Anyone know of a patch that will allow me to bind Witch to Cmd-Tab for OS X 10.6?

Advocates need to simplify their awareness emails

I get too many emails from advocacy organizations attempting to keep me aware of them and their work. They need to find a way to to do this without sending me pretty but functionally unhelpful email or expecting me to watch a video to get more detail. Repower America is especially bad. An itemized list of short statements of accomplishments and/or actions with links is all I need.

Read Better Scientific and Technical Writing by Morris Bolsky for some sound advice.

A few days with Spring.

I have been learning Spring 2.5 for the last few days. My usual method of learning a new tool is to
  1. buy a book
  2. skim the book in chapter order
  3. study specific chapters as I need to know their contents
  4. disregard the chapter's examples because they suck either because they are too simple or inelegant
  5. unsuccessfully google for better examples
  6. successfully google for clues
  7. piece together a simple and elegant example
Now, I understand that beauty is in the eye of the beholder and so my examples probably suck to others. However, my track record is that they suck less.

Spring is funky. I had wanted to use EJB3 for this project but Spring won out. The reasons have little to do with technical merit. From a larger software engineering perspective EJB3 is just too unknown among the in-flight-magazine readers. Ok, that was a dig and childish. Sorry.

For Spring to work on this project I need for it to handle REST, JMS, and RMI simply and elegantly. To this end I have been working on JMS and RMI stuff mostly.

Spring's "JMS template" stuff is very old-school Java. A better approach is to use generics for clean coding and have the configuration done in XML. After some effort I can now code a JMS listener as simply as
public class HelloMessageListener extends MessageListener<String> {

    @Override
    public void receive( String message ) {
        // handle string message
    }
}

And, if your message is more complex the listener's complexity does not change. The generic MessageListener is where the hard stuff is and, to be honest, it is not very hard
public abstract class MessageListener<T> implements javax.jms.MessageListener {

    private MessageConverter<T> messageConverter;

    @Required
    public void setMessageConverter( MessageConverter<T> messageConverter ) {
        this.messageConverter = messageConverter;
    }

    @Override
    public void onMessage( Message jmsMessage ) {
        T message = messageConverter.fromJMS(jmsMessage);
        receive( message );
    }

    abstract public void receive( T message );
}

MessageConverter also needs to be defined for all the machinery to work. The XML configuration is messy but mostly due to Spring's need for factories everywhere. In the end, the JMS listener is declared simply as
<bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">
    ...
    <property name="messageListener" ref="helloMessageListener" />
</bean>

...

<bean name="helloMessageConverter" class="example.HelloMessageConverter" />

<bean name="helloMessageListener" class="example.HelloMessageListener">
    <property name="messageConverter" ref="helloMessageConverter" />
</bean>

For RMI Spring has good POJO support out of the box. What I could not find, however, was support for exporting a POJO as an RMI service that could be called by a non-Spring client. For example, the following client can be run using the standard JDK
import java.rmi.Naming;

public class HelloServiceCaller {

    static public void main( String[] args ) throws Exception {
        String helloServiceUrl = "rmi://localhost:1199/HelloService";
        HelloRemoteService helloService = (HelloRemoteService) Naming.lookup(helloServiceUrl);
        for ( String input : args ) {
            String output = helloService.sayHello( input );
            System.out.println( input + " -> " + output );
        }
    }
}

But if you try to use this against an RMI service exported via Spring's org.springframework.remoting.rmi.RmiServiceExporter it does not work. You get a java.lang.ClassCastException regards org.springframework.remoting.rmi.RmiInvocationWrapper_Stub. Yuck.

However, with a little effort I was able to create an exporter that could export a POJO as a remote service as long as the POJO had methods that correspond to a valid remote interface. For example,
public interface HelloRemoteService extends Remote {
   public String sayHello( String name ) throws RemoteException;
}
...
public class HelloService {
   public String sayHello( String name ) { return "Hello " + name; }
}

To remote HelloService I wrote RemoteProxyExporter which is a mixture of Spring, RMI, Proxying, and Reflection.

Now RemoteProxyExporter (and friends) was tricky to write but it took less than a day's effort. As did MessageListener (and its friends). Spring might have a means of achieving the same ends as my code but so far I have not found it. There are two reasons for this. The first is that Spring is highly abstract and data-driven and so this richness just requires lots more exposure than I have yet had. The second is that Spring is old, really old.

During Spring's life Java has had many changes of course as to how common problems are solved. For example, how to augment and/or configure a Java object. First we used reflection. When this didn't solve all our needs reflection was augmented with "information" classes (such as BeanInfo). When this was seen as too static for a dynamic world the information classes where replaced/augmented with external declarations encoded in XML. When XML was seem as cumbersome Java 5 added annotations. Spring uses all of this but not consistently. And so often times just understanding how to connect A with B is a nightmare. And googling does not help because the definitive answer for some questions was given in 2009 while others where given in 2004 when Spring 1.0 was released.

The upshot of all this effort is that I will be able to do what I need to do and do it in a way that works for all staff skill levels. And do it simply and elegantly.

I can't wait to dig into pooling!

What happened to my shelf of animals?

O'Reilly has a promotion allowing you buy the online copy of any (?) print book that you own for $4.95. When I looked at my bookcase what I saw amazed me. All but two of the books I cared to have online where not O'Reilly books. Most of the books that have value to me now are from Addison Wesley, Manning, and Apress. I don't know why this is but evidence says O'Reilly books are less important than in the past -- when almost all my books had animals on the cover.
"Hell Froze Over: Fuel Economy Now More Important Than Number of Cup Holders to U.S. Car Buyers" Too funny not to keep.

Using bit.ly help transfer browsing to iPhone

So far the easiest way to switch from browsing on my Mac to browsing the on the iPhone is to shorten the URL using bit.ly and then manually enter the shortened URL into iPhone Safari. Not very smooth but it does save you typing, for example "http://bit.ly/Idma6" is easier to type than "http://conceptdev.blogspot.com/2009/10/monotouch-for-monospace.html". (It would be great if bit.ly's URL were case-insensitive because mixed case typing on the iPhone is cumbersome.)

Flickr Dartmouth Photo-pool

I love that Flickr users tag their photos of my home town Dartmouth, Devon, UK.

Underwear Gnome thinking in the RI legislator

This morning's Providence Journal contained the story "Rhode Island can’t see if its tax breaks are doing their job." Here is another story about the activities of RI's own legislative "Underwear Gnomes." If you don't know the underwear gnomes story here is a quick introduction: Underwear gnomes are enacting their three step plan to get rich; Step one is to steal all the underwear; Step three is to rake in the money; Step two is still under development. Our underwear gnomes are attempting to strengthen RI's economy with incomplete thinking. Why would they give away $87 million without any means of substantiating its effectiveness? And do so for several years. A similar kind of foolishness is occurring with the movie production tax credits. I am sure each of us has our prized example of underwear gnome thinking. These laws are not helping RI. Please, STOP trying to help us!

Gin, Television, and Social Surplus

Clay Shirky on how much free time we have and what could be done with it if you do the math. US households watch 200,000,000,000 hours of TV per year.

"So how big is that surplus? So if you take Wikipedia as a kind of unit, all of Wikipedia, the whole project--every page, every edit, every talk page, every line of code, in every language that Wikipedia exists in--that represents something like the cumulation of 100 million hours of human thought. I worked this out with Martin Wattenberg at IBM; it's a back-of-the-envelope calculation, but it's the right order of magnitude, about 100 million hours of thought.

"And television watching? Two hundred billion hours, in the U.S. alone, every year. Put another way, now that we have a unit, that's 2,000 Wikipedia projects a year spent watching television. Or put still another way, in the U.S., we spend 100 million hours every weekend, just watching the ads. This is a pretty big surplus. People asking, "Where do they find the time?" when they're looking at things like Wikipedia don't understand how tiny that entire project is, as a carve-out of this asset that's finally being dragged into what Tim calls an architecture of participation."

Read the whole article at Gin, Television, and Social Surplus

Who Is The Earth?

"Who Is The Earth? Moral philosopher Mary Midgley delivers a talk concerning differing and changing attitudes to our planet and our environmental responsibilities"

I really enjoyed this lecture on the how (mainstream) western philosophy has little to say about our moral relationship with the Earth and other groups. Well worth listening too. I found this at "iTunes U" on my iPhone. I am sure it is also available for downloading to an iPod, etc.

http://podcast.open.ac.uk/oulearn/arts-and-humanities/philosophy/podcast-a211-philosophy-human-situation

VNC and misbehaving keyboard mapping

If you have a misbehaving keyboard mapping when you connect to a tightvnc VNC server running under Ubuntu from a Macintosh OS X using any of the VNC clients add the following to your VNC server's xstartup script
# See https://bugs.launchpad.net/ubuntu/+source/vino/+bug/112955
export XKL_XMODMAP_DISABLE=1
Thanks Geoffrey for the help.

The New McCarthyism Starts Today



Update: The Providence Phoenix's Adam Reilly has an interesting article about Beck's intelectual foundations. See Latter day taint: How Glenn Beck is driven by Mormonism — and why his fellow faithful (including Mitt Romney) should be worried.

Amazon's SimpleDB is free for the vast majority of datasets

You can keep up to 1 gigabyte of data in SimpleDB without paying any storage fees. You can transfer 1 GB of data and use up to 25 Machine Hours to process your queries each month. This should be sufficient to allow you to issue about 2 million PutAttribute or Select calls per month.
More at Don't Forget: You Can Use Amazon SimpleDB For Free!

Bi-fold PDA

I love this bi-fold PDA that is shown towards the end of Microsoft's excellent A Glimpse Ahead Microsoft Office Labs vision 2019. Apple, I want this for my next iPhone in 2010.

Re: Looking for a better iPhone camera application

Ten apps for taking photos and editing images on the iPhone

Re: Speaking and writing webscale identifiers

A comment on Jon Udell's Speaking and writing webscale identifiers.

Adding content hints to identifiers degrades into the case where you have several variations of the identifiers in the wild. For automation to help us it needs to know which identifiers are for the same thing. If all identifiers used the same syntax then it would be possible to automatically do this. Using the same syntax does not seem likely to happen given the number of global identification systems we already have, eg Handle (RFC 3650), DOI, URL, ISSN, ISBN, LOC, etc...

The core of the problem is not coming up with another identification system but coming up with a identification relationship system. This would address not only the same thing with multiple identifiers but also the relationships of parts to whole and variations, such as revisions or translations. Let's work on that for a while (independent of the larger semantic-web stuff).

Looking for tool to show all windows of an application in miniature

I am looking for a tool for Macintosh that when you Cmd-Tab to an application all the application's windows are briefly displayed in miniature at the top of the screen even if the window has been minimized to the dock. If, during the time the miniatures are displayed, if you click on a screen it is brought to the front and un-minimized when necessary. Has any one seen such a tool?

Narrow cars

Since Toyota bought back my truck a few months ago the family has had only one vehicle. For the most part, having one vehicle has not been an inconvenience. Chris and I have to coordinate more but so far we have not needed to be in two distant and different places at the same time. I have also been riding my bike more.

However, we do need a second vehicle and so I keep looking. Sometimes I think about getting a very small car but every time I look at them I keep on thinking "why the hell are they so narrow?" Brunel in the mid 1800's demonstrated that wider vehicles had a superior level of safety, speed, and comfort. So why do car manufactures continue to sell us narrow small cars?

Update: Geoffrey's response was "Narrow streets." Most of these cars are designed for non-US markets where cities and towns have historical centers that have narrow streets.

-- Andrew

Misc about desktop

There is a lot of talk over at Minimal Mac about a spartan desktop. I do recommend Minimal Mac for its links to invaluable OS X tools. However, I frankly don't understand the whole fuss over an empty desktop. I never see my desktop as it is always covered with windows. Nevertheless, I do have a desktop background image that I took from the fantastic set of images of textures at Bittbox. Every now and then I see it because I press F11 to show the calendar I have embeded on the desktop using GeekTool.

The Newswipe Manifesto

[...] Yes, it turns out you were supposed to be paying attention to the news all this time. [...] Either way, your comparative ignorance leaves you ashamed. So you do something about it: you pick up a paper or you switch on the news. But because you’ve fallen behind it’s like tuning into episode 803 of the world’s most complex soap opera. [...] 
More...

Close but not close enough


Damn! I have been refreshing the Obey Giant store all morning for the opportunity to buy a copy of Close Knit only to find that I missed the release when I went out for my bike ride. I will have to donate the $50 I saved to another worthy cause.

Friggebods

Wow! Chris and I might need one of these for the backyard .. and the community garden! Found at TreeHugger.

Looking for references to the integrity and wholeness of building your own tools

I am interested in memoirs and research around the craftsman's needs and desires of making his own tools for his work. For example, I once worked for a instrument maker and he made many of this own tools for use in dulcimer and guitar construction. Most of these where jigs but others where more complex like his steamer for bending wood. I have been torn over the years between using someone else's tools for software construction and information management and building my own. I would like to understand how others have come to a settlement on this matter. Perhaps there is no settlement. Perhaps this tension is part of being a craftsman.

Bike Lust

I have been riding my bike more these last few weeks. I have also had to disassemble it a few times to fit it into the minivan along with two children, their stuff, and family beach stuff. Today I discovered Montague folding bikes and I want one.

Update: More folding bikes at Folding Bike Manufacturer Directory.

The occasional users and customization

I was glad to see Jakob Nielsen's Customization of UIs and Products today. The article supports my argument that your site must first support the needs of the occasional user. So make your site direct and simple. Nielsen writes in the The Importance of Good Defaults section “Despite its benefits, many users don't avail themselves of customization features. Users exhibit a strong bias toward simply getting things done on a website, rather than spending time fiddling with preference settings.” I take this further: For the vast majority of small businesses a single page web site is really all that you need.

How far the quality of sports broadcasting has fallen

Henry has become an ice hockey fan and so yesterday we watched the USA vs USSR match from the 1980 olympics. It was a great game. It was also a great broadcast. All there was was the game on the screen and the play-by-play announcer's voice. No forced jocularity among the announcers. No information graphics and animation that dominates the screen today. Even the score was not displayed. All of the factual information was relayed by the announcer. It was great to watch a game from end to end where what mattered was the game. It was an unfortunate reminder of how very far the quality of sports broadcasting has fallen over the last twenty years.

Craigslist Purchase Hunter RFP

During last year's Thanksgiving dinner a friend asked me about how to go about creating or finding a Craigslist tool to better support buyers and especially buyer intermediaries. The first step has nothing to do with technology. The first step is to clearly understand what the tool should do and how you would use it. The outcome of our discussion was the Craigslist Purchase Hunter requirements document. It is suitable for use as an RFP. If you decided to build this tool please tell us about it. Good luck.

FLAP bag project

The FLAP bag project is very exciting. I am also quite envious that Erik Hersman gets to ride around Ghana on a motorbike exploring the use of technology. Ignoring my self-centeredness, however, the simple application of solar cells, white LED, and reflective surface assembled into a practical bag enhancement is truly fantastic. Recall that much of Ghana has no electricity and no artificial light. If you have artificial light then at night you and your children can more effectively use the time for learning. With electricity you can recharge a mobile phone to communicate with other towns and urban centers. When you are among the bottom billion light and communication greatly enable you to raise yours and your family's standard of living.

Morning commotion around the chicken run

This morning the commotion around the chicken run was due to a full grown Red Tailed Hawk stuck INSIDE the chicken run. The hawk is an absolutely magnificent bird and we got to see it very close up. Unfortunately, we are currently missing Jenny, a very small bantam, and one of the new (full grown) Rhode Island Reds. We are hoping they both scattered into the surrounding landscape and will be back later today.

Update: All chickens are safely back in the run.

Best indication of successful IDE

It occurred to me this morning that the best indication that an integrated development environment (IDE) is working for you is when you use it just to edit a text file.

Droplets and wireless information displays

We are getting closer to mixing Zigbee and e-Ink. See Arduino+XBee+LCD Info Device and Droplet.

General assembly is responsible for RI fiscal problems

In response to Budget leaves more questions than answers in the Narragansett Times.

Letter to the Editor:

In RI the general assembly is responsible for the enactment of the budget into law. Our legislators' responsibility is to ensure the that the state operates to the benefit of its citizens. The sorry financial state that RI finds itself in is wholly due to their irresponsibility.

As David Caprio is fond of reminding us, the budget is complex. I agree, it is a complex document. (I have read it.) But it need not be. Why do we hide debit service? Why does the DOT have almost as many job categories (and thus pay levels) as employees? Why is "structural deficit" not labeled what it is "future debit"? Why are the annexes more informative than the main text? It is because the general assembly has little desire to let the light shine on this mess. To do so would illuminate negligence on their part to enact a clear environment in which to raise and spend RI's income. Recall, the governor proposes a budget and the general assembly approves it.

Until we have a general assembly that works together among themselves, with the governor, and most importantly with the citizens -- with veracity -- RI will continue see its future prospects dwindle.

UNetbootin successfully created a bootable USB stick

After a few unsuccessful attempts with other tools I found that UNetbootin successfully created a bootable USB stick with Ubuntu 9.04.

Keep the lead in

I don't mind reading long texts online. What I do mind is the terrible control of line height (leading) that most sites seem to have (this one included!). If you are creating a web site with content of more than one sentence would you please manage the line height as well as you manage the font size. The default line height for most browsers is too small. For example, in this image the text on the left uses a 14px font with the default line height while the text on the right uses a 14px font with an 18px line height. I find the text on the right much easier to read than that on the left. (Click the image for the full sized example.)

Update: I fixed this blog's line height. I doubt that this will enhance the value of the content, just make its worthlessness so much more obvious!

Building and installing the NetBeans Git plugin.

I wanted a NetBeans Git. The only Git plugin that I found that was also current is

http://github.com/myabc/nbgit/tree/master

I tried the 0.1 distribution but it did not work with NetBeans 6.7. So I built it from within NetBeans:

Clone the project...

1) At the command line "git clone git://github.com/myabc/nbgit.git"

Build the module from within Netbeans...

2) Choose File/Open Project... and pick "nbgit".
3) Choose Create NBM from the nbgit project's context menu

Install the module...

4) Choose Tools/Plugins
5) Choose Downloaded
6) Choose Add Plugins...
7) Select the plugin: Mine was at /Users/ajg/Documents/src/nbgit/build/org-nbgit.nbm
8) Restart NetBeans

You can now use the plugin to explore, for example, nbgit.

As far as I can see, there is no NetNeans UI where you can import a project from, for example, github.

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

http://calliopesounds.blogspot.com/2009/04/occasional-user-and-community-web-site.html

http://calliopesounds.blogspot.com/2009/04/less-technology-is-sufficient.html

http://southkingstownrinow.blogspot.com/2009/05/connecting-printed-information-with-web.html

http://southkingstownrinow.blogspot.com/2009/05/advice-on-making-community.html














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 http://blip.tv/file/2391051. 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 = DateTime.now.to_s
queue = "/queue/hellos"

puts "Producer for queue #{queue}"

client = Stomp::Client.new "system", "manager", "localhost", 61613, true

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

client.close

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

require 'rubygems'
require 'stomp'

queue = "/queue/hellos"

puts "Consumer for queue #{queue}"

client = Stomp::Client.new "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
end
client.join # without this the above subscription is not activated.
client.close

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.

What the fuck has happened to Saturday morning cartoons?

I am working in the living room and the kids are watching the Saturday morning cartoons in the the next room. I am only hearing what is happening on the shows and my anxiety level and accompanying physiological response is rising. The extreme levels of intensity, confrontation, and pure anger expressed in the music, the voices, and the stories is disturbing. After an hour of this I am feeling as an agitated and short tempered as the story's characters are and so are my children.

What the fuck has happened to Saturday morning cartoons? I am not expecting all sweetness and light but I am expecting a reasonable mixture of fantasy and reality, and of good times and bad. What my kids are seeing is a greatly distorted view of conflict and resolution and no view whatsoever of what it means to be human (even if expressed through animals). This is not new news as such. What is new is the almost single minded focus of this in every story.

Needless to say, Henry and Owen will not be watching this crap any more until we determine how to have balance. Any advise on what is new and what is old that it worth watching by 9 year olds is greatly appreciated.

The village is so wholly broken in the USA.

Mixing E-ink and ZigBee?

Regards Extra space, Is there a device out there that mixes E-ink and ZigBee? I am interested in the idea of sending "fact sheets" to the device every few seconds or days for continual display.

The rate of personal data accumulation is just crazy

The rate of personal data accumulation is just crazy. Today I discovered I had only 8 G of disk space left on my new MacBook. I have had the MacBook for about 2 months and I was already 93% (112 G/120 G) through it. How can this be? Reviewing what was there I see

8 G free
5 G software development tools/applications (ok this is what I use for a living)
6 G other tools/applications (ok, some of these I use for a living, others for fun)
30 G customer data (ok, important to have and to keep)
23 G personal data (what!)
40 G that I couldn't specifically attribute (what!)

How did this happen? How did I have 23 G of personal data? It turns out that 10 G of it is an iPhone development video lecture series: Once I watch it I can delete it. But still, 13 G was just my shit. And this does not include all the gigabytes of data I have on my home server. 13 G is a lot of personal stuff. Perhaps not any more with the number of images, music, movies, and other large digital formats. But then, I really don't want to store those movies and that music I own. I just want their use whenever I want. But, alas, I can't have that yet without incurring the cost of storing them.

The lesson is that while I can manage some of this growth -- thin out my personal collections every now and then -- I can't manage most of it and so I need to find a really cheep source of local storage. Sigh.

Looking for visual designer

If you are a visual designer for web (mostly static) and/or print and are interested in collaborating with me please send email to andrew@andrewgilmartin.com. I don't have any projects today but there seems to be work in early Fall that I would like to win. Looking forward to talking with you.

Are you who you say you are?

Are you who you say you are? Establishing your identity authoritatively on the internet is almost impossible to do. Just because an email account, LinkedIn id, Twitter id, Facebook profile, Ning profile, AOL id, etc uses the letters A N D R E W G I L M A R T I N does not mean it is me. The only way to establish identity is to build a body of evidence online. So that when I search for you online I find a lot of information (bits) that link these online presences to your life of family, friends, work, and possessions. If you are a politician, administrator, candidate, or anyone with the need to have a public identity make sure you get online soon and build that body of evidence.

This posting is inspired by Twitter to verify accounts for politicians, agencies and other celebs. Which is an idea doomed from the start to failure.

You might also be interested in Geoffrey Bilder's trust tag on Delicious.

Re: FlairBuilder review

This evening I received from Cristian Pascu a response to my FlairBuilder review. I am posting Cristian's entire message as it does help better understand FlairBuilder and its audience. That Cristian took the time to directly address my criticisms does speak well of his commitment to creating a valuable product.

From: Cristian Pascu
To: andrew@andrewgilmartin.com
Date: Tue, Jun 2, 2009 at 7:59 PM

Hi Andrew,

Thank you for taking a look to FlairBuilder and for your honest review. With your permission I would like to add my comments to your thoughts only because there are somethings on which are agree with you and some other that I’m not sure I understood them exactly.

"There are no general nesting widgets and no split pane widget.”

I tried to introduce a split pane widget but then I faced the issue of having a liquid layout, something that is possible in coded prototypes but harder to do when defining an UI by simple absolute positioning. There is a trade off between having coded like prototypes with nested widgets like tabs, accordions and a simple plain contraints-free layout. I am not at all saying that I found the middle ground between these two, and feedback like your surely help me see where I stand exactly the this time.

On the other hand I don’t understand what do you mean by general nesting widgets? My single container is a canvas, starting with pages themselves. Tabs and accordions are also comprised of set of canvases. When focused, a canvas is surrounded by a yellow border denoting an area to which contained widgets are bounded. Unfortunately yes, to unbound an widget you’d have to cut/paste it else where. This is a limitation no one really complained too much about until now. Nevertheless, it is something I want to correct as soon as possible. I was thinking about Ctrl+drag to move outside the container or simply detach dragged widget once its boundaries have gone outside the container margins. This widget bound to a container was mainly forced by the tabs/accordions because you’d want to be able to flip from one tab to another. Having widgets simply absolute positioned within the page would not have allowed me to mimic a tabbed interface.

"All the widgets are fixed size and so my approach of laying out the widgets using their natural nesting and then tuning their positions and properties was not possible.”

What exactly do you mean by fixed size? Couldn’t you resize widgets? In case of some widgets like Tabs or Groub box you’d have to Ctrl+click the area inside that widget to selected the widget itself and then resize it, or Ctrl+drag to move it around. Otherwise, any other simple widget should be easy. I’m bit puzzeled here and I suspect that in fact other was the the issue you were facing. Would you mind clearifing this for me?

"this indirect model of interaction can be difficult for non-programmers”

I have users that when communicating with me use a non-programmer language, but still they seem to be able to use FlairBuilder. Not that you are not right, I’m just hoping that I’m not too far from a non-programmer friendly user interface. I am very much afraid of introducing very technical terms into the FB’s UI and I admit that this is very much possible given my background.

I strive to provide a tool that makes it easy for non-programmers to build interactive prototypes, the kind of prototypes they have been creating in PowerPoint or Excel or PDF. Therefore, provide the minimum set of l’n’f customization and a sufficient set of interactions to describe desired behavior up the level where it mimics enough the intended real product. I personally believe that not everyone have to skill to see far enough behind a static image, especially when it comes to more advances interactions. I may very well be wrong here.

Once again I thank you for sharing your thoughts about FlairBuilder. I will surely use your feedback trying to make it a useful product

Cristian

FlairBuilder review

A client asked me to quickly take a look at FlairBuilder. FlairBuilder is a cross-platform tool for rapid authoring of interactive wireframes and software prototypes. The 2¢ summary is I generally liked Flairbuilder but would not use it much.

I used it to create a simple two window interface where the second window pops up from the first. The interface creation tools were adequate to build the interface's look and interaction. Before building the interface I had a mental model of how the components were nested -- radio button groups within field sets within panels within split panes, etc -- but I could not directly apply this mental model to FlairBuilder's implementation model. While nesting is supported it is very rough in comparison to pure GUI builders like NetBeans' Matisse. There are no general nesting widgets and no split pane widget. Un-nesting is not possible as far as I can tell. (Perhaps it is just cut and paste.) All the widgets are fixed size and so my approach of laying out the widgets using their natural nesting and then tuning their positions and properties was not possible. Instead, you really need to have planned the interface before using the tool. Using the tool to explore is, I feel, not its strength.

You can create interactive models of the application. I find this less useful than showing specific scenarios in a storyboard presentation form. However, creation interaction within FlairBuilder is easy for a programmer to use. That is, the model of interaction as a series of "actions" responding to "events" has become natural to a programmer as this is how most GUI toolkits are implemented. However, this indirect model of interaction can be difficult for non-programmers.

The pixel perfect widgets -- radio buttons look like real radio buttons and data tables look like real data tables -- will inevitably lead me down the path of unnecessary precision in the prototype. This unnecessary precision would become a huge time-sink as I twiddle with widget properties, colors, and especially spacing. Given that there is no automatic widget sizing there would be lots of small changes necessary when re-aligning widgets.

I recommend considering Wireframe Sketcher and Balsamiq.

Update: See Cristian Pascu's response inRe: FlairBuilder review.

New master plan for Mecca is stunning

Wow! The new master plan design for Mecca is remarkable. 2 million worshipers can be accommodated. This can increase to 5 million if the whole mosque is replaced. The video presentation is at Fast Company.

Extra space

A great example of why your tool's screen-bounded user interface will never accommodate your user's needs. Found in Our Favorite Tools for Sketching.

This also reminds me to post a picture from Scott McClouds Making Comics -- which I think is his best book of the Understanding, Making, and Reinventing series -- of him (or is it his character?) sitting at a drafting table. So much useful empty space around the drawing paper. How easily and effectively can I use the empty space around this window I am typing into?

I have the idea that any day, real soon now, I will be able to get a half dozen wireless display panels to associate with my desktop and just spread them around as my working surface. I have been waiting since I first read The Computer for the 21st Century in Scientific American in 1991.

Oh, by the way, I am happy with monochrome panels of only several hundred pixels square using a low power protocol such as ZigBee.

It is a one-ways hash

I keep on forgetting to correct my use of terms. The substitution cipher in the last postings is really a one-way hash function. That is, you can not reverse the ciphering process and get the, in this example, domain name. This is because more than one character is mapped to a single digit. In the demonstration grid all instances of 'a', 'g','m', and 's' are replaced with 1. And everything that is not between 'a' and 'x' is replaced with 0. This is a one-way hash. The most famous is the MD5.

The start of a bookmarklet for generating passwords

Following up on yesterday's password generation posting, here is a Javascript generate passwords based on the last two names in the domain name. It is presented in a form suitable for use in a bookmarklet.


( function( substitution_cipher_grid ) {
substitution_cipher_grid = substitution_cipher_grid.replace(/\s+/g,'');
var substitution_cipher={};
var rows = substitution_cipher_grid.split('.');
for ( var r = 0; r < rows.length; r++ ) {
var cells = rows[r].split( '' );
for ( var c = 0; c < cells.length; c++ ) {
substitution_cipher[cells[c]]=c+1
}
}
var domain = window.location.host.split('.').reverse().splice(0,2).reverse().join('.');
var password=domain.split('').map( function(c) { return substitution_cipher[c] || 0; } ).join('');
window.prompt( 'Password for '+domain+' is:', password );
} ) ( " a b c d e f . \
g h i j k l . \
m n o p q r . \
s t u v w x " );


The substitution_cipher_grid is expressed as a Javascript string where each row is separated by a period and each cell is separated by a space. Again, the actual grid used here is only for demonstration and should not be actually used.

The most significant flaw in this example is having the substitution_cipher_grid encoded in the bookmarklet. Ideally, the first time the bookmarklet is used it would ask for the grid and store it away until you quit the browser or its time expires. This is the functionality of a cookie. Unfortunately, I do not know how to make a cookie that is only associated with a bookmarklet. Another caching mechanism would be acceptable too. Any ideas anyone?

Update: The code has been updated to not use the strip() function. I did not realize during testing that I was within a site that was using Prototype which adds methods to Javascript objects. One of these methods is strip().

A password generator I can remember

I want a password generator that I can remember. In most cases I will have my phone or computer that can be used to regenerate the password. However, I don't want to be so reliant on these tools for this. It would be great if I had a system that worked outside of the virtual world too. I want to be able to regenerate the password with pencil and paper if I need to. What I need is a substitution cipher and a secret or two.

For example, lets say the secrets about the password are that 1) it uses the substitution cipher on the domain name and 2) appends a memorable suffix. For example, for "yahoo.com" the substitution cipher is "012330331", the suffix is "MainSt", and so the password is "012330331MainSt". This is a fairly good password. It is not a dictionary word and it contains a mixture of numbers and letters of different case.

The cipher is made by arranging the letters of the alphabet in a grid. The substitution is had by finding the letter in the grid and recording its cell position – choosing the x and y or perhaps just one dimension as done here. Any character not in the grid is replaced with 0. The grid used for the cipher above is

cypher-grid-a

The grid is 4 rows of 6 columns with the alphabet filling the cells from left to right and top to bottom. The column numbers are the substitutions. This is not a very good substitution cipher, however: It is shown here simply to have a clear example. The following grid is better as the alphabet fills the cells in a non-obvious way but, for me, easily remembered.

cypher-grid-b

The "yahoo.com" substitution is "012440243".

A hacker might try using a substitution cipher on your password but it would take them up to 40,353,607 guesses – there are 7 replacement numbers (0 through 6) multiplied by the number of characters in the domain name (9), eg 7^9 -- but they still would not have the secret suffix. Further, well before 40,353,607 login attempts Yahoo! would have locked out the account.

I am not sure if I will use this technique just yet. It has all the characteristics I want. It is also easily coded as a bookmarklet or web application and an iPhone application.

If you know of similar password generators or better ones please send me a note.

Update: I like the ideas behind the password card at http://www.passwordcard.org/

Chickens: Status 18 May AM


Well, we can't tell which of the eight chickens are sick. In fact, after reading far too much about the composition of chicken poop we are not even sure that they are sick. Nevertheless, all the chickens are now in their own recuperation box, under lights in the studio's bathroom. If there was any doubt about our sanity this picture clearly clears that doubt away.

Jim Coombs's tools

The Extreme Geek piece by Cory Doctorow on writing tools reminds me of Jim Coombs's tools. Writers using geek tools to aid the research and composition process. Coomb's tools used XEDIT under IBM's mainframe VM/CMS operating system. His tools were implemented well before the web and so not much evidence of their existence is easily found today. This period is captured in McCarty's HUMANIST: Lessons from a Global Electronic Seminar.

FYI: The timing of local news cycles

The timing of local news cycles nicely supports some of what I wrote about in yesterday's Journalism and the new news organization's three products.

Journalism and the new news organization's three products

I agree with comments (other places) that much of the discussion about the demise of newspapers did not distinguish newspaper publishing and journalism. The newspaper publishing business model is on its last legs. While I will miss the physical artifact I don't mind seeing it go. Journalism, however, is needed now more than at any other time in its history.

Government at all levels encompasses more of people's lives that ever before. It is huge: from products to processes to places there is not much that is not touched by a regulation. Without investigative journalism we, as a country, will be lost. Any corruption we have now will pale in comparison to what we will have. Any danger we have now will pale in comparison to the future dangers we will have. Journalists study these things. They are the nudge that gets answers. Journalism needs to be supported.

There is talk that David Geffin will buy the New York Times and make it a non-profit. Something like what was done for the St Petersburg Times in Florida. On the surface this seems like a good thing for the New York Times. However, given how much debt the Times has it is already a non-profit. But seriously, making all news entities non-profits does not make long term sense. I am sure that there is enough philanthropic money out there to do it but journalism needs to stand on its own feet. We don't want "journalism" to have the same air as "academic" has today -- work distinct and unrelated to everyday lives.

What to do? My opinion is that news organizations need three products. The products are distinguished by factors of intellectual effort and historical perspective. Each has a different business model. They all derive benefit from skills and act of investigative journalism.

The first product is the "news stream." The recently released Times Wire is a model presentation for this. News streams represent the events and reportage happening now. A better Twitter for the news room. The content is enough for the reader to get the gist of the story. Sometimes the content comes from journalists but content can automatically from the raw data available from sources such as government administration, police, fire, hospitals, etc. Overall, there is very little editing that does into the news stream. The news stream is paid for by advertising. It is free to the reader.

The second product is the "news edition." Its primary function is to present a day's or a week's worth of general local and regional news and information to the public. It is similar to the newspapers and news magazines we have today. This contains some of what is in news stream but in longer form. Long form investigative pieces are its bread and butter. What is investigated is, in part, driven by the readers choices. The news edition is paid for by advertising, subscriptions, and single issue purchases. Advertisements must be subscriber specific (just as Google search is today) so a higher advertising rate can be charged.

The third product is the "news horizon." They are reports containing a deep investigative analysis of a single topic. "Commercial Fishing in South Kingstown", for example. It is informed by the current and historical trends and the current and historical facts. Depending on the topic it is updated biennially , yearly, or quarterly. It is considered the principle source of an objective perspective on the topic. Its readers are businesses and investors and sometimes the general public. The news horizon is a subscription service and single issue purchases. Any advertising would be limited to an underwriting notice.

Just Landed: Processing, Twitter, MetaCarta & Hidden Data

Just Landed: Processing, Twitter, MetaCarta & Hidden Data is brilliant example of social visualization from found data.
Just Landed - Screenshot

Eight chickens

If you build a coop then you should expect chickens and be prepared. But, just like when H&O came, I feel totally unprepared. Having successfully cared for H&O I expect that I can do the same with the eight new additions to the household.

No plain text password

Every site that asks that you register and use a password should clearly declare whether the password is stored in plain text within their systems or not. No system need store a password as plain text but so many sill do. Sigh.

South Kingstown, RI Now and Transparent Government

My head these days is stuck in thinking about and working to achieve a more transparent government and so some of my actually interesting postings are over at South Kingstown, RI Now. Interesting even to non-Townies.

^T ? "three significant terms" ^M

The most used keyboard combination used during my day (besides the backspace!) is control-t, question-mark, "three significant terms", and enter.

Where would I be without fast access to Google in FireFox?

Chicken 911?

Chris and I have discovered that we are late ordering chicks for our coop. McMurray Hatchery is mostly sold-out. Agway is still taking orders. Alle's is not. And so our selection of breeds is limited. If you know of other places in RI where we can order chicks please send details to andrew@andrewgilmartin.com. Thanks.

Wooden Baskets for Mother’s Day

Here is one of the two wooden baskets Henry and Owen made this weekend for Mother’s day. The baskets were inspired by a small book on weekend projects – a kind of “Vogue for men”. All you need is a miter-saw, glue, and wire nails. It takes about an hour to cut and prepare the pieces and about another hour for a 9 year-old to put it together.

Chris and I have a plot at the new South Kingstown community garden and so this baskets will be useful for carrying out weeds and veggies.

(This posting also tests the Windows Live desktop software for blogging (and for photo gathering and management). I have been looking for a Blogger editor for sometime and so if this one works I can move on to other sources of minor irritation.)

Using inotifywait with queue directories

After writing Using directories as queues I realized I did not mention how you should check the queue. Using a cron job is usually adequate. However, this does mean your script will be polling the queue-directory and having to distinguish been an empty and a non-empty queue-directory. If you don't like polling then use inotify and specifically inotifywait (part of the Ubuntu package inotify-tools). For example, this command line will monitor the directory /queue/new and when files are added to or moved into the directory the word count command is run.

Q=/queue ; inotifywait \
   --monitor \
   --event moved_to \
   --event create \
   --format "mv $Q/new/%f $Q/cur/ && wc $Q/cur/%f" $Q/new/ | sh

Using directories as queues

Software managed queues are great tools. Most enterprise system installations have some sort of message broker available. These are sophisticated tools. This posting is not about them. This posting is about using directories as queues.

The basic idea of using a directory as a queue is to place new "work" as a file in a "queue" directory. When the queue-processor is ready to process the new work-files it first moves the queue-directory's files to the queue-processor's "working" directory and then processes them.

The assumption here is that the work-files have all their content. But we all know that writing to a file takes time and during this writing time the queue-processor might awake and start processing the new, incomplete work-files. This is not good. If you are using a directory as a queue it is likely your queue-processor is a script and, unfortunately, most script solutions have poor error handling. The result is that the incomplete work-file gets ignored.

The good news is that there is an easy solution. I first saw this solution used within the qmail MTA. A feature of Unix file systems is that adding to or removing files from a directory is an atomic action. That is, all processes wanting to alter the set of files in a directory are queued up and only one at a time is allowed to make changes. So, when you write the work-content file make sure to write it first outside of the queue-directory and then move the completed work-file to the queue-directory. It is critical that the the work-content creator do the moving.

The archetype for this is to create a queue-directory containing two sub-directories
mkdir queue/new/
mkdir queue/tmp/
Add the work-content file to queue/tmp with a globally unique file name. Once writing is finished and the file closed, then move it from queue/tmp/ to queue/new/. This even works nicely across networks, for example
QUEUE=/x/y/z
SOURCE="/a/b/c/foo.txt"
TARGET="$QUEUE/tmp/$(basename $SOURCE)-$(uuid)"
scp -q $SOURCE user@host:$TARGET
ssh -q user@host "mv $TARGET $QUEUE/new/$(basename $SOURCE)"

See also Using inotifywait with queue directories.

Rhode Island's state budget study group

I am forming a study group to read and discuss the actual Rhode Island's state budget. Tom Sgouros, of the Rhode Island Policy Reporter, has agreed to facilitate the group. He would help us understand the necessary background and generally facilitate the meetings. The group's members would be responsible for assigning readings and presenting summaries. Over the course of several meetings we will have collectively read the budget. I know this incredibly wonkish and verges on crazy but I can't imagine truly understanding the RI budget any other way. If you are interested please contact me at andrew@andrewgilmartin.com.

A new technical lust


Man, just when I was recovering from my Kindle 2 technical lust I now find myself lustful for the Kindle DX. At least I have until the summer to save my pennies for this one. Does anyone out there want me to join their Kindle development team?

TweetChat

Just found TweetChat and it is very useful Twitter tool. It allows you to focus on a single area of twittering conversation that it calls "rooms." Within a tweet, a room is indicated by a name preceded by a hash mark, eg "#gov20" and "wif09". TweetChat could be improved by showing the resolved URLs (and perhaps page title) of each tweets' embedded tiny URLs.

See also hashtags.org.

cross section cut away

While looking for the the Google container image to use in a previous posting I found that a Google image search for cross section cut away yields lots on interesting images.

Physical infrastructure behind the pixels on the screen

It is good to see what physical infrastructure there is behind the pixels on the screen. This short video shows one of Google's container-based data centers. I wonder if there is video of one of Amazon.com's fulfillment centers?

Re: Flash is now on a leash.

A quick follow-up on my posting Flash blocker for FireFox. The Flashblock extension has returned sanity to my web browsing and using experience. Highly recommend.

Re: Narrow-minded Data Visualization

My comment to Nathan Yau's Narrow-minded Data Visualization over at FlowingData: The more that can be done to raise level of the journeyman's use of formal visualizations in public settings and their comprehension by the public at large the better off we all will be. The level of functional illiteracy and innumeracy in the USA is too high to offer anything more than the most prescriptive of rules and examples -- ie, "use visualization X when you need to convey data Y".

Library hours need an easy rule for hours of operation

The hours of operation of the three South Kingstown libraries will be changing soon and not because Winter is ending and Summer beginning. We are seeing this kind change all over the state in response to the budget troubles towns are having. Some libraries are reducing the number of operating days per week while others are simply reducing the number of operating hours per week. I have a question about the change in hours. Why not keep the libraries open each and every day and for the same operating hours?

I believe there are 135 winter operating hours across the three South Kingstown libraries. Kingston Library comprises 36% of the operating hours, Pace Dale Library 44%, and Hale Library 21%. You could spread the 135 hours over the three libraries so that Kingston gets 7 operating hours/day each day, Peace Dale get 8, and Hale gets 4. Or, if you wanted to cut hours by 20% then you still could open all libraries each day with Kingston getting 6 operating hours/day each day, Peace Dale gets 6, and Hale gets 4. This speadsheet has the math.

It is much easier to plan to use the library when you have an easy rules to follow for the hours of operation. You don't even need to have continuous hours; you could use the European custom of having a break in the middle of the day and offering hours 9 AM to 1 PM and 4 PM to 7 PM.

Cambridge is a good place for a research park

The Providence Journal's A decision at URI: Build a research park or save the ‘Century Forest’ story suggests to me that URI too narrowly confined the possible sites of its research park. A research facility needs at least as much access to money, services, and skilled staff as it does to faculty and their laboratories. The proximity to the URI campus is more for the benefit of URI's image as a "Think Big" institution than for anyone else. If you really want to support the researchers then place the facility in Providence or, for a higher expectation of near term success, in Cambridge!

Less technology is sufficient

O'Reilly Radar has the great posting Tweenbots: Cute Beats Smart where cute robots achieve their goals by relying on the kindness of strangers. The basic idea is to have the robot transport itself from one end of Washington Park to the other. The problem is that the robots can only move in a straight line. To achieve their goal they need people to set them in the right direction time and again. And it happens.

Technologists -- me included -- spend a lot of time over thinking a problem as one requiring a comprehensive technical solution. More often than not, less technology is sufficient. Let the person or persons who have the problem develop their own means of using a new and limited tool -- albeit specialized -- in conjunction with their existing processes and tools to enable a solution. A problem solved this way is more likely to be used and be resilient in the problem's environment -- an ever changing one, most likely.

Re: Looking for a better iPhone camera application

Regards my Looking for a better iPhone camera application posting is an answer in A Spate of Excellent Photo Apps for the iPhone.
Has there ever been (in modern times) a woman dictator?

The occasional user and the community web site

I find both Facebook's groups and the Ning sites are less than usable for my needs. Both are far too complex for effective occasional use.

This is a general criticism of community web sites. (And not a criticism of the importance of the community or it having a site.) It is also another data point in the discussion about primary and secondary awareness and information tools. For the community organizer the community's site is a tool for doing stuff. For the community member the community's site is for awareness about stuff. While community site's tools and presentation need to support the organizer and members it should foremost support the members.

Primary tools can be complex because their use is a significant part of our getting things done. A good example of primary tools are email clients and spreadsheets. Secondary tools need to provide only what is necessary to raise our awareness or get a specific task done quickly and without or with minimal training. Anything more and the secondary tool is competing with the primary tool. And when it competes it looses.

For any community web site, all an occasional user needs is a single page -- preferably the front page -- with the following four sections

1) the next few weeks of events (and an iCalendar feed),
2) announcements (and an RSS feed),
3) news highlights (and an RSS feed), and
4) a welcome section for newcomers.

Any more structure, information, or functions than that and I am lost, overloaded, and/or distracted. And if this is my response, then I suspect it is the response of the other occasional users.

If there is a way for getting this kind of presentation in Facebook groups and Ning site please tell me. Otherwise, I just need to keep myself organized -- which is not a bad thing!

Flash is now on a leash.

I couldn't take it anymore and so I installed an Adobe Flash blocker extension for FireFox. I spent some 15 mins just now waiting for Flash to stop hogging the CPU so much so that Process Explorer was not able to be used, having to reboot the machine via the Big Red Switch [*], and then, AND THEN, having to do the whole thing over again because I stupidly told FireFox to restore my previous session which reloaded the page containing the Flash script that hogged the CPU. Sigh.

[*] I wish my current computer had the viscerally satisfying resistance and thunking sound that came with using the original IBM PC power switch.

Tools for stitching, tiling, panning, and zooming

Update: The URL is now http://www.seadragon.com/.

Update: Changes in the Microsoft services have hbroken Photozoom and Seadragon working together. The map, however, is still available at DeepZoomPix (Photozoom's new name and site). Microsoft's Silverlight is needed.

Today I wanted to take the USGS 7.5 Minute Series map of the Kingston, RI quadrangle images and allow the user to pan and zoom on the web. Within a few minutes I discovered Microsoft's Image Composite Editor, Photozoom, and Seadragon. These tools worked quickly, without error, and at almost no effort on my part. I am very impressed. I am also humbled. My industry is full of REALLY smart people.

FireFox and Flash dance the "CPU lock" dance!

I am NOT a happy web application user. My main computer is a Windows XP box with a Pentium 4, 2GHz CPU, and 1.5G RAM and yet I still get multiple second response times from FireFox. And, God forbid, that I should watch a video via Flash because then I get no f'n response for several minutes as FireFox and Flash dance the "CPU lock" dance!

Newspaper adventures online

This is a very interesting posting regards how poorly newspapers have adventured online.

"In essence to secure the advertising for the print edition, they have in the past completely undermined the business they need to survive in the future. They have told every one of their advertisers that online adverts are not worth paying for."

Not new news but a good recap.

Electric car and the grid rant

Whenever I hear someone say that the electric car is the future of the automobile I never hear that followed up with a statement about how we can trust the grid to be there to power it. Because we can't trust it! If we have brown-outs and black-outs across the USA during late afternoon and early evening because the grid can't currently support the draw needed to support all the commercial, industrial, and residential need that coincides at that time then how the hell can we support plugging-in the cars? I am reminded of the horrible sound on the work-floor of a software development department when the background noise of hundreds of hard-disks and cooling fans decays as they all stop spinning. You know viscerally that your productive day has ended. What is your neighborhood or town going to sound like when we all arrive home at 5:30 PM and "top up" the car?

Rant sparked by Wired's article Power to the People: 7 Ways to Fix the Grid, Now.