The Wrath of Kon

Dispatches, thoughts, and miscellanea from writer Jon Konrath

Tired, the nolo dumpster

P8310015

Spent an obscene amount of money yesterday on new car tires. That’s the exciting point of my month. I got the factory-stock Michelin tires and a full alignment job at a place in West Berkeley. The car had a horribly shimmy, the steering wheel vibrating and always pulling a bit. The whole thing took about two hours, and it now drives like new.

I think this was the first time I’d ever paid full price for an entire set of new tires with all the fixins. On my Yaris, I did get a set of four tires from this semi-shady place in West Oakland I used to go to every time I needed a tire patched. They were some oddball name of tires, and probably cost half as much. I think I traded in the car a year or so later, and the shop got arsoned for insurance money. Way back in Seattle, I had two blowouts in my old Escort, and bought one-off tires, but not a new set. And when I was a kid, I would go to Discount Tire or a gas station and buy used tires, try to find something with decent tread for five bucks each.

Actually I take that back, I did get new tires on my VW Rabbit back in 1997 or 1998. I went to a Sears auto center in West Seattle, which I’m sure is long gone. I remember this clearly because I pulled an all-nighter the night before and then left work early, in a near-hallucinatory state where nothing was real, but everything was forever burned in my brain.

So when I bought this Rabbit, the person before me had cut the springs to lower it (as if a Rabbit is not low enough), then put giant rims on it, maybe sixteen-inch and way too wide. The tires, some low-profile racing thing, were nearly bald, and getting the car above fifty on the highway was absolutely harrowing. I decided the car needed to go back to stock, and I had a bonus check hot in my pocket, so that’s what I did.

There was a junk yard in West Seattle that was nothing but VW and Audi parts. I always had lots of fun wandering around that place, looking at turbo motors cut out of Quattros. I’m sure it’s also gone, built up into condos. Anyway, I got a set of the steel thirteen-inch rims for ten bucks each, brought them to Sears, and got them to throw a set of stock-ish tires on for maybe forty bucks a tire. They mounted and balanced everything, then found out I didn’t have the right lug nuts (VW steel wheels use those tapered or flared-end ones) so I had to drive back to the junk yard. The dude at the counter reached in a bucket, pulled out about two dozen of the lugs, and said no problem, on the house. With the new tires, the car drove 100% better. I got back to Pill Hill, ate some lunch, and slept until dinner, when I got a quart of sweet and sour chicken in a plastic container from the Chinese restaurant on the roof of the giant new QFC in Cap Hill, and worked on my writing for the night.


Been trying to get some big writing underway, running into the usual problems. I don’t like to get into this stuff, but I’ve got a book that’s probably 100,000 words, and I’m very unhappy with it, and not sure how to land it. I had a big idea to shift around things a bit, and that kept me busy for about a week, but it’s fizzled out since then.

I keep thinking about Rumored, and the struggle to finish that one. I thought I finished the first draft of that thing in maybe 1996, and struggled to get it really swinging for the next six years. The photo in this post is a failed attempt in maybe 2001 to print summaries of each section, so I could rearrange them… or something. (This didn’t work.) This was when I wrote the whole thing as one giant text file in Emacs. Now in Scrivener, I’d just drag and drop the various pieces, but back then, it was an arduous task. The problem still remains though: the definition of done. I never know when the story makes enough sense to ship it. This current book is something I thought would be done in 2014 or 2015, and every year, I wasn’t sure if I was 80% done or 20%. I’m still not sure.


Took a long walk, maybe an hour and change, while they had the car up in the air yesterday. This was West Berkeley, and I decided to do the walk without headphones. It’s a very quiet area on the weekends, lots of pharma companies and art studios, with a few old houses that remind me of many of the off-campus houses in Bloomington, like the sixth street house where I finished up my last year in town. There’s always a nostalgia about those places, but many are vanishing, being replaced by a ten-unit condo crammed onto the same size lot.

One building that I didn’t know was a thing until it closed in 2018 is the old Fantasy Studios. This was “the house that Credence built,” a record studio where a ton of famous records were recorded. Journey’s albums Escape and Frontiers were both made there, as well as key releases from Green Day to Primus to Europe (yes, The Final Countdown was done there) and even Santana’s “Smooth” featuring Rob Thomas. It’s a fairly nondescript building, and is now mostly offices, although I guess a few floors of it still do film production.

An odd bit of reverberation here - although he didn’t record there, when Joe Satriani used to live in Berkeley back in the early 80s, he was in a pop trio band called The Squares, and they rehearsed at a building a block over from Fantasy. One time after practice, he was looking at a pile of remaindered books by a dumpster. Nolo books was in the building — they still are, actually — and in the pile of legal how-to books was one on how to start your own business. This was a period when he couldn’t get a record label to even answer his mails, so he decided screw it, paid the twelve bucks at the courthouse to register a business, and Rubina Records was born.

Anyway, it’s weird to me to think about how in 1987 or so, I was listening to a tape of his first album in my car a million miles away, and I imagined Berkeley as this mystical, mythical place that I didn’t even think was on the same plane of existence as my small Indiana town. And thirty-some years later, I’m walking around his old stomping ground, looking at the same gritty warehouse buildings he used to practice in when he was probably making less money than I used to pull in at Taco Bell back then.


Anyway. Day off today. I should probably leave the house and find something to do.

Bass work

Fender Jass Bass

I have this bass - a 2014 Fender Jazz Road Worn, which I got in 2014. The road worn/relic basses get a bad rap because “it’s like buying jeans with holes in them already,” but they’re also the cheapest way to get a lacquer finish bass from Fender. That and the fact that they kiln-dry the wood before assembly means the wood is dense and low-moisture, which gives you a deeper sound and a lighter weight. Anyway, I like the bass. But I haven’t played it lately because the neck went all psycho on me, and it had a ton of action. From the side, it looked more like a bow and arrow. And I couldn’t fix it with truss rod adjustments. So much like my retirement planning and general health, I ignored it and hoped someday I’d have a chance to figure it all out, but not now.

So then this music repair shop opens up about a block or two from my house. They are called Wood Street Guitar Repair. I brought the bass in to get a verdict on if the neck was completely destroyed or not. That’s when I saw what instantly sold me on the place: they had a brand new Plek machine, straight from Germany. I was in like flint.

A Plek machine is crazy. Basically, you strap a guitar into this thing that looks like a phone booth-sized 3-D printer. It scans the entire neck and loads the scan into a computer, which can then determine what frets are out of whack. The computer can then futz with this virtual model and simulate exactly what can be done to fix things. Once the operator picks a set of adjustments, a robot arm with a 50,000-RPM cutting tool buzzes away and files down high frets and does whatever other minor cutting and deburring and polishing needs to be done.

This whole process used to be done by hand, by sight. Now it’s done within a thousandth of an inch by a machine. Here’s a good video on how Gibson uses Plek now. I got a Lakland bass a few years ago, and they Plek every instrument they sell. That Lakland (a Skyline 44-01) has one of the best necks I have ever played, and it is their cheapest budget model. It’s truly revolutionary stuff.

When I checked in the bass, they asked me all the questions on how I like to play, what strings I wanted to use, etc. They also popped the neck and checked the truss rod, and it was still adjusting, so that looked okay. Unfortunately, when they got into it a couple of weeks later, they could not get the neck close to level, even with the truss rod bottomed out. So they heat-pressed the neck first. Basically, they put the neck in some clamps and use heat blankets to heat up the wood and slightly melt the glue. The neck is held straight and then dries overnight. They did this, then ran it through the Plek, and hand-filed the fret edges, which were a little too sharp.

Anyway, the verdict is that the bass now plays like butter. Super-low action, and it feels great. No high spots, just an incredible feel to it. I now have two great basses for slightly different purposes. The Lakland has active soapbar pickups and a very “fast” neck, a good combination for more modern metal or prog-rock. The Fender has passive 60s-style Fender pickups and a slightly chunkier neck, which feels great for old seventies rock. The guys at Wood Street Guitar did a great job - if you’re in the Bay Area, check them out.

I would rather read my old LiveJournal than look at code I wrote in 1999

I’ve been digging around my machine trying to find any fun old projects I could throw on my GitHub page. What I’m mostly finding is how I get grandiose ideas for programming projects and then abandon them in a week. Some of the programming I did in college is absolutely laughable, but it’s also amazing how many things I’ve started that I’ve completely forgotten about.

I wrote a while ago about Nuke ‘Em, which is a dumb idea for a turn-based strategy game that I’ve chased every time I’ve moved to a new language or platform. I think the closest I’ve gotten to something running is a Ruby on Rails attempt I played with in 2008. But last night, I was digging through some C source code I wrote in 1999, trying to get a web based version of this going, and it was… interesting reading.

Looking at the code, it’s amazing how many ways I was reinventing the wheel, or painting myself into a corner. A few observations:

  • The project was a bunch of C source that would compile into a half-dozen CGI files that would then go onto a web server. When a user went to /user/login or whatever, that would run the login CGI binary. Why didn’t I just write a bunch of Perl scripts or some PHP for this? Well, I guess I already knew C, no use in learning something new and relevant.
  • Actually, some of the pages were generated by shell scripts which had forms where the action was to hit one of the binaries.
  • I doubt anyone would try to do something like use cURL to download the actual login binary, open it in a binary editor, and mess with it, right?
  • There was no templating system for generating web pages in 1999  (that I knew of; there probably was) so I had a routine to glue a head.html and tail.html template at the start and end of each generated page.
  • Part of the decision to do things this way was based on the limitations of my hosting provider, and part of it was price. I’m sure MS FrontPage would have made this all easier, but I think I was unemployed when I was doing this.
  • There is what I think is my first attempt ever at writing a Makefile from scratch. It shows.
  • The whole thing used a series of ndbm databases to store everything, including users, passwords, the map, and pending user turns. This databases were created in the /tmp directory and were world-writeable files. Nobody would think of looking around the /tmp directory of a public web server, so this was totally secure.
  • ndbm (or its predecessor NDBM) was basically like the first NoSQL database ever, sort of. (I would think a garage full of punchcards in random order would be the actual first NoSQL database, but whatever.) Anyway, it wasn’t relational, and didn’t have tables, so each “table” was just another file in the /tmp directory.
  • When you set up the world by creating initial users and making a terrain map and such, you would just run another binary which spat out the configured db files. Only an administrator could do this, because the files were different executables not installed in the hosted web directory. It didn’t check in any way if an admin was running the scripts, but it’s not like someone other than the admin would compile and run the source themselves and overwrite the world-writable files in the /tmp directory, would they?
  • There is a whole science to map-building, how to algorithmically scallop out water and land edges and mountains in some pseudo-random way to make a cool map of a world on the fly. This randomly generated a single-digit number for every square on the map and put that terrain in place.
  • For everything, and especially in the login, parameters like username and password are passed in the URL, because nobody would screw around and pass a bunch of garbage in URL parameters. And there probably weren’t search engines crawling and permanently storing parameterized URLs to do things like delete all users.
  • Oh, that password parameter is sent plaintext. It’s got to match the password in the publicly-readable database in the /tmp directory, which is also plaintext.
  • Players each have money they spend to build armies and buy missiles and stuff. Guess where that number is stored.
  • There is a separate library file (a .c and .h) that is chock full of dumb stuff that isn’t in the standard library, but I’m sure there are 863 different public libraries that do it, and if this was NodeJS or Ruby or Python, it would either be a built-in or it would be an npm/gem/library away. Like why did I write a routine to convert encoded URL parameters into arrays? Why did I write my own routine to convert ASCII strings into integers? Why didn’t I write something to encapsulate database calls, instead of pasting the same dozen lines across multiple files?
  • I don’t know why I did this, but the maximum length of a URL is malloc’ed to a size determined by reading an environment label, and I have no idea where that was set. (!?)
  • Not sure what C unit testing framework existed in 1999, but mine consisted of a file called test.c that ran a bunch of code and printf’ed the results to the console.
  • I never got to the point of putting in the turn-based logic, but my loose notes showed that I wanted to have a cron job that would fire every ten minutes (or whatever) and run a program that evaluated all of the turn moves and calculated out the combat losses and money spent and all that stuff.
  • No source control, of course. Lots of ~ and # emacs files, and lots of files copied with a .backup extension.

Sigh. Okay, a few bits of advice to myself twenty-some years ago:

  • The first is to learn PHP (ugh) or wait a few years and do it all in Ruby on Rails. I know Rails isn’t cool anymore, but it would have been so much easier to build models for all of the basic data types, then scaffold the whole thing, implement controllers for the bits of logic, and take the scaffold views and make them pretty. Of course I still can’t deploy Rails apps on my hosting provider, so that’s another issue.
  • Find public libraries to do the nasty stuff. It wasn’t as much of an option then, but it is now. The rub here is it never feels like I’m building things anymore; I’m just connecting together things that other people have built, and then trying to keep up with when libraries change or break. Having a solid ORM library, a templating engine, and something to deal with session persistence would have saved me a ton of time. (See also using Rails for this.)
  • Break things up into smaller tasks, like as MVPs for each piece. I sort of did this, looking at my notes, but I probably would have went deeper if I had really planned this a bit. I usually do it all seat-of-the-pants, and then get overwhelmed when I have nine different problems going on at once.
  • Think about security first. I know my thought was to have it all use no passwords or plaintext, and I’d lock it down after I got it running. I should have thought about that earlier, so I didn’t paint myself into a corner.
  • Source control, dummy. RCS was a thing then, and I was already using it for my writing. Check in often. It’s free.

(PS, I’ll probably start writing this same dumb game as an Electron app the next time I get bored.)

A Tale of Two Keyboards

kinesis

About ten years ago, I had this keyboard obsession going on (see The Cult of Keyboards) mostly because everything started falling apart health-wise when I hit 40, especially all things chiropractic. After a few false starts, I decided to go whole hog and upgrade to a Kinesis split keyboard. Because it’s about time, I went ahead and upgraded to the newest iteration, the Kinesis Advantage 2.

The original Kinesis has been pretty decent, after a brief learning curve. Typing with my fingers in the two “bowls” and using my thumbs for a bunch of the modifier keys was an interesting transition, but it means I can type away without ever lifting my hands from the home row. There are some issues, though. In the top row of the thumb keys, there are only two switches, when there really should be three, for cmd/alt/ctrl (or whatever your OS calls them.) It’s also a bit more confusing, because I used to switch between a work PC running Windows, and my home computer, which is a Mac.

I mapped things so that in Windows, the modifier keys were Ctrl/Alt and Win/Ctrl. And then on the Mac, they were Cmd/Opt and Ctrl/Cmd. That means that on the Mac, Ctrl loses, and since I type modifiers with my left hand more, it makes emacs almost impossible to use. I also had to train myself to remember that when I switched to the Mac, my Ctrl key was really the Win key. Luckily, things like copy and paste would use the same key in both places. Also, when I switched jobs, the work computer switched to Mac, so this problem gets a bit more simple.

Another complaint about the original Advantage is that it had function keys that were those little rubber chicklet keys like the Mattel Aquarius or a bad 80s calculator. They’re also very narrow. And the Esc key is one of those, which really makes emacs bad. When I was heavy into FrameMaker at the job, I remapped the Home key in the left thumb cluster as a modifier so a Home-5 was F8, and a Home-6 was F9. (5 is right under F8, and 6 under F9.) I also mapped the End key to Esc, because FrameMaker had a ton of frequently-used shortcuts that nobody knows about anymore that begin with Esc, a leftover from its days on unix systems. I would map those only on the Windows system with AutoHotKey. I gave up on that a few work laptops ago, when Frame fell by the wayside.

Also, I had minor occasional problems with the USB firmware. It was designed probably right when USB 2.0 came out, and would sometimes freak out and require a reset. Also if you typed too fast with a modifier, the modifier would get stuck. (Hint: tap the shift key three or four times, and it unsticks.) I also had the usual wear and tear, a few keys losing their printing, and ten years of food and cat hair in the crevices.

The new Advantage 2 fixes a few things. First, the function keys are actual Cherry mechanical switches. They are, unfortunately, the same small size. The circuitry has also changed, and is allegedly better than the old controller. It now has two ways to remap keys: the old way, or you can mount the keyboard as a hard drive with a special key combo, and there will be an app to do complicated remappings, or a text file you can edit. You lose the two built-in USB jacks on the underside of the keyboard, but I never used those.

I wasn’t entirely happy with the upgrade. Although the keyboard uses the same key switches (MX Cherry Brown), typing on it feels very… cheap. The keys are not as glossy and seem to be made of a slightly different plastic. And the case feels a lot more hollow. There’s more of an echo-ey plastic feeling when typing. It feels like the unit was “cost-engineered” with cheaper materials or a more efficient mold to save a few pennies. It’s possible I’m imagining all of this, or the keyboard needs to break in or age a bit. But I’ve also seen a few people on the internet that felt the same, and have messed with putting DynaMat inside their keyboard to deaden it a bit. Maybe I should try that.

I also had a giant exercise to get the modifiers to work. You can swap them around at multiple levels: the keyboard has a Mac/Win setting; there’s an OS setting; and I think my KVM might be flipping the mapping, too. Plus you can physically swap the keycaps to get the labels right. I ended up putting the keycaps on as Cmd/Option and Ctrl/Cmd, swapping Cmd and Ctrl in the Mac system preferences, and setting the keyboard to Windows mode. That seems to mostly work. I also mapped the Home key to Ctrl. Maybe I’ll map End to Esc later.

So, we’ll see if I can put a few million more keystrokes through this one. I also need to avoid reading anything else about modifications, because there are people who burn serious time swapping out controllers, doing complex remapping, and changing keycaps and whatnot. I don’t have that much skill or energy, so I’ll stick to typing.

KQED Article, other photo appearances

IMG_6726

I had some pictures used in an article on KQED on Hilltop Mall. Check it out here. It’s a great overview of the mall, from someone who was actually around for the mall’s heyday, which I unfortunately missed. (See my last post on that.)

The reason these pictures got used is because I have everything on my Flickr account under a Creative Commons license. That means anyone can use my photos, as long as they give me credit. (It’s nice, but not required, for them to drop me a line, because then I’ll gladly link to their stuff, like I am here.)

I’ve mentioned this before, but if you ever need an image for a book cover, feel free to dig through my Flickr account. If you find something and ping me, I’ll even give you a high-res original if you need one. All I ask is that you credit me. (I did this for Ben Ditmars and his book Haiku in the Night. Who knew that me playing on my phone while waiting on my breakfast order in a Berlin hotel would be immortalized on the cover of a book.)

One weird result of this is that my photography pops up in weird places and I never find out about it unless I google my name, which I never like to do. Here’s a short list of some other oddball places where I have a photo credit:

Anyway, there’s more, but I’m bored of searching.