Categories
general

Tired, the nolo dumpster

index cards

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.

Categories
general

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.)

Categories
general

Bass work

Fender Jass BassI 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.