GameKeeper moving to "the bucket"

The GameKeeper, a game store that for so long has been in the Arcade in downcity Providence, is moving as of Monday, January 14 to the Hope Artiste Village at 1105 Main Street, Suite 2225, in Pawtucket. The GameStore's owner is a great source of information about games for all ages. Henry, Owen, and I have had a great time playing the various games he has recommended.

FireBug and memory consumption

FireBug (for FireFox) makes debugging DHTML both possible and effective. The downside is that over the course of a long debugging session it consumes all the memory on the machine. As the picture shows, FireFox/FireBug is consuming 1.5G of virtual memory but worse 1.1G of actual memory.

Mixing literate programing and wiki markup

I have always liked the ideas around Knuth's Literate Programing and today I came across the LiteratePrograms! site. This site is a MediaWiki instance enhanced to support literate programming using the Noweb syntax. Best of all, one page can be used to generate multiple source files as demonstrated for this Java rot13 implementation.

Helping your kids (and ourselves) building and controlling their own devices

During Christmas dinner yesterday, I was talking with Craig McNeil about preparing myself for helping Henry & Owen to explore building and controlling their own devices. Part of Craig's research is building scientific instruments and so he is well along the hardware path whereas I am further along the software path. Here is a list of resources that came out of the conversation.

Modern Device has a Arduino microcontroller kit originally designed by Paul Badger for his RISD students's art projects. It is very reasonably priced and easy to construct and program using Processing.

Picaxe is another microcontroller with lots of sensor accessories. Craig uses this in his instruments.

Squeak is a modern development of the SmallTalk (textual) programming language. The most significant development in this for kids is EToys. Squeak by Example is a good place to start learning Squeak.

EToys is a kid orientated (graphical) programming language. The One Laptop Per Child EToys site has a good collection of information about EToys beyond how to use it on the OLPC.

Logo was the first software language designed for children. I think this is still the language used in Lego Mindstorms. This is today overseen by the Logo Foundation.

NetLogo is a simulation orientated variation of Logo.

FIRST is an organization that promotes interest in the sciences. I know about them because at the last Providence Geeks gathering there was a presentation about RI's involvement with FIRST.

Getting Started with Grails

I have just finished reading the free online book Getting Started with Grails. Grails is a "Ruby on Rails" competitor that uses the Groovy scripting language. Grails follows the convention over configuration approach to application development and it seems to do a fantastic job. The advantage of using Groovy over Ruby is that Groovy srun in the Java VM and so you have access to the best of class tools available in Java.

I have not yet experimented with Grails and so I do not know how much practice differs from preaching. I have a small project based on Galley that I would like to use to test out alternative frameworks. I had intended to build this first with Rails but I think I will use Grails instead.

Rosa's Testing Tools

I asked Francisco Rosa, CTO at Tizra and author of WebTst, what web application testing tools he uses and recommends. Here is his response:

"I am currently using Selenium [1] ... it really rocks since it allows you to do real UI testing ... You can pretty much do all your system integration testing that way and even test your site's JavaScript code ... pretty nice ...

"That covers at least part of the testing, other parts I cover with TestNG [2] for unit testing (have no idea how you can live with JUnit without the decent test classification TestNG provides) and with WebTst (still) for monitoring testing ...

"I also do continuous integration with cruise control [3], coverage reporting with Cobertura [4] (AgilePDF is up to 64% code coverage :-) ) ... all in all pretty cool (IMHO) ...

"I can no longer imagine development without all these tools/practices: system integration testing, UI testing, unit testing, monitoring testing, continuous integration and code coverage reporting.

"[1] http://www.openqa.org/selenium/
"[2] http://testng.org/doc/
"[3] http://cruisecontrol.sourceforge.net/
"[4] http://cobertura.sourceforge.net/

"Hope this helps!"

Yes it does. And do I have a lot to learn!

Working below one's means

"You must always work not just within but below your means. If you can handle three elements, handle only two. If you can handle ten, then handle five. In that way the ones you do handle, you handle with more ease, more mastery and you create a feeling of strength in reserve." -- Picasso

Maximizing PageRank via outlinks

Leigh Dodds's blog has a link to the paper Maximizing PageRank via outlinks about optimizing the Google page rank of a site. The basic strategy is to have a sequence of pages where each page links to the next page in the sequence, each page links back to all previous pages in the sequence, and the final page is the only page with outlinks. The paper illustrates this I am sorry to say that I have not read the paper as the proof looks like more than I can handle.

Interaction problems with Yahoo! Video

I have seen the beginning of Bill Scott's Yahoo! Video presentation several times today! The reason for this is that there is no way to know which interaction widgets are in-page interactions and which are cross-page interactions. Given that the presentation is about UI the problems on the page are all the more prominent. For example, "Share by email" is a cross-page interaction while "Save to del.icio.us" is in-page interaction (actually a pop-up window interaction) and yet they have the same visual design; the "+Add" is an in-page interaction even though it looks like a button which normally affords cross-page interaction; the rating stars are a cross-page interaction when generally this is an in-page interaction (especially when logged in).

Bill Scott's rich user interface design for web applications presentation

Bill Scott (again of Yahoo!) gives a great presentation about rich user interface design for web applications. (It has been a slow day at Andrew Gilmartin & Associates!)

The presentation also mentions the new Yahoo! Teachers "Gobbler." Gobbler is a tool panel that sits over web pages and allows you to clip content from the page for placing on a "project" page. Project are web pages that organizes web content for one or more lessons. I used it a little today and it does work. I need to use it more to see how it compares to the idea of "binders" that we tried to incorporate into AccessScience several years ago when it was built and hosted by Ingenta.

Steve Souders's web page performance best practices

Steve Souders (Yahoo!) gives a great presentation about web page performance. The 14 best practices are
  1. Make fewer HTTP requests
  2. Use a CDN (Content Delivery Network)
  3. Add an Expires header
  4. Gzip components
  5. Put stylesheets at the top
  6. Move scripts to the bottom
  7. Avoid CSS expressions
  8. Make JHS and CSS external
  9. Reduce DNS lookups
  10. Minify JS
  11. Avoid redirects
  12. Remove duplicate scripts
  13. Configure ETags
  14. Make AJAX cacheable
Many of these seem obvious at a gut level and the presentation gives detail about why at a technical level they are so.

The need for a richer and integrated data environment

I wrote this in a comment to David Ascher's posting about SOGo: Thunderbird-inspired and Thunderbird-compatible Groupware.

One of the great advances of the desktop rich applications was the compound document. Mixing text, images, interactive charts, active diagrams, busy/free displays with a simple drag and drop. The machines of the time were a little underpowered for this task but that should not take away from the advance. The compound document frameworks were also very difficult to program to. Mostly the power software houses like IBM, Microsoft, Borland, Lotus, Claris, Taligent, etc did it. The underpowered houses could not and so created data and display islands.

Another of the great advances was the expandable shell. The first one was OS/2's Presentation Manager. Then came Windows 95's Explorer. Linux had Nautilus. It is a very compelling idea to have a single tool that integrates browsing and searching hierarchical collections of data. The shell frameworks were also very difficult to program to. Mostly the power software houses like IBM, Microsoft, Borland, Lotus, Claris, etc did it. The underpowered houses could not and instead presented other independent hierarchical displays.

We need to go back to these ideas and implement them now with the more powerful machines and high level languages and toolkits. I really don't want Thunderbird to be so deep so as to enclose these tools and data repositories. I want a lighter touch. I want Thunderbird to provide interactiveness that is not currently available via the browser. Thunderbird needs to be a super-browser. I want it to show the way to where browsers need to go.

Comments on "The Slow Death of the Technical Specification"

The "The Slow Death of the Technical Specification" is another reason why so much slipshod work is passed off as finished work. Preparing the technical specification is an initial and thorough implementation of the work on paper. The coded implementation is the second implementation based on the strengths and weaknesses of the first paper implementation. As Fred Brooks says, plan to throw one away; you will, anyhow.

A work needs to be reviewed. The customer needs to know that they are getting what they asked for. How do you review a working implementation -- a web site, a desktop application, or an infrastructure? How do you review a paper implementation? People have been developing the skills and using the tools necessary to review a linear presentation of a work since secondary school. A very rare few people have the skills or tools to review a working implementation. Not having the written specification is short changing both the customer and the supplier. The customer gets something they are not in the position to review and the supplier is in the position of not knowing if the implementation is what the customer wanted.

The weakness of the paper implementation is that it does not define the coded implementation. The construction industries have "as built" blueprints. These are the original blueprints with annotations detailing the differences from the design and the construction (i.e. implementation). Software needs these too. We just don't have them yet.

Unfortunately, I have supplied much software without initial or even afterward technical specifications. Hardly great moments in a software development career.

Timezone math

For the last several years I have worked daily with folks in the United Kingdom and California. When communicating about times you must always include either timezones -- e.g. EST, PST, GMT (I can't bring myself to use UTC) -- or time pairs -- e.g "11:52 AM / 2:25 PM" -- in the conversation. To help keep my sanity I use FoxClocks to show in the Firefox status bar the times for each zone.

A really useful enhancement would be to be able to select one of the zone displays, enter a time, and have the other zone displays show me the time in each of their zones. For example, in this mockup I have ticked the "Peace Dale" time, entered "9 am", and FoxClocks would display the times for San Francisco and Oxford.



Perhaps this feature already exists in one of the many desktop widget sets available.

Update: The The World Clock Meeting Planner which allows you to display a timetable configured for serveral locations.

Looking for web-based contact management tool recommendations

I am looking for a web-based contact management tool either open-source or commercial. The features I am looking for are
  1. Add person.
  2. Add company.
  3. People and companies have the attributes name, telephones, emails, addresses (time zone), and description.
  4. People and companies have tags (al del.icio.us)
  5. Associate person with company.
  6. Associate person with person.
  7. Associate company with company.
  8. Associations have tags.
  9. Associations have attributes (optional).
  10. People and companies have a chronological log of contacts (by phone, in person, by email, etc.).
  11. A summary view of activity over a period of time (people added, contacts made, association changes, etc.).
  12. Export data as XML.
Can you recommend anything? Can you recommend a Windows desktop tool?

A small improvement to Google Calendar

My wife and I like Google Calendar a lot. That we use it everyday for every kind of event and planning tells me that it accommodates both the novice user and the experienced user. As you use GC more you will end up with lots of overlapping events. This is especially so if you use lots of calendars. (We have 6.) When this happens GC mostly only tells you that something is happening as most of the details are obscured. I would like GC to have three new features:

1. Use transparency when displaying events.

2. When displaying event to not be bound to the day's calendar column

3. Distinguish primary and secondary calendars. For example, the primary calendar's events always sit on top of the secondary calendar events. And I should also be able to quickly toggle on and off the visibility of the details of the secondary calendars.

For example,





Links need direct orientation markers

Geoffrey Bilder asked what is the use of having the URLs listed as footnotes when you are online?
This is a good question. In (plain text) email having the URLs visible is the only means of "linking." Placing URLs in footnotes improves the readability of the email message -- no odd word-wrapping in the message and URLs are less likely to be wrapped. These features, linking and readability, however, are directly supported on web pages. So why bother?

One fact given by seeing the URL is you can see if the link takes you off the page and/or off the site. This orientation feature is useful to me. Using the URL itself for this is indirect: I have to know the URL of the page I am on and then make the mental comparison between the two URLs. A better approach would be to use a marker that directly indicates the kind of link it is. This would be more useful on the web page. (And add the table of links on the printed page.)

It was a little slow at "Andrew Gilmartin & Associates" yesterday morning and so I used the opportunity to learn a little more about Prototype. It is a very powerful tool. It makes manipulating a DOM almost intuitive. When I next have some free time I will work on the orientation markers.
I am turning off the table of links feature. It was an interesting idea but in the end I agree with Geoffrey.



Automated "Table of Links"

I tend to print web pages for reference when I am off-line and so I like to ensure that URLs are visible somewhere in the text. I have copied Leigh Dodd's footnoting technique in email for years and am now using it in this blog also. I am not always consistent with the technical details of laying out the the links and footnotes mostly because it is somewhat cumbersome to use in HTML. I need a tool. So I wrote some JavaScript that will add the footnotes automatically to end of each posting. Here is my test code.

Update: I have this working in this blog now.

Update Again: If you use an RSS reader to read this blog you will not see the table of links at the end of the posting.

Update Again & Again: I have discontinued the use of the table of links script on this blog. See next post.

Java Agent Development Framework

I have been interested in software agent technologies since in the early days of Windows 3.1 when I discovered Actor. Agents are automatous tools that engage in formal conversations to get commitments and, later, responses to those commitments. Message queues are very popular technologies because when you add work to a queue you know that at some point the work will be done. Agents are like very smart queues where the queue can make decisions about the commitment to do the work. Unfortunately, my experience is mostly that of an armchair practitioner.

A few weeks ago I discovered JADE and have since read the book Developing Multi-Agent Systems with JADE. I highly recommend the book [*]. It really looks like JADE is a good agent framework and implementation. I know, for example, that Raytheon is using it for at least one non-defense project and Raytheon has a very conservative software selection process. Now, I need to find a client that wants to use it too. Know anyone?

[*] I also highly recommend using your local library's inter-library loan service to read the book before buying it. Jessica Wilson, a librarian in the South Kingstown library system, seems to be able to get anything.

Kindle and content's seamless ubiquity

Amazon's Kindle is now out. Amazon has done a great job at delivering a whole solution and not just a reader. Assuming that the device is ergonomically usable that you can download content from anywhere via the built in mobile phone technologies is key to its success. No docking. No bluetooth. No wifi. Just seamless ubiquity to the new and updated content.

Update: I was at Border's yesterday (2 Dec 2007) and saw the new Sony book reader. While I am generally attracted to bright and shinny objects the reader and it's display looked scuffed and forlorn in the long shallow of the Kindle.