Awesome worktable

This portable worktable and instructions on building it are awesome. I don't need it, but want to build it anyway.

More at Maker Station.

Installing Java 6 on OS X Mavericks, again.

I needed to have Java 1.6 run on OS X 1.9, Mavericks. I had written about this before in Installing Java 6 on OS X Mavericks, but I was not confident with the solution. Today I decided to install Apple's Java 1.6 and see what happened. Would I have have to rebuild my whole machine? No. Nothing bad happened and so far so good. So, to install Java 1.6 do the following:

Download and install Java 1.6 from and install.

Set Java 1.6 as your default using

/usr/libexec/java_home -v 1.6
For more information on java_home see

I need to use NetBeans 7.3.1 (newer versions require Java 1.7) which is downloaded from

To ensure that NetBeans runs using Java 1.6 edit the configuration file /Applications/NetBeans/NetBeans -- which is actually a bash script! -- and define the netbeans_jdkhome environment variable

netbeans_jdkhome=$(/usr/libexec/java_home -v 1.6)

And that is it. You now have Java 6 and Java 7 on your Mac. If you want Java 1.6 to be the default for you always then add the following to your rc script

export JAVA_HOME=$(/usr/libexec/java_home -v 1.6)

15,000 unorganized photos

I have some 15,000 photos that are unorganized. In part, this is because of the rapid changes in both camera and computers used. Thankfully, they are backed up. So, a second step is organizing them is to group them by year and month. I don't think I need day, but that might change. Most of the photos have encoded within them the date and time they were taken. To organize them I just need this data and a means to associate them. The following Perl script does this by using the Image::MetaData::JPEG module, dated directories, and symbolic links.


find ~/Dropbox -type f \( -iname '*.jpeg' -o -iname '*.jpg' \) \
| perl ./PICTURES 2>/dev/null >./

Once the script has been made it can be run using

bash -xe 2>&1 >PICTURES.log

The Perl script is

#!/usr/bin/perl -w

use strict;
use Image::MetaData::JPEG;

my $root = shift @ARGV;
die "root is not a directory" unless defined $root && -d $root;

my $count = 10000;

my %mkdirs = ();

while ( my $file = <> ) {
  chomp $file;

  my $dir = "unusable";

  my $image = new Image::MetaData::JPEG($file);
  if ( defined $image ) {
    my $metadata = $image->get_Exif_data('IMAGE_DATA', 'TEXTUAL');
    if ( exists  $metadata->{DateTimeOriginal} && $metadata->{DateTimeOriginal}->[0] =~ /^(\d\d\d\d):(\d\d)/ ) {
      $dir = "$1/$2";            
    else {
      $dir = "undated";

  unless ( exists $mkdirs{$dir} ) {
    print "mkdir -p $root/$dir\n";
    $mkdirs{$dir} = 1;

  my $efile = $file; $efile =~ s/([^a-zA-Z0-9_\.\/])/\\$1/g;
  print "ln -s $efile $root/$dir/$count.jpg\n";

  $count += 1;

And why is this the second step? Because removing duplicates is the first.

Update: I did use this to organize my photographs held in DropBox. I replaced the symbolic link command with a move command. DropBox just moved the files and not, as I was worried about, re-upload the whole collection. Thank you DropBox engineering.

Watching calligraphic theater and paint dry

Watching 1) calligraphic theater and 2) paint dry.

Street typography from Tom Williams on Vimeo.

Letter to the Editor: The current pilot project does not address the 1:1 issues

This week's South County Independent newspaper has an article on the school district's 1:1 initiative. Unfortunately, there is a gross misrepresentation of my thinking on the matter and one statement that is attributed to me might get me lynched by the teachers! Here is my response.

Letter to the Editor:

We should expect our high school students to have the means of engaging with their work, their peers, their teachers, and their administration at all times. It is significant that the school district is moving forward to supporting this. Where I am at odds with the school district is with the pilot's actual focus, the speed and approach of the process, and its entanglement with PARCC testing.

Let us first make clear what "one-to-one" (1:1) means. It is one device per student that is available all day and every day inside and outside of school. Preparing our students for college or career is to prepare them for continuous engagement and interaction. Working as needed, when needed, with current and relevant materials, with the appropriate people, and all without regard to location or time zone.

The current pilot project does not address the 1:1 issues. What the pilot does is to repeat the work done by hundreds of other school districts across the country and that is to provide laptops to teachers for student use for specific classroom instruction. In short, the laptops are lab equipment. $98,000 of lab equipment and one instructor (FTE).

The school district is heading quickly down the wrong road. The only public meeting on this was in November 2013 when BYOD ("bring your own device") plan was, rightly, abandoned and 1:1 became the new plan. Four months later the "devices", "professional development", and "finance" committees were created to plan the work. The teachers and students have yet to be involved in the planning and yet we expect everything needing to change to be ready by August 2014.

We don't need to rush. I suggest that there first needs to be a plan as to how the freshmen teachers (as a whole) will use 1:1. Let us use the 2014 summer and the 2014 fall to figure this out. Use a portion of the pilot's allocated money to contract for the help and buy some equipment and services to learn with. And please let us have the students engaged in this work too. Only then let us work out the specific devices, professional development, and finances needed in the 2014 winter and 2015 spring. Have everything in place for the 2015 fall.

Yours truly,
Andrew Gilmartin

For related postings see one-to-one.

James Burke and transitioning from a world designed to mitigate scarcity to one of controlling abundance

James Burke's TV series Connections made a significant impression on me when I was a teenager and has continued into my adulthood. My worldview of our past, present, and future situations is premised on it being brought about by a very long line of related and, and this is really important, seemingly unrelated changes. This is obvious to historians but not so to a 15 year old and, unfortunately, not so for far too many of my contemporaries -- especially here in the USA. This week I was happy to come across a recent interview with Burke at You are not so smart podcast. In the interview Burke discusses his current project of envisioning the transition of a world designed to mitigate scarcity to one of controlling abundance. Well worth a listen.

What if by the fall of 2015 the high school had a high bandwidth & low latency cell data service?

What if by the fall of 2015 South Kingstown, RI and the high school (in particular) had a high bandwidth & low latency cell data service? No matter where a student was in town he or she would have access to the school's and the world's resources? If this were so, would we want to invest in a campus wide wifi? Or would we instead provide 1:1 devices with a cellular modem and pay a monthly service fee to a carrier?

For related postings see one-to-one.

PARCC and the image of the assembly line worker.

When you visit the Partnership for Assessment of Readiness for College and Careers website and the first image you see is

When I see this image I think "assembly line worker." And I then wonder and worry about how much PARCC really understands "readiness for college and careers"?

For related postings see one-to-one.

Asked to continue to be involved with 1:1

I have been asked to continue to be involved with the South Kingstown School District's one-to-one initiative (1:1). I am not sure how to do that now. I kind of burned all my bridges on the way out. And I continue to believe we are also going about it in a rush and so the whole endeavor needs to be replanned.

I really think that there first needs to be a plan as to how the freshmen teachers will use 1:1. Let's take the 2014 summer and the 2014 fall to figure this out. Use a portion of the allocated money to contract for help and buy some equipment and services to learn with. And have the students engaged in this work too. Only then work out the specific devices and finances needed in the 2014 winter and 2015 spring. Have everything in place for the 2015 fall.

With regard to PARCC testing needs, buy as many cheap Chromebooks as needed and consider it a sunk cost. See New Device Costs per Year.

I see no need to rush 1:1 and no need to tie it to PARCC testing today.

What to do?

For related postings see one-to-one.

Prime with white and wash with black

I was watching 12 Different Ways to Prime Your Wargaming Miniatures for inspiration -- aka the continuation of my procrastination and my life generally getting in the way of my hobby -- and so tried a few of the painter's suggestions. The one I really liked was to prime with white and then wash with black.

I only washed where there was a transition and the larger areas that were intended to be dark. I also washed with acrylic and not oil paint. I think it worked well. And WAY better than Army Painter's expensive "dip".

If you find the knight's sword send me a note.

Testing for the presence of a value

Back to some geek content... How often have you seen code like the following?

if ( foo.getBar() != null ) { /* use the value */ }
The code is testing if the foo object has a bar value. This usage seems innocuous, but it is not. It both hinders readability and refactoring. Let's address readability first.

The test is asking that the user of the class infer the presence of a value. However, it does not test for a value, but, instead, for the absence of a value, the none value. For readability, don't make the user guess what is happening but, instead, make what is happening explicit. Now, on to refactoring.

The none value test actually exposes an internal implementation of the class to the user of the class. What if a refactoring requires that the internal implementation of the none value change? A common change, for example, is for a null to be replaced with a sentinel value [1]. Should this happen then all uses of the class will have to be changed because the none value test is ineffective. Moreover, the ineffective test will not break the running code, but instead send execution down the then conditional path. Let's hope that no life or treasure is affected.

When you have all the use code under your control then the change is manageable. You will end up with an excessively sized patch that will dwarf the purposeful change. When the use code is not under your control then a ramification is that the simple, internal change is now a global external change. So what is to be done?

To improved readability and facilitate refactoring simply include an explicit test for bar.

if ( foo.hasBar() ) { /* use the value * }
The purpose of the test is clear and use does not expose an internal value.


The pilot does not address any significant issues raised by one-to-one

Well, I resigned from the South Kingstown school district's Technology Professional Development and Curriculum subcommittee after only two meetings. I am unsure if this was a good idea, but I am sure that I do not want to be associated with the subcommittee's outcome. The work ahead is little more than a backfilling of work that should have been completed before the one-to-one (device per high school student) pilot project was scheduled.

The pilot, as presented so far, and as I surmise from the already decided upon pilot factors -- the device choice, specialized staff, budgeting, and the need to finance PARCC testing -- does not prepare the SK school district for one-to-one in the 2015/2016 school year.

The pilot does not address any significant issues raised by one-to-one. The pilot will put laptops in the classroom on carts -- colloquially known as COWs, computers on wheels. Existing models and ramifications of doing this are readily available and well understood. There is 20 years of documented and reviewed research and practice. (I did this kind of work in the mid 1980s.) If you want something more contemporary then travel just up route 138 to the Green School and ask about their experiences.

Computers in the classroom does not differ from bunsen burners in the classroom. That is, they are both lab equipment that will be used to support subject specific lessons. One-to-one is about augmenting one's thinking and communication and has almost nothing to do with the tool itself. That is, while I might advocate for tablets and someone else for laptops, in the end either device will serve the same end. (I would like to address costs but that would take away from my focus of this email.) Has your intellectual life been vitally affected by a bunsen burner?

Here is a thought experiment. Some years ago you worked exclusively with a desktop computer. Today you work exclusively with a laptop. Some years ago content access was limited to in-house only. Today, not only is that not the case, but there is the expectation of equal access from anywhere. With these changes, how has your work life changed? Can you imagine working as you once did -- at a specific desktop and only when in the office?

For students learning is their work. They must have the same experience as you do today with your ever present device and the access to software tools and content it affords. That is one-to-one. That is what SK school district needs to pilot.

For related postings see one-to-one.

A vision of a near future high school classroom

One of my concerns coming out of Friday's meeting of the South Kingstown school district's Technology Professional Development and Curriculum subcommittee meeting was the lack of articulated visions. Some of this, I am sure, is due to my not being involved in previous discussions. To help myself, I took some time this weekend and wrote a vision of a near future classroom. This vision does not use any software or hardware that is not available today and available at modest costs. The working document is at

A vision of a near future classroom

Andrew Gilmartin, 2014-02-28, revision 7

I am not a teacher, so this view of a class is an outside view. The teacher is Joe Smith. On days with odd number dates he teaches chemistry and on even dates he teaches French.

The students enter the classroom for a long class. The classroom is much like any other classroom with student work and inspirational posters on the walls, shelves of books, and piles of ephemera. What is different is that there is no teacher’s desk and no students’ desks. Instead, the center of the room is taken up by a table with seating for all and against the walls is a continuous workbench.

The students take a seat at the table. They jostle and chat as happens before every meeting everywhere. Some students submit last minute “independent work” and “group work” to the document store. The work might no longer be literally handed in but it still needs to arrive on time.

The teacher sits with the students. He and they are always facing each other. He asks one student to call the class to order and initiate the status update. Each student succinctly says what they did since the last class, what obstacles hindered their work, and what is planned for the next class. Another student takes notes on the status updates and deposits them into the document store. The teacher will use the status updates to track progress and understand who needs help, who can help, and what the class needs to move forward.

The students were expected to prepare for today’s class beforehand. They usually have a few days to do this outside of school and in free time during the school day. The preparation includes reading source material (primary and secondary) and the class’s agenda. The teacher briefly reviews the preparatory material and initiates a discussion. The students are expected to participate back and forth. Some students are comfortable with free discussion. Other students will need some structure and aids. Some would rather not be there at all. In all cases the students have learned to be respectful of one another’s learning modes. The students are encouraged and aided in using verbal and visual modes, and physical models (no interpretive dance, however).

The semester’s syllabus, schedule, and preparatory material are available in the document store. Students wishing to work ahead can do so as readily as students wishing to revisit the past or already completed materials. Where source material is an advancement of previous source material it is cross-linked and further linked to the students’ existing notes and finished work.

There is very little difference between preparatory material now as when it was printed in books. That is, the vast majority of it is read. It is supplemented by videos of exemplary lectures from one or more institutions, interactive visual models, theatrical productions (student and professional), self diagnostics with results linked to relevant remedial materials, and offers of one-on-one in-person tutoring. In all cases, the students are expected to help themselves as much as being helped. (Self-management is a skill that is taught and emphasized throughout the school day.)

The tools used to review the materials allow for group and individual annotations. Note taking and other learning skills are under constant review, development, and coaching as the student and teacher discover what works best. The teacher reviews the student’s notes as frequently as the finished work. The student’s notes and class participation represent where the student is in understanding the materials and being able to apply them in novel situations. Learning happens not in discrete, fixed periods of the day and week. It is a continual experience with times of intensity, times of reflection, and times of rest. The student’s tools need to support this.

Each class agenda is presented multiple times at different times each day during the week. While each agenda presentation typically has the same students attend, any student can attend -- perhaps the student missed their usual time this week or perhaps they just need to be exposed to it again. (Other aspects of the “school day” may need to change too.)

The document store is the critical change in teacher and student tools. The store holds all the class’ content -- teacher’s, student’s, and administration’s. All content is owned, dated, secured, and shared. Content has its own life. Every revision of the content is available for review and comparison -- answering the questions, “What changed between versions?” and “Show me your work.” The content can be presented in many perspectives, for example, by date, student, class, teacher, curriculum, or subject.

The second critical change is the device employed to use and create the content. The device needs to be with the student and the teacher at all times. Learning is an all day, every day activity, and especially so for students and teachers who need to schedule active lives inside and outside of the school building. The first capability of the device is to allow access from anywhere to the document store even in low bandwidth situations. The second capability is adding written, and still and moving visual content to the store. (This is done in a direct manner with light editing.) The third capability is to act as a conduit between the document store and advanced and/or special purpose devices. For example, a student wants to record the images from a digital microscope to the document store, or the student wants to store the final edit of a stop-motion video.

The student’s device is expected to be expendable. These devices will have a rough life, living at the intersections of backpack and bedroom, living room, classroom, cafe table, and playing fields. The devices are inexpensive and supplemented with a ruggedized exoskeleton. Most interaction with the device is through the touch screen, but physical keyboards are available for temporary use throughout the school and for permanent use at home. This vision does not use any software or hardware that is not available today. And, it is available at modest costs.


Since I wrote this, I have been shown and discovered some supporting materials.

Exemplary device is a Nook HD+ with Cyanogen mod at $179

Harkness table

The Power of Collaborative Learning
Oakland, CA’s The College Preparatory School

Remake Your Class: Building a Collaborative Learning Environment


For related postings see one-to-one.

Rapid Hemostasis System for Gunshot Wounds

The mournful side of playing wargames is that in real life the toys we play with are real and people get hurt and killed. In my readings today I came across this interesting medical field aid, XStat Rapid Hemostasis System for Gunshot Wounds Works in 15 Seconds. Let's hope this helps save lives.

Funders should own failed Kickstarter project IP

It has long bothered me that established firms use Kickstarter to fund product development. Especially so in the boardgame and miniature games area. Established firms have other means of getting funding and getting it from funders that better understand the risks. Further, why would one want to support any established firm that is putting their own customers at risk? The recent failure of Torn Armor (of Torn Worlds [1]) is a good example of this.

In the venture capital world the funder at least gets the assets of the failed product. These assets have real value. Why don't Kickstarter funders ask for the same conditions? That is, when an established firm is looking to fund product development then the assets developed with the funding must be returned to the funders on failure. For a game product this would include the sculpts -- 3D models and "Greens" --, artwork, rules, and backstory, for example. The funders are then free to do what they want to do privately & individually with the assets or publicly & collectively.

[1] Torn Armor Kickstarter encounters a problem with Defiance Games

Benjamin Bratton: Why don't the bright futures promised in TED talks come true?

I really like this talk. It is not an anti-TED talk but more of a bitch-slap, wake the fuck up kind of a talk. The most poignant comment I have read is "It says that our complacency is unsustainable in the long run." Read the comments on (UK's) The Guardian's site too.

A Common Core study group

I have two boys going into public high school next year and I am concerned. When I first heard about the Common Core educational standards I was hopeful that they would establish an appropriate bar for both educating our children and, in part, evaluating their teachers. Since then I have heard, read, and seen far more opposition to the Common Core than support for it. I think it is time for me to understand the Common Core for high school. And for this I need to read and understand it. Doing so alone and without guidance and/or interpretation is mostly likely impractical. In the past I have benefited from using a study group to understand our state's budget. I think I need the same here.

If you are interested in creating a Common Core study group please contact me either via Facebook, email at, or telephone 401-441-2062.

Installing Java 6 on OS X Mavericks

I need to be able to build and run Java tools under Java 6. When I got my new MacBook Pro I also got an unexpected problem and that is that there is no Java 6 for OS X 10.9. Or perhaps I should say that I did not know enough to know if I could get Java 6 for OS X 10.9. And so the machine become used as a very fast web browser.

Today I decided to make some effort to get Java 6 running. If this machine were Linux or Windows I would not have this issue. The Java packages for these operating systems use the standard Java distribution and configuration. Not so with Apple's Java. It seems like a mess to me when I compare both the standard distribution's file and directory names to Apple's and even between Apple's OS X Java 6 and Oracle's OS X Java 7. Clearly, I am not an Apple developer.

Apple's Java 6 package can be downloaded from

I don't really need Java 6 to run, I only need Java 7 to compile and run like Java 6. And for this I only need to configure the existing Java 7 javac and java commands correctly. I am glad of this as I have no confidence that Apple's Java 6 installer will leave my existing Java 7 installation working. I will need to cheery pick what I want from Apple's Java 6 installation package ... and hope for the best. And hoping for the best is acceptable as, after all, this MacBook Pro is a development machine and so it can be a little rough and idiosyncratic.

I used the shareware tool Pacifist to extract the JavaForOSX.pkg sub-package to my ~/lib/ directory. (Pacifist is very easy to use and so I could skip understanding pkgutil.) I renamed the installed root directory from "JavaForOSX Folder" to ~/lib/jdk1.6.0 and fixed the permissions.

My builds are handled by Ant and so I need to tell the javac task to use Java 6 for source and target, and to point the bootclass to the Java 6 jars.

<path id="java6.bootclasspath">
  <fileset dir="${env.HOME}/lib/jdk1.6.0/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes">
    <include name="**/*.jar"/>
  ... >

The compile now works. Have not yet tried to run, however. Running is for another day.