Matthew S. Hamrick
Last updated at 8:22 pm UTC on 3 November 2006
One Phone to rule them all, one Ringtone to find them,
One Carrier to bring them all and to the Service Contract bind them.
matthew [dot] hamrick [at] gibson [dot] com
Some Web Sites
I used to build web pages for fun. These days there are professionals doing a much better job of it than I'm willing to take the time to do. I still dabble, of course... Here are a few pages with my fingerprints all over them:
Matt's Squeakish Background
Someday I'll fill this in proper-like with a complete bio and so forth. For now, here are just a few notes. My object oriented background began when I read the '81 Byte article on Smalltalk. I had just completed making my first 8080 based micro, so the shift from bits and control line timings to object "concepts" was pretty extreme. A little while later I was at a trade show in San Antonio where one of the Apple guys was showing off the Lisa. Most of the show attendees were interested in finding the cheapest 5 1/4" floppies, and seeing if such-and-such a supplier could get enough 2116 memories by labor day. So, the poor Apple guy was just sorta standing there like a carnival barker, "Step right up, ladies and gentlemen, on this very table; yes! this table right here we have the future of personal computing!!! Be the first on your block to own a Lisa!" Well, maybe not that much like a carnival barker, but it was several years ago, so my memory's a little hazy.
Having just read the Byte article, I recognized the unmistakable windowed screen and mouse. Walking up I made some comment to the effect of, "Oh hey, wow, an actual Smalltalk machine!" The poor Apple guy was crestfallen, here he was trying to get people interested in the LISA, and I was coming in calling it a Smalltalk platform. Oh well.
As it turns out I wasn't able to convince my parents that they should buy me a Lisa or even a Macintosh. By the time I left home and had the money to buy a PC, I also happened across a copy of Digitalk Smalltalk/V. Yeah, the old one that ran on CGA on an 8088. Earlier in the 80's I had played with Logo, which is sorta object oriented, but mostly I had done C, PASCAL, and 6502 Assembly. I was real happy with Smalltalk/V, but had some problems because all the Smalltalk books I could find were clearly written for Smalltalk-80, and though I could usually figure out how to translate from -80 to /V, there were a few concepts I was pretty weak on.
About this time I was introduced to C++ on an ancient 3B2. Just running the CFRONT thingamabob caused the system to absolutely crawl. Thankfully, fate would smile and free access to Objective-C on a VMS system fell out of the sky. This was the StepStone version with Protocols, not the GNU version (which I'm not sure even exists anymore.) For the next several years most of my OO development was done on Objective-C, which I liked a great deal because of it's Smalltalkish syntax and late-binding.
So, in the early 90's I worked with a couple of folks that got me interested in OO programming and RPC. This led to distributed objects and an interest in CORBA. So, I guess it was sometime around '93 I was lurking on all the CORBA lists, trying to put my brainstem around it.
In the early 90's my career took a right turn into the crypto world when I was asked to add a few cryptoish features to a vector processing unit. Since then I've been knee-deep in data security. In the mid 90's I was working for RSA when we had Visigenic as a major customer. Visigenic, as some might know is/was the maker of a CORBA ORB that was pretty good. As an RSA application engineering type, I was asked to help out in implementing SSL for their ORB. I was happy to help out and even happier to leave that project behind.
In the late 90's the chickens came home to roost when I agreed to head up the Secure Product Development Group at Borland / Inprise (the people who had bought Visigenic.) All of that crappy C code I foisted on Visigenic as a customer was mine to maintain...
I'm no longer at Borland / Inprise (The end came after we met the guy from Corel who was supposed to be our new CEO... talk about a complete looney...); since then I've been working on trying to secure distributed object systems: Linda, Corba, SOAP, and every now and again I look at XMLRPC.
Thinks I'm Doing with Squeak
Earlier in the year I was spending a lot of time getting my brainstem around Smalltalk after several years in the Java world. I can happily say, that my brainstem is around squeak enough to do some fun work. Here's a list of some of the things I'm working on:
Squeak Crypto BaseIn order to get SSL working, I'm working on some Crypto classes.
Squeak X.509 Again, in order to get TLS / SSL working, we need X.509 support.
Squeak CA It will probably be a while before I get this one finished, but what the heck, I'll list it here anyway. I've been looking at commercial CA products and toolkits and know that I could do one better. I'm also motivated by the desire to have an environment to test various PKIX extensions.
So I was trying to start squeak 3.5 Build 5180 on Windows 2k and I got a dialog box with the following text:
The application failed to initialize properly (0xc0000142). Click on OK to terminate the application.
After a bit of searching, I discovered that the problem seems to be that if there's anything running that believe's it's in control of the OpenGL environment, you'll get this error. In my case, I right clicked on the "My Computer" icon, selected "Manage", Expanded the "Services and Applications" node in the Computer Management window by clicking on the plus to the left of the "Services and Applications" line, and clicked on the "Services" item in the list that appeared.
I happened to be running a utility called PopChart that apparently likes to register to control some aspects of the OpenGL environment. By right clicking and selecting the "stop" item from the context menu, I was able to get my system to a point where I could squeak with impunity.
Your mileage may vary.
There are a couple of crypto testing algorithms that like to count the number of bits set in a register. This is an operation called population count. I wrote the following code to implement this:
| t1 t2 |
t1 _ self.
t2 _ 0.
[t1 == 0]
whileFalse: [t1 _ t1 bitAnd: t1 - 1.
t2 _ t2 + 1].
You can find a changeset with this in it at: http://www.cryptonomicon.net/~hamrickm/Integer.msh.1.cs.
Celeste user name weirdness
How much of a squeak fanatic am I? Well.. I read my work email using Celeste. While setting it up, however, I noticed something. When Celeste queries you for your username, if you give it a name with an at sign (@), it automatically chops off the at sign and everything else.
This is great for people who have simple usernames and want to be able to enter their user name OR email address in the prompt provided. It is somewhat suboptimal behavior when your service provider, like mine, expects your username to be your complete email address, at sign and all.
Anyhow, it's pretty straightforward to track down this behavior, but if you don't want to bother with it, you can simply do what I did...
I commented out the following line which can be found at the bottom of the
setPopUserName method of the
"(PopUserName includes: $@) ifTrue: [
PopUserName _ PopUserName copyFrom: 1 to: (PopUserName indexOf: $@)-1 ]."