Our basement flooded due to Illinois floodrains. I will not be traveling to notacon; there will be no PCjr talk this weekend.
Archive for the ‘Uncategorized’ Category
Posted by Trixter on December 4, 2012
A recent comment on a Slashdot story actually got me to laugh out loud at work enough to attract some attention, and that’s pretty rare for me (laughing at something I see on the internet). What got me to laugh? Human characterization of a computer. It makes me laugh because I do the same thing — I give machines personalities when I think about or work with them. (To those researching autism spectrum disorders, you might want to scribble something in your notebook right about now.)
Most people trying to comprehend what this is like would probably imagine something flamboyant and animated, such as Eric Schwartz’s tribute to the Amiga. While such characterizations are creative and nice, that’s not what gets me laughing. What does it for me is a computer that acts like a fallible human. Here’s the post that got me laughing, paraphrased slightly (for the uninitiated, ext4 is a method of storing files in a Linux system, and the context is an application “talking” to the operating system):
I don’t quite trust ext4 for writes.
app: Hey, can you write this data out to
app: Uhh, that wasn’t long enough to actually write the data.
ext4: Sure it was! I’m super faGRRRRRRRRRRRRRst at writing too.
app: Wait — did you just cache that write and report it written, but then not actually write it to disk until 30 seconds later?
ext4: Yeah, so?
I routinely do this sometimes when dealing with a unix server that is hurting, such as having so many spawned threads due to an unforseen condition that there are several times more threads running than there are CPUs to handle them. I imagine each CPU as a juggler frantically trying to keep 20 pins in the air at once, sweating profusely, and calling out to the other CPUs for help only to have them yell back they are just as screwed as he is.
Does anyone else do this, or is it just me?
Posted by Trixter on September 16, 2012
My 12-yr-old recently wanted to purchase something truly stupid, expensive, and transitory with his hard-earned money, and rather than try to convince him otherwise, I went ahead and let him. Being disappointed with a purchase is something I would rather he learn sooner than later, so he can start making good decisions quicker.
I was not as lucky. I bought some real crap in my time (the name Emerson should strike fear into everyone’s heart) and while it taught me to stop buying cheap crap (stuff that broke, stuff that was disappointing, etc.), it took longer than it should have. My most cringe-inducing purchase was a Miami vice-like outfit the summer before high school (this is summer of 1985 for those wishing stage public humiliation – it’s okay, I don’t mind). I put it on and walked nearly 2 miles to a party some girl I thought I had a crush on was throwing. I thought I was going to be hot shit, but as I approached the outdoor party, everyone laughed at the Miami vice thing since it was cheezy (and I was in Illinois, not California). Seriously, I had not even reached the front door when I’d gotten my third uncomfortable comment… so I kept walking, never stopped, turned the corner and came home, another 2 miles. My grandmother was house-sitting at the time, and she saw me come in the front door less than an hour after I’d left, and wisely didn’t say anything. I took off the outfit, hung it up, and never wore it again.
I should have thrown it away immediately. It might still be in the closet in the house I grew up in.
Posted by Trixter on January 1, 2012
The WordPress.com stats helper monkeys prepared a 2011 annual report for this blog. While I’m dismayed that most people who came here were looking for Jeri instead of me :-O it’s still not bad for a slow year.
Here’s an excerpt:
The concert hall at the Syndey Opera House holds 2,700 people. This blog was viewed about 48,000 times in 2011. If it were a concert at Sydney Opera House, it would take about 18 sold-out performances for that many people to see it.
Posted by Trixter on June 4, 2011
Quick, without doing any research: What early 1980s computer was faster, the IBM PC or the Commodore 64? The IBM PC ran an 8088 at nearly 5MHz, whereas the C64 ran a 6502 variant at 1MHz. The PC cost thousands of dollars, the C64 hundreds. The PC had a 1 megabyte address space; the C64 only 64K. Is this a trick question?
It is! The C64 was faster. The original IBM PC, despite appearances and bias on the part of both consumers and marketing, was actually the slowest popular personal computer on the market at the time of its release, even compared to the Apple II and Atari 400. Here’s why.
The 8088 holds an uncomfortable position between the realm of 8-bit and 16-bit personal computing; while the internal word size was indeed 16-bit, the 8 in 8088 means that its external data bus was only 8 bits wide. This means that the 8088 could only access one byte of data in a single bus operation, giving it speeds much more like an 8-bit personal computer than a 16-bit one. Normally this is no big deal; the 6502 used in the C64 had the same limitation. But unlike the 6502, which could access a byte in a single cycle, the 8088 took 4 cycles to access that same byte. Another way of looking at this: every time memory is touched, the 8088 wastes 75% of its cycles, effectively turning the IBM PC from a 4.77MHz computer into a 1.1925MHz computer. This gave it a “lead” of only 0.1695 MHz over the C64.
If it still had a slight lead, then why was it slower? While the 8088 could indeed operate on 16 bits at a time, the machine instructions were between 2-4 bytes large, and only the simplest instructions took 2 cycles to execute. Contrast that with the 6502, where most instructions are 1 byte large and most execute in 1 cycle.
Let’s illustrate this with a fun example: Rotating a byte of memory once using ROR (rotate right). We’ll keep it fair by treating the PC like it only has a single 64K segment of memory. First, the 6502 version using ROR:
|1||fetch opcode, increment program counter|
|2||fetch low byte of address, increment program counter|
|3||fetch high byte of address, increment program counter|
|4||read from effective address|
|5||write value back and do operation|
|6||write the new value to the effective address|
6 cycles. Now the 8088 version:
|1||ROR BYTE PTR ,1 expands to “D0 0E 34 12″ so let’s get to fetching the opcode:|
|9||Fetch lowbyte of address|
|13||Fetch hibyte of address)|
|17||Perform operation, which takes 15 cycles + EA calculation (6)|
|37||Final cycle of calculation, we’re done, yay :-/|
What took 6 cycles on the C64 takes 37 cycles on the IBM PC, no thanks to the slow memory access of 4 cycles per byte. Taking both machine’s clock speeds into account, this means the operation takes about 6 microseconds on the C64 and about 8 microseconds on the IBM PC. It can get much worse than that, especially if you’re foolish enough to access more than a single 64K memory segment. IBM PC is teh suck! (*)
The gap between the IBM PC and the Atari 400 is even wider, if you can believe that, because the Atari 400 ran the 6502 faster (1.78MHz) than the C64 (1.026 MHz). The BBC Micro? 2MHz! It’s painful to think about!
Ever wonder why there hasn’t been a true demoscene demo on the original IBM PC aside from three scrollers (all Sorcerers releases, btw)? Well, now you know one major reason. (Lack of decent graphics is another; in fact, I’d be willing to argue that only the Apple II had slower graphics.)
(*)Yes, I know the 8088 has 4-byte prefetch queue that sometimes speeds things up. That comes in handy, oh, almost never.
Posted by Trixter on April 16, 2010
Signs that it might be time to look into fluoxetine or suitable derivative:
- You spend hours playing Monopoly Party (xbox) until you can beat it with all AI players set to maximum difficulty
- Food no longer tastes good
- You consume an entire box of ho-hos in one day (see previous note)
- You lack the drive to work on hobbies
- You lack the drive to work on anything
- You hit “refresh” on your empty RSS feed aggregator with the frequency of a lab rat requesting a pellet
- The Sugarcubes keep coming into rotation on your ipod shuffle
And yet I fear I may lose the ability to hyperfocus, which is one of my primary advantages over those around me. One might say it’s my only (un)fair advantage.
Damn good thing I don’t like alcohol. And that a three-day weekend is coming up.
Posted by Trixter on March 21, 2010
I was explaining my demoscene “heyday” activity to someone and thought that what I wrote might be interesting to about four people. Four qualifies as a blog post, plus I’ve been neglecting the blog because I’ve been completely decimated by my day job. So here we go.
My demoscene background was always the PC. I did some cracktro programming — badly — in the late 1980s, but the American cracking scene didn’t have a concept of cracktros->demos until roughly 1992 (hi Tony!). I officially discovered the demoscene proper with The Space Pigs Megademo in late 1990. (The page has a demoscene.tv link to the video I did of it for MindCandy volume 1 (although the video is out of sync; it’s perfect on the DVD itself). I had seen other demos before, like ATOM by Sourcerers but I had never been exposed to the concept of an underground scene dedicated to demos until I saw Megademo/TSP.
My demo productions were all PC, targeted to a 386-40MHz, with later prods targeted to a Pentium. I coded in Turbo Pascal with inline assembler for parts that needed optimization. I learned a lot about how VGA could be tweaked to display more than 256 colors, or higher resolution, or both. (Or lower resolution. I’m particularly proud of figuring out a true chunky 160×100 mode that works on stock VGA.)
In recent years, I’ve been coding for fun on even slower hardware than I started with, like the original 4.77MHz IBM PC from 1981, and also the PCjr/Tandy to take advantage of their 16-color graphics and 3-voice sound. This slide backwards is intentional, because it’s more of a challenge, and challenges are fun. I enter these little experiments into North American demo competitions (there are actually two this year, a record! Block Party in Cleveland in April and at-party near Boston in June) and have even won 1st, 2nd, or 3rd place for everything I’ve ever entered, but I don’t do it for prizes or placement; I do it for these reasons:
- To relax (yes, programming can be relaxing)
- The excitement of manifesting something you saw in your head into reality using the computer as a tool
- Most important: To make my demoscene friends laugh
For me, the demoscene was always about getting computers to things they weren’t typically designed to do, through clever programming and techniques. (For example, realtime 3-D graphics on old 8-bit machines still amaze me, simply because those old machines weren’t just slow, they also lacked the ability to do floating-point math — they couldn’t even multiply or divide!) Presentation, creativity, and flair helped. Don’t get me wrong; I liked the art and tracked music too. Especially the music.
As the demoscene moved to Windows, I saw the use of 3-d accelerators as “cheating” and didn’t move my skills or desire to Windows. Unfortunately for me, I have since learned that there are still ways to push the envelope in Windows for that same kind of “that should be impossible, how are you doing that?” thrill. 64k and 4k intros are one obvious area; others include complex techniques like ambient occlusion, shading via radiosity, complex geometry transformation, figuring out how to get the graphics card to offload as much as possible, etc. But even if I had known that then, I’m not sure I would have learned windows programming anyway, since my life was getting more complex (in 1997, I had been married for three years and just had a baby). Real Life(tm) tends to get in the way. I only got back into democoding, going to demo compos, getting back in touch with the scene, etc. in 2004 when taking care of the kids wasn’t as difficult.
Someday I hope to go out with a bang, a magnum opus that does 3d on an IBM with an 8088 and maybe some hardware/tweak effects. I was really hoping to do it at Breakpoint, the party I have worshipped since its inception eight years ago, but alas, this is their last year and I cannot go. Even if I were suddenly flush with cash and quit my day job to work on a demo for 14 hours a day, 7 days a week for three weeks, I still wouldn’t be ready. And there’s no way I’d go to Breakpoint without a prod to show.
As hard as it is to do decent demos (with or without 3-d) on a c64, it’s even harder on an 8088 PC with CGA for several reasons:
- Memory on 8088 is four times as slow as C64
- Graphics are bitmapped only and graphics memory is even slower due to a necessary wait state
- Even if you wanted to cheat and use character/tile-based “graphics”, the font is not redefinable
The only thing that makes democoding on an 8088 PC interesting is a real MUL and DIV (although they’re slow so you have to weigh the tradeoffs) and access to eight times the memory of a C64. I’ve toyed with the idea of writing a JIT that could use the extra memory to speed up screen display… One can dream.
I’ll be at both NA parties mentioned above, probably with some very old hardware, older effects, and even older person at the keyboard. Feel free to say hi.
Posted by Trixter on February 1, 2010
Despite what I wrote earlier, I decided to give it another go during a period of depression (you’ve been warned).
People tell me this is Progressive Trance. I’m not sure any more. All I know is that this music reflects how I feel when I’m at rest. Wistfully hopeful (if one can make an adverb of wistful).
It’s beatmixed, and I tried to group things harmonically. Transitions in the middle are weaker than the ends, but at least it starts and ends strong. I tried a different beatmixing approach in this one; earlier attempts adjusted BPM during the transitions, which was noticeable, and later mixes forced everything to the same BPM, which affected some music adversely. I decided this time around to very very slowly adjust the BPM throughout the entire mix, sometimes over several minutes, between 128 and 135. The goal was for the listener to not notice BPM differences if they listen to it all the way through.
Posted by Trixter on November 28, 2009
A great reason to go to a reunion is to catch up with old friends and see how everyone is doing. A bad reason would be to despair over missing a once-in-a-lifetime opportunity for the sole reason it comes along once in a lifetime. I went to my high school reunion for the latter reason, and lack the words to express how overjoyed I was that it led to the former.
I love the phrase “time heals all wounds”, despite how hackneyed and worn it is. It represents what I keep forgetting: The older everyone gets, the more level the playing field gets. There are people I have met in my professional career that would have never given me a second thought in high school (think “computer nerd meet-cutes head cheerleader”), and every time we interact, my inner nerd simply cannot get over the fact that we are interacting. It never ceases to amaze me how normally everyone can get along despite dissimilar backgrounds.
There were a few snags; my cell phone broke this afternoon so I had nothing to take pictures with, and there were two people from the high school radio station that I started to talk to but couldn’t because my ears were shot and I just couldn’t understand them. But those were secondary concerns compared to the best discovery of the evening: Viewing myself through other people’s eyes. We imagine the worst for ourselves, about ourselves, and yet the simplest things can completely turn your entire perspective on life around when you hear things like:
“I wanted to tell you how much your writing influenced me and shaped my own writing.” (It did?)
“I found people to talk to here tonight, and I wasn’t a part of anywhere near the number of clubs and organizations you were in.” (I was?)
“I just wanted to let you know how much I admired your character.” (My what?)
“You need to come over next time [we have a party]; you’d really get along with all the people who come.” (I would?)
I still find it somewhat hard to believe. But I’m starting to.
It’s humbling, and wonderful.
Posted by Trixter on November 15, 2009
Exactly one year ago, I attempted to change my entire life to get ready for my 20th-year New Trier Class of ’89 high school reunion. Brought on by conflicting emotions of wanting to be accepted and faint memories of truly good times, my head was swimming in thoughts like:
“I’m at a good place in my life right now, so I wouldn’t feel ashamed to attend.”
“Some of my old friends will be there, and it will be great to catch up.”
“Hey, I still have all my hair and none of it is gray; maybe if I lose a few pounds I can look closer to how people remember me.”
I can already sense what you’re thinking, and you’re right, but I went ahead with the plan anyway. I joined Weight Watchers, and worked up the courage to look for a new job that would advance my career while being rewarding at the same time. Lost 30 pounds. Got the new job. Mission accomplished. Well, the reunion is right around the corner — and I will not be attending. Why?
While I have some genuinely fond memories of both high school and the friends I met there, it became increasingly clear towards the end (this is the obvious part) that, 20 years later, I was still chasing feelings of inadequacy. New Trier was (and might still be) one of the most competitive public schools in America, with more than 80% of students scoring well above the national average during the time I went there. (The top 1/4th of my class had a weighted GPA of 3.9, and the top 1/10th had a weighted GPA of 4.6 which sounds impossible until you realize their entire coursework consisted of AP classes.) It was one of the largest suburban public schools of the time, with a total student population of nearly 3800 when I attended. My graduating class was over 800 students, nearly all of them grossly better than I was in almost every area of academia. And in my head, then and now, I was trying to be accepted by everyone I personally knew, usually failing at the same time. That’s not healthy.
I asked friends for advice on whether or not I should attend, and got good advice. When asking ‘shouldn’t I go to catch up with old friends, etc.?’ the responses were along the lines of “Isn’t that what facebook is for?” or “You knew them for four years, then didn’t talk to them for twenty; why do you want to go again?” or “My reunion consisted of all the jocks and cheerleaders hanging out with each other while a few people sat alone at tables — just like high school!!”, etc. The most humbling reply was from a friend who lives within driving distance: “You don’t need a reunion to catch up with me; stop by any time.”
They’re all correct. You can never go back, and in my case, I shouldn’t want to go back. Still, in my head, it stings.
Many of my fellow classmates have gone in enviable directions. Without naming names(*):
- Our class valedictorian (and a friend of mine) went to Harvard and then scored in the financial industry in the 1990s
- My first girlfriend became a Rhodes scholar and got her doctorate in a literary field and now lives in the UK
- One friend who was always a better programmer than me leapfrogged me entirely by becoming an electrical engineer who also did low-level interfaces for embedded systems (some medical, I believe)
- Another friend got her masters in environmental engineering and is now a director at a California water company, championing water quality
- One of my oldest friends (even before we attended high school) entered one of the most selfless professions and became an educator (say what you want, that takes dedication and cajones)
- My senior prom date got her doctorate in a musical field and has composed and performed music heard by hundreds of thousands people
- One ludicrously talented composer and performer made the leap to Hollywood and married a brilliant mathematician (and actress)
…and the list goes on. Compared to them, I could feel like a failure.
But I’ve done well too, in my own way. There is a dumb yet succinct saying that goes “The only person who can make you angry is you.” It took me a long time to realize that applies to how you feel good about yourself as well. So here’s where I bring the reunion to me, and tell any fellow Trevians who happen to catch this blog post how I’ve been doing:
- I met my wife Melissa attending Monmouth college. We were married in 1994, and have two wonderful boys, Sam (b. 1997) and Max (b. 1999).
- I have been working with Unix professionally since 1992, making it my career. I am currently a senior unix admin at a trading firm in Chicago, working with low latency messaging optimization and capacity planning.
- I started a game history website with another Trevian, Brian Hirt, which continues to be an authoritative resource on electronic gaming info. Brian was recently married, btw.
- I became involved in the demoscene and eventually had my 15 minutes of fame doing so. I also co-produced a DVD/Blu-ray series featuring the demoscene.
So that’s me since high school in a nutshell. Nice to see you again.
In honor of the positive times I had at New Trier, I’ve done two things. First, I’ve uploaded some photos of me during that time with friends to facebook, and I’ve tried to tag them where possible. (They should be viewable even if you don’t have a facebook account.) Secondly, and of substantially more interest to my typical nerdly blog readers, I’ve made available a transcription of the New Trier High School Fight Song played at every home game — as rendered by Music Construction Set running on a Tandy 1000 in loving 3-voice dampened square waves. Seriously.
Hey, I’ve still got my hair. That’s gotta count for something.
Whoa — is it me, or did it just get fatter in here?