Mag+
Google Street View for meetings?
Feel free to steal the idea if you can make it happen! Just keep me informed. Thanks.
Mangle-wheel and pinion
A Congressman was seated next to a little girl on the airplane...
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
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
Read Better Scientific and Technical Writing by Morris Bolsky for some sound advice.
A few days with Spring.
- buy a book
- skim the book in chapter order
- study specific chapters as I need to know their contents
- disregard the chapter's examples because they suck either because they are too simple or inelegant
- unsuccessfully google for better examples
- successfully google for clues
- piece together a simple and elegant example
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
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
<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
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?
Using bit.ly help transfer browsing to iPhone
Flickr Dartmouth Photo-pool
Underwear Gnome thinking in the RI legislator
Gin, Television, and Social Surplus
"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?
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
# See https://bugs.launchpad.net/ubuntu/+source/vino/+bug/112955Thanks Geoffrey for the help.
export XKL_XMODMAP_DISABLE=1
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
Re: 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
Narrow cars
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
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
Looking for references to the integrity and wholeness of building your own tools
Bike Lust
Update: More folding bikes at Folding Bike Manufacturer Directory.
The occasional users and customization
How far the quality of sports broadcasting has fallen
Craigslist Purchase Hunter RFP
FLAP bag project
Morning commotion around the chicken run
Update: All chickens are safely back in the run.
Best indication of successful IDE
General assembly is responsible for RI fiscal problems
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
Keep the lead in
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.
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
Java NIO 2
yEd Graph Editor Recommended
Suggestions on best practices for school web sites
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
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
File system explorers need to support a grid view
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 presentation pacing is slow. The Q&A at the end is worthwhile.
Scratch 1.4 Released!
"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
Found via Daniel Pink.
What the fuck has happened to Saturday morning cartoons?
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?
The rate of personal data accumulation is just crazy
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
Are you who you say you are?
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
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
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
Extra space
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
The start of a bookmarklet for generating passwords
( 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
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.
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
FYI: The timing of local news cycles
Journalism and the new news organization's three products
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
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
South Kingstown, RI Now and Transparent Government
^T ? "three significant terms" ^M
Where would I be without fast access to Google in FireFox?
Chicken 911?
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
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
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/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
mkdir queue/tmp/
QUEUE=/x/y/zSee also Using inotifywait with queue directories.
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)"
Rhode Island's state budget study group
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
See also hashtags.org.
cross section cut away
Physical infrastructure behind the pixels on the screen
Re: Flash is now on a leash.
Re: Narrow-minded Data Visualization
Library hours need an easy rule for hours of operation
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
Less technology is sufficient
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
The occasional user and the community web site
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 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: 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!
Newspaper adventures 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
Rant sparked by Wired's article Power to the People: 7 Ways to Fix the Grid, Now.