Monday, March 16, 2015
“Almost immediately, it became clear that we were all going to hate each other.”
“Almost immediately, it became clear that we were all going to hate each other.” The subject is “mom dates”.
Geek: unexpectedly difficult...
Geek: unexpectedly difficult... Every once in a while I've come across a problem that turns out to be far more difficult than it first appears. Most recently this happened to me with the need to produce GUIDs. I accidentally observed a GUID collision (that is, identical GUIDs being generated multiple times) in the system I was working on (which shall remain unnamed). That's the sort of thing that just isn't supposed to happen, so it got my attention. I tracked down the source of the collision by examining the algorithm used. It turns out that collisions were happening when multiple processes with identical GUID generators were being run on the same server – as we were doing in our datacenter, with some servers having over a hundred such processes. Under those conditions, collisions were likely to happen several times a day – very bad indeed. Fixing that was challenging, especially fixing it in a performant way.
This morning I stumbled across a discussion about another such problem: uniformly distributing random floats in [0,1] given a source of random bits. I knew, vaguely, that it wasn't exactly trivial – but it's definitely more challenging than I'd have guessed!
This morning I stumbled across a discussion about another such problem: uniformly distributing random floats in [0,1] given a source of random bits. I knew, vaguely, that it wasn't exactly trivial – but it's definitely more challenging than I'd have guessed!
Geek: fast, easy jump consistent hash...
Geek: fast, easy jump consistent hash... Next time I have a sharding problem, I'd like to try this. But now that I've retired, why on earth would sharding ever raise its head again?
Memory lane, geek edition...
Memory lane, geek edition... I stumbled across this 1999 paper on data structures for representing text sequences in editors. I love the idea of using a simulator to rank the data structure approaches!
All of the data structures it discusses are far older than that paper, and I've implemented many of them. In the late '70s I wrote a Basic interpreter that used a buffer for each line of the program. In the early '80s I wrote a text editor (in Pascal!) that used what the paper's author calls a “piece table” data structure that included a snapshot feature (not discussed in the paper, but an obvious enhancement).
I got the idea for that last by reverse-engineering a '70s program by MicroPro called WordMaster (manual) – a general purpose WYSIWYG text editor I used for programming. I was amazed by its ability to handle large text files, and I wanted to know how it worked. I reverse engineered enough of it to understand that it kept something like a piece table data structure, and that gave me the ideas I needed to write my own with the snapshot capability. The “gap” approach discussed in the paper is new to me, and I'm surprised its performance was as good as it was...
All of the data structures it discusses are far older than that paper, and I've implemented many of them. In the late '70s I wrote a Basic interpreter that used a buffer for each line of the program. In the early '80s I wrote a text editor (in Pascal!) that used what the paper's author calls a “piece table” data structure that included a snapshot feature (not discussed in the paper, but an obvious enhancement).
I got the idea for that last by reverse-engineering a '70s program by MicroPro called WordMaster (manual) – a general purpose WYSIWYG text editor I used for programming. I was amazed by its ability to handle large text files, and I wanted to know how it worked. I reverse engineered enough of it to understand that it kept something like a piece table data structure, and that gave me the ideas I needed to write my own with the snapshot capability. The “gap” approach discussed in the paper is new to me, and I'm surprised its performance was as good as it was...
Quote of the day...
Quote of the day... An employee of WBTV (Charlotte, North Carolina) said:
I feel the doom crushing down on my shoulders...
Read more here: http://www.charlotteobserver.com/entertainment/tv/media-scene-blog/article14423408.html#storylink=cpy
“This is a learning lesson for all and we hope this will never occur again.”She's talking about another employee who was caught whistling Dixie. Literally.
I feel the doom crushing down on my shoulders...
Read more here: http://www.charlotteobserver.com/entertainment/tv/media-scene-blog/article14423408.html#storylink=cpy
Sh
The table saw is out of the box...
The table saw is out of the box ... but its assembly is far from finished. The main box weighed about 250 pounds, a bit more than I could muscle around by myself. The box was on a pallet, and I'd plopped it down in the garage section of the barn after unloading it from the delivery truck. However, we conveniently built the door from the garage section to the woodshop section just barely large enough to drive my tractor into the woodshop. So I loaded the box back onto the tractor's fork lift yesterday, and carefully drove it right to it's designated location in the woodshop. It took about 50 “K” turns to get it in the right place, and about 50 more to get the tractor back out of the woodshop – but I did it, and without bashing down any walls or posts in the process :)
Unboxing the table saw was a much more interesting process than I expected. The overall experience reminded me a bit of unboxing an Apple product – one pleasant surprise after another. First I cut the straps and pulled off the lid, revealing a piece of molded foam about 30" x 50" in size. I pulled off the foam, and discovered its bottom side was elaborately molded with bosses (for strength) and cavities to fit various things packed underneath it. The main part of the saw was packed on its side, with its cast iron top swaddled in heavy wax paper to cover the protective grease underneath it, and the entire saw covered in shrink wrap. Other components were boxed or wrapped in bubble wrap, with everything very carefully separated by some kind of shock absorbing material (several kinds were employed).
On the very top, prominently showing, was a single sheet of paper with detailed diagrams and explanation showing exactly how to remove the saw without damaging it. This was particularly nicely done. The first step was to remove the remaining box and other components. One of the things I pulled out was a large, colorfully printed piece of stiff cardboard, covered with plastic that had bubbles in it to hold various bits of hardware needed to put the saw together, along with some special tools (like metric Allen keys). This piece of cardboard was a delight to examine – someone went to a great deal of trouble to make my life easier! The colors are a form of coding to help identify each piece of hardware. Text in each colored section explained what the hardware was. Behind each bubble the cardboard was scored to make it easy to remove the hardware. I've assembled lots of kits like this one, but never one in which the hardware was so easy to locate and identify. Very nice job, SawStop. Very nice indeed.
After I removed everything except the base saw, I had about 150 pounds to muscle around – not so bad, especially since all I had to do was roll it and tilt it up. I followed the (excellent) directions, and in very short order I had stood up the table saw in its new home. It was getting toward the end of my day, so I didn't do much more work on it – just cleaned the grease off the cast iron tabletop, installed the two hand wheels (also cast iron, and beautifully made) and the motor cover. Today I'll tackle the rest of it...
Unboxing the table saw was a much more interesting process than I expected. The overall experience reminded me a bit of unboxing an Apple product – one pleasant surprise after another. First I cut the straps and pulled off the lid, revealing a piece of molded foam about 30" x 50" in size. I pulled off the foam, and discovered its bottom side was elaborately molded with bosses (for strength) and cavities to fit various things packed underneath it. The main part of the saw was packed on its side, with its cast iron top swaddled in heavy wax paper to cover the protective grease underneath it, and the entire saw covered in shrink wrap. Other components were boxed or wrapped in bubble wrap, with everything very carefully separated by some kind of shock absorbing material (several kinds were employed).
On the very top, prominently showing, was a single sheet of paper with detailed diagrams and explanation showing exactly how to remove the saw without damaging it. This was particularly nicely done. The first step was to remove the remaining box and other components. One of the things I pulled out was a large, colorfully printed piece of stiff cardboard, covered with plastic that had bubbles in it to hold various bits of hardware needed to put the saw together, along with some special tools (like metric Allen keys). This piece of cardboard was a delight to examine – someone went to a great deal of trouble to make my life easier! The colors are a form of coding to help identify each piece of hardware. Text in each colored section explained what the hardware was. Behind each bubble the cardboard was scored to make it easy to remove the hardware. I've assembled lots of kits like this one, but never one in which the hardware was so easy to locate and identify. Very nice job, SawStop. Very nice indeed.
After I removed everything except the base saw, I had about 150 pounds to muscle around – not so bad, especially since all I had to do was roll it and tilt it up. I followed the (excellent) directions, and in very short order I had stood up the table saw in its new home. It was getting toward the end of my day, so I didn't do much more work on it – just cleaned the grease off the cast iron tabletop, installed the two hand wheels (also cast iron, and beautifully made) and the motor cover. Today I'll tackle the rest of it...