Thursday, February 9, 2017

A new direction for this Geek Blog

In my previous post about home database programming projects I have been working on, I alluded to the fact that I am on a "temporary work hiatus" right now. Translation: I was laid off in the course of my previous employer's reduction in force and am busily searching for a job.

Obviously there are some stresses from not having much of a positive cash flow. However, I am endeavoring to use every moment of my time as constructively as possible:
  • Searching for at least a few jobs to apply for a day (more now that a friend referred me internally in Microsoft and I have the assistance of one of their recruiters for a few weeks)
  • Spending a few hours/day playing catch-up on some of the newer technologies
  • Exercising (running, walking the dogs, using the stationary bike in the evening)
  • Rebooting my eating habits: it's far too easy to go into grazing mode under time pressure
  • Reading books I haven't had time to read, in the evening
This still leaves me with enough free time that I have decided to use in rebooting another activity I've always wanted to do: write on a regular basis. Therefore, I will be taking this previously unfocused geek blog and begin adding consistent entries about the state of the tech industry from the point of view of someone who has been a developer for a for quite a while. If this results in enough material (especially if it develops some readership) I may spin it off into a completely separate blog.

Looking back over previous entries dating back to 2010, this current geek blog has been a bit of a catchall:
  • Musings about how the hot computer which launched my development career is now an exhibit at the University of Washington and how much more powerful my Android phone was.
  • Comments about home computer projects, from encryption applications to database tools that I used daily at work
  • Shakespeare and other literary geekery, including tattoos, cool old books and word frequency counts in Shakespeare plays
  • Miscellaneous topics such as work Fitbit challenges and pictures from a trip to England and Wales
But since the topic of what the computer industry is like right now is especially compelling to me personally now, that will be a new consistent focus. I hope that others will find my commentary interesting.

Monday, January 30, 2017

Home programming projects: data browser and differences finder

During this temporary work hiatus, I am spending some time working on enhancing a couple of my "Winter break" projects. These are projects that I worked on for fun during past Winter breaks from work and which have been useful in my day-to-day work.

1) A database "browser", where you search for a record and can then browse forward and backward in the database by following foreign key entries.

2) A database difference finder which allows you to take a snapshot of a database's schema and latest record info and then compare to other such snapshots

The Database Browser

The purpose here is to give a quick and handy browsing ability. This means that you select a record somewhere in the database (schema info loaded when server and database selected) and can then browse back to records in other tables that have a key in that record...and forward to records containing the "current" records key.

Most windows have "Show SQL" buttons that show you the SQL used to generate those records.

The "Get Field Info or SQL Join" button takes you to a popup which serves two functions.

1) It can search for tables, stored procs and triggers that contain a string you want to locate

2) It can generate a basic SQL join between two tables that you name

Database difference finder

The purpose of this program is to find differences between snapshots of two databases or the same database after a change has been made (structural or in terms of saved data).

Here, I am showing the differences detected when a tables has had a column added between two snapshots.

In this case, I am showing the differences resulting when a database row has been added, deleted or changed (based on timestamp differences).

Sunday, October 23, 2016

Seattle Shakespeare Company's "Medea"

(Medea by Anthony Frederick Augustus Sandys (painted 1866-68))

The Seattle Shakespeare Company's production of Euripides' play "Medea" is brilliantly done. It takes up the story of Jason and Medea, 10 years after her help was crucial to him in obtaining the Golden Fleece. In the interim, she bore him two sons. But now Jason is planning to abandon Media for Glauce, the daughter of King Cleon.

This production is, as befits the material, a cry of raw pain and anger. It opens with the Nurse explaining Jason's betrayal of Medea. In another room seen only in shadow, Medea is clearly raging and destroying everything she can get her hands on. By the end of the play she HAS destroyed everything important to her in order to get revenge upon Jason. Although, to be fair it has to be pointed out that it was really the feckless Jason who began the destruction and Medea who followed through with its rather obvious consequences.

This being the first Greek play I have seen, the role played by the Chorus was very interesting. I was rather surprised at the extent to which the Chorus interacted with the play but it offered support for Medea's planned revenge...right up to the point where she decided to murder her two children. At that point, like a conscience she ought to listen to, they begin to try to reason with her and suggest that she not take her revenge to the point of killing innocents. But their efforts are to no avail: Medea follows through with her plans and leaves the stage a charnel house.

If you enjoy seeing a really good, cathartic tragedy, this is the play for you! I'm looking forward to being an usher for next weekend's performance so I can see it again...

Production Team

Kelly Kitchens (Director)
Donald Byrd (Choreographer)
Andrea Bryn Bush (Set Designer)
Chelsea Cook (Costume Designer)
Kent Cubbage (Lighting Designer)
Shenandoah Davis (Composer)
Robin Macartney (Props Designer)
Nina Trotto (Stage Manager).

Cast (in alphabetical order)

John Bianchi (Servant)
Maya Burton (Chorus)
Peter Crook (Kreon)
Yadira Duarte (Nurse)
Sunam Ellis (Chorus)
Sylvester F. Kamara (Jason)
Chelsea LeValley (Chorus)
Kevin McKeon (Aigeus)
Matt Sherrill (Tutor)
Alexandra Tavares (Medea)
Kathryn Van Meter (Chorus)
Lucy Weber (Chorus)
Dedra D. Woods (Chorus)

Tuesday, October 18, 2016

Seattle Shakespeare production of A Winter's Tale

The Seattle area is settling cozily into Autumn now. Fans of the Seattle Seahawks are getting excited about watching  big men in spandex hold meetings and occasionally chase an inflated leather ball. Others of us are much more interested in the start of another brilliant Seattle Shakespeare season. And this one hit the ground running with its production of The Winter's Tale!

Last month, I attended a Preview showing of the play. Managing Director John Bradshaw, after asking the audience to turn off their cell phones (I remember one going off during Richard II two years ago...and wondering whether the callee was one of the heads in a bag delivered to Bolingbroke later), noted that Preview showings are fresh productions and the cast occasionally have missteps. If there were any in this performance, I definitely missed them. This performance was akin to other Seattle Shakespeare productions I have seen in recent years: homey and comfortable, yet with a stratospheric level of excellence!

For those not familiar with it, The Winter's Tale is the story of a king who destroys his family through a clearly insane jealousy and ultimately largely regains it. Like other late Shakespeare plays (Pericles, Cymbeline, The Tempest), this one contains tragic elements of disaster and ruined lives but culminates in an ending which shows that even when life appears bleak, there can be hope. That's why these late plays are among my favorites

Like much of the Bard's work, this play uses multiple comparable plot lines to emphasize the points being made. While not as insane and lethal as Leontes, his alienated friend Polixines nearly makes a a similarly fatal error in trying to force his will on his son and the princess who he thinks is a common shepherdess.

One other intriguing thing about this play is that Leontes' emotional arc almost seemed like a reverse of the character Othello's in that play. Othello starts off happy, calm and collected, is gradually worked to a fever pitch of jealousy, commits the atrocity of murdering his wife and then discovers that he was duped into doing so and almost calmly takes his own life. In A Winter's Tale, the king starts out calm and then explodes into a jealous rage for no reason at all. He then spends some 16 years trying to atone for his crimes and in a surprise ending, is reunited with the queen he had thought long dead. Perhaps in an intentional choice, the actor portraying Leontes was the same actor who played Iago in Seattle Shakespeare's production of Othello, last year.

Another striking thing about this play (aside from its epic stage direction "Exit pursued by a bear") is how the heroism of ordinary folks serves to counteract the dangerous excesses of rulers making bad choices. For a playwright so invested in royalty and maintaining the natural hierarchical order of things, the actions of Camillo and Paulina in this play are a refreshing reminder that power does not automatically bring wisdom...

This production was delightful and I am very glad to have seen it.

Production Team

Sheila Daniels (Director)
Tommer Peterson (Set Designer)
Kelly McDonald (Costume Designer)
Reed Nakayama (Lighting Designer)
Harry Todd Jamieson (Sound Designer)
Marc Kenison (Choreographer)
Rafael Molina (Composer)
Robin Macartney (Props Designer)
Miranda Pratt (Stage Manager).


Mark Fullerton (Old Shepherd)
Rachel Guyer-Mafune (Dorcas/Lady)
Spencer Hamp (Clown)
Reginald Andre Jackson (Polixenes)
Jonelle Jordan (Mopsa/Emilia)
Brenda Joyner (Hermione)
Darragh Kennan (Leontes)
Finn Kennan (Mamillius)
Denny Le (ensemble)
George Mount (Antigonus)
Galen Joseph Osier (Camillo)
Rudy Roushdi (Florizel)
MJ Sieber (Autolycus)
Jasmine Jean Sim (Perdita)
Amy Thone (Paulina)

Monday, September 19, 2016

Using the R.cache package

# RStudio instance #1 - the cache saving test piece
# Load R.cache library, set working and cache directories
setCacheRootPath(path="C:\\Data Study\\Class 5 Reproducible Research\\Week 4")
setwd("C:\\Data Study\\Class 5 Reproducible Research\\Assignment 2")

# Load a large data file that takes a while to load
data1 <- ata="" bzfile="" div="" read.csv="" tormdata.csv.bz2="">

# Cache the loaded data object using key ABC
# Creates file d125f08eb1bf24d4c1e2b38b35d3362b.Rcache (389,576 KB)
key <- div="" list="">
> nrow(data1)
[1] 902297
> ncol(data1)

                   # RStudio instance #2 (separate UI, process) - the cache reading test piece
                   # Load R.cache library, set working and cache directories
                   setCacheRootPath(path="C:\\Data Study\\Class 5 Reproducible Research\\Week 4")
                   setwd("C:\\Data Study\\Class 5 Reproducible Research\\Assignment 2")

                   # Load the large cached data object - much faster than original load!
                   key <- b="" list="">
                   dataX <- b="" key="" loadcache="">
                    > nrow(dataX)
                    [1] 902297
                    > ncol(dataX)
                    [1] 37

# Cache the datamod() function  itself
# Creates file f4971f5a1be44fc8fddb87235d45aaaa.Rcache (2 KB)
key <- div="" list="">

                   # Load the datamod() function 
                   key <- b="" list="">
                   dataX <- b="" key="" loadcache="">
                   > dataX(4)
                   [1] 12

# Cache the result of a datamod function call
# Creates file 1b2526c00d8ed8a42700fc0fb39c1b1b.Rcache (1 KB)
key <- div="" list="">

                   # Load the datamod() function return value 
                   key <- b="" list="">
                   dataX <- b="" key="" loadcache="">
                   > dataX
                   [1] 18

# Small sample function
datamod <- div="" function="" myarg="">
  myarg * 3

Sunday, May 29, 2016

Ray Carter: In Memorium

My friend Ray Carter died last night.

I actually felt a little guilty typing that. We hadn't seen each other in a few years but he was somebody who I liked a LOT...we worked together on a cool project a bit over a decade ago. And I'm damn sorry to see him gone. Ray had been fighting cancer for some time and his prognosis suddenly became VERY bad last week. I had hoped to take some movies to him today and join him at his life celebration next weekend. Sadly, those opportunities are now gone and instead there are only happy memories of having known him.

I first met Ray in 1999 or 2000, when I was trying to get a political group for pro-gun Democrats off the ground. I don't remember how we met but the Pink Pistols movement (Motto: pick on someone your own caliber") was starting then. I guess someone introduced us because the bizarre politics in this country have the Democratic "leadership" hating gun owners and taking gay folks for granted....while Republicans often do the exact opposite.

Still, the success of the Pink Pistols and their intention of taking responsibility for their own safety was refreshing. They are still around and doing well today. Our local Seattle area group named itself CeaseFear with the intention of twitting the state's anti-gun group, CeaseFire. I remember being at a hearing in Olympia and one of CeaseFire's minions giving a startled doubletake at the sound of our name. That alone was worth the price of admission.

I think it was Ray himself who coined the name CeaseFear. Most of our creative ideas and a great deal of the energy behind the organization came from him. Ray had been an early organizer for Seattle Pride events and saw no conflict between that and his self defense and gun rights activism. Would that more voters out there had the insight to see that!

During the time that CeaseFear was most active, our activities were concentrated on having shooting events that were LGBT-friendly, a few safety classes, political outreach at Pride events and offering testimony in Olympia. The orientation for safety minions like myself was to join a tour of gay bars in Seattle's Capitol Hill area, the intention being to make sure we were comfortable and friendly with LGBT folks. Actually, it was a blast and the camaraderie in our organization was excellent...again, thanks to Ray.

After a few years, a lot of us found ourselves focusing on staying employed in one economic downturn after another. I was connected to Ray on Facebook and we stayed in touch that way. I occasionally saw him at the Second Amendment Foundation table at gun shows...SAF and local NRA leaders gave our organization tremendous support and Ray ended up working there.  And now, unfortunately, he's gone. Ray was a wonderful person and we don't get to see people of his quality and intelligence nearly often enough. We WILL miss Ray Carter!

Thursday, May 19, 2016

Volunteering with Seattle Shakespeare

Last weekend, I went to see the brilliant Seattle Shakespeare production of Romeo and Juliet (comments posted here). Today, I took the day off of work and volunteered as an usher at one of their matinees, thereby 1) evading work for a day and 2) getting to see Romeo and Juliet a second time just by helping out a little. What a GREAT day!

I arrived at Seattle Center a bit early, not knowing what the experience would be like. From the beginning, the signs boded well for an enjoyable experience:

Walking into the theater and not as a member of the audience felt very different. OK, this may sound strange but the theater felt...pregnant. Full of possibility.

Now I'll make another comment that may sound strange. The actors reminded me of computer programmers. Not from some sense of deep geekiness or because I heard some cast members discussing SQL queries during intermission but because of their laser-like focus while watching off stage, waiting for their next scene. Much like developers focus in on their monitors as they work, I could see the actors watching everything happening on stage intently. It was awesome and I felt a sudden kinship with them. (Maybe their occasional distracting audience members are like the people who like to wander by developers and interrupt, asking why they're so quiet)

From the beginning, I wondered what I would be asked to do. Would I be taking tickets? Helping to move stuff around?

No. They asked me to guard the weapons.

Today's matinee was for a number of local schools and there was some concern that some of the high school boys would suddenly grab a rapier and start playing with it during the beginning, end or intermission. Granted, asking me to watch the swords was a bit like using a fox to guard a hen house. But I want to make this a recurring volunteer gig and so I kept the high schoolers and even my own self from playing with the swords.

After the play, we ushers made a few passes through the seats to tidy things up. I found myself strangely sad that the day was over. I may have been the lowest minion around but I felt a little bit like I had helped make something awesome happen.

One last note: Romeo and Juliet's run ends in three days. If you have the option, I can't recommend seeing this play highly enough!