OK, Joel gets it: Our .NET Strategy basically explains that their VBScript ASP stuff (shudder) talks to some C++ stuff (smaller shudder) but that thy're moving toward ASP.NET and C# (whew). So, both Joel and Phil seem to agree with the idea of mixing scripting code with "heavy lifting" code to make an application that's not a total pain in the butt to maintain.
If web design were inspired by eye test charts, what would it look like? It would look like this.
After years of dealing with a slowly dying ReplayTV digital video recorder, the remote finally died and won't come back to life, period. Yeah I painted the buttons with conductive paint, about a dozen times already. Yeah I checked AVSForum. It's dead dead dead. The composite video out on the unit is toast, the picture has increasingly noticeable dark bands across it, and I'm pretty sure that the thing that's interfering with our telephone land line (which messes up DSL from time to time, and makes odd noises during voice calls) is the ReplayTV. I've been trying to do the gizmo equivalent of driving a car until the wheels fall off, and they've very nearly fallen off. A new remote isn't worth it. And now ReplayTV is getting out of the hardware business. We'll probably go with DIRECTV now, because Comcast is annoying and we don't want to give them another dime, and DIRECTV gives you a free DVR when you sign up. I wish we had signed up a few months ago when TiVo DIRECTV set top boxes were still available; they record the pre-compressed satellite digital TV signal instead of taking the decompressed composite signal and recompressing it for hard disk storage, so the picture quality is much higher from what I've been told. Alas, the TiVo relationship is over, so we'll be guinea pigs for the new proprietary DIRECTV DVR box, which is free with a rebate, so if we hate it we might spend $100 or whatever for a DIRECTV TiVo set top box on eBay, but probably not.
NVU 1.0 is really a pretty good WYSIWYG HTML editor. It's free, it's open source, it's based on Gecko so its HTML rendering is decent, and, well, it works pretty darn well. I used it as a document editing tool for a software evaluation I'll be publishing soon; it was really quite painless.
If you like Christmas music and like vocal synthpop any, you probably would like Venus Hum, and especially their Switched-On Christmas EP, available only on the iTunes Music Store. They also have a music video on iTunes, and the CD for the Songs for Superheroes EP has a video for Fighting for Love that's one of my favorite videos of all time. If you don't get the "switched on" reference, it's a reference to Switched On Bach by synth pioneer Wendy Carlos, whose you've heard in the scores for A Clockwork Orange, The Shining, and TRON, even if you didn't notice it.
Last party of the year, don't hold anything back!
Projects that end up making products often need to pick a code name for the product, because branding and marketing take time, but you have to call the product something from day one. Just don't give a code-name to the project, especially not one starting with the word Project. That's dorky. Even dorkier is if you pick a dorky word to follow the word "Project", as in Project Aardvark. Dear lord. That's just a hair shy of Operation Vorpal Cyber Mucus on the dorkometer. Nevertheless, I bought (pre-ordered, even) the Aardvark'd DVD, and aside from a cringeworthy touchy-feely soundtrack made up of acoustic strumming and timid vocals singing about the nerdy goings-on at that point in the movie, it's pretty interesting. Fog Creek Software is basically exactly as I imagined it, as is Joel Spolsky.
I still have a fundamental disagreement with Fog Creek's technology stack decision for FogBugz, which seems to be based on the same reasoning as Phil Greenspun's in Sites That Are Really Programs. It goes something like this: hire the smartest people you possibly can, because invidivual programmer productivity varies tremendously, so a $100K/yr programmer can be many times more productive than a $60K/yr programmer, especially if you count the hidden costs of maintaining their code over the next few years. Then, take these geniuses and give them a crappy scripting language intended for non-programmers writing simple programs, and they will be incredibly productive. Don't worry about static error-checking (also known as compilation) or automated testing, just bang on it and fix problems as you find them because it's so easy to do so. Don't worry about the cost of paying human testers to bang on the code over and over and over. Don't worry about the temptation to spew lots of scripting code to do something slowly and awkwardly that should be done in a more sophisticated language easily, since it takes extra effort to get at the more sophisticated code from the scripting language.
It's puzzling to me, because Joel and Phil are both really smart guys who seem to get it in so many ways, but when you'd expect them to go for a more exotic high level language (Lisp, etc.), instead they've each picked a "For Dummies" language made for gluing Real Programs(tm) together. I've seen enough projects that tried to combine a "for dummies" language with a "for heavy lifting" language, and the "for heavy lifting" language never gets used in favor of really gross, slow, unreadable hacks in the "for dummies" language because someone had a deadline and nobody ever broke through the barrier of integrating "heavy lifting" components. I sincerely hope that I'm missing something in both cases. Phil's conclusion (use TCL) is based on some bogus assumptions:
It's also based on the fact that at the time, Perl meant CGI which meant horrible performance, and that AOLServer fixed that problem with a good set of built-in functions if you were willing to use TCL. So his steps of picking a language then an architecture is apparently not the actual decision making sequence he used.
There's a good update that Phil has added: "Finally, don't forget that even if you're developing individual pages in a scripting language you can write substrate programs in C#, Java, PL/SQL and other more complex languages." Exactly. Unix embodies this design (at a process level), as does COM and as do most scripting languages: you write standalone components in a "heavy lifting" language that do one thing and do it well, such as sending a SQL statement to a database and getting back the results, or compressing a file on disk, or creating a PDF file. Then you glue that together with logic written in a simpler and easier to write language, that you call a scripting language. The problem is that I don't see web application projects actually using both; they either use the complicated and more capable "heavy lifting" language, or a lightweight and not very expressive "for dummies" language, but not both, so some percentage of any medium to large sized application written with this one-language-fits-all-problems approach is written at the wrong level of abstraction. Vendors provide the tools, in the form of built in functions for page scripting environments and component mechanisms for getting at code written in "heavy lifting" languages, but people don't use it. Or they pick an environment that lets you plug in a lightweight page scripting language instead of writing web pages in a "heavy lifting" language, but they don't bother to use that capability. I think there's also an interesting gray area between scripting languages and declarative or resource-driven frameworks: either way you're reusing code without programming in a complex language; I haven't seen more than one or two tools that really tried to put zero code in a web page, instead letting the web pages be marked up so that code could easily manipulate it (without emitting any HTML) to add repeating elements etc. before rendering them and sending them to the browser.
In Joel's case my concern is based on an evaluation of FogBugz that I did a few months ago. It's written in some flavor of ASP that gets automatically translated into PHP for the Unix port. That's nice from a low-porting-effort perspective but it suggests that there is no part of the application that is not written in ASP, otherwise it wouldn't be translatable to PHP. It also supports a bunch of different database options, which suggests that unlike Phil who recommends that you actually lean hard on a real RDBMS and all of its features (triggers, stored procedures, and transactions, for example), Joel seems to be OK with all that stuff living in the application layer, in ASP. Seriously, writing a serious web application in straight ASP and SQL? I hope I'm missing something. You can QA it all you want, but I've had to work on projects like that from time to time, and the result is not pretty. It's possible to write good code in most programming languages, yes. Some would say "in any programming language" but that's just not true; try writing a JPEG library as an MS-DOS BATCH file, for example. But using a scripting language to write robuse code requires a hell of a lot of discipline, and I question whether you really get any benefit at that point. Code in JScript or TCL as if you were writing an Eiffel program, complete with argument checks and unit tests and SQL encapsulation and all that stuff that makes programs actually work when they become too complicated for one person to just understand the whole thing at once. Have you gained anything? I doubt it.
That said, I'm getting tired of Java, and especially the "XML creep" that has made it less fun to work with. I've never liked Ant, and though I accepted for a while that it was unavoidable, I'm glad to see that Maven has made Ant much less necessary. I've used Maven, and it's really good (though 2.0 isn't really complete since many plugins that I consider necessary and used in 1.0 projects aren't updated for 2.0 yet). Ant has serious quality problems and it's amazing how many people use it despite all of the bugs. Struts solves mostly nonexistent problems, and the ones that do exist it solves poorly, with rotten documentation. Tomcat, like Ant, has an amazing ratio of bugs to userbase size. It's not dog slow anymore but the documentation is awful, and most notably a few members of the development team have an attitude problem that boils down to "unless Sun wrote a spec about it, it does what I say and user feedback is unwelcome." Not all, but even one is a total pain in the butt. It's sort of a "love it or leave it" attitude which really doesn't encourage me to try and file bug reports and make enhancement suggestions. I'm looking outside of the Jakarta universe to projects like Resin, EMMA, Hibernate, and Wicket to remind myself that there are people who are doing cool and interesting things in Java these days.
I really like some of the Java 1.5 enhancements, but of course the business world is still struggling with the idea that maybe Linux is a thing they could use and maybe Java 1.4 is ready to use now and maybe IE 6 isn't the only web browser in the world. They pays the bills so I puts up with their reality, though.
Still, I'm curious about Ruby and Python and Scheme and Eiffel and other such things that Fortune 500's could give a rat's patootie about, and would probably resist adopting if given the chance. I like the Application Service Provider business model if only because it allows technical people to make choices that aren't based on customers' IT managers' relationships with giant dumb IT vendors that come from when the CIO and a VP at the vendor used to work together at a big consulting shop in the 80s. Those decisions tend to preserve necessary mission critical systems but at a high cost of outsourcing cronyism and with a hidden cost of only selecting vendors who use really expensive enterprise technologies that their app doesn't need but that the vendor sold the IT department years and years ago. (We spent big money on this darn thing, and we're looking for something to use it for! So you have to use it if you want us to buy your app.)
I'm very willing to try the part of XP that says that it's OK to use a dynamically typed, advanced language like Smalltalk, if and only if you write a bunch of unit tests to make sure that it works the way you think it does. Any programming language can make you think you're extra productive if you don't bother to check inputs and do your QA one time per section of the code, using a small set of typical test data. What happens if you hand the code a negative number, an empty string, a 1GB file, a carefully quoted string that's trying to hijack your SQL or command line call, etc.? That stuff takes time and you have to write tests to make sure that works, otherwise it'll break six months from now and you won't catch it but your users will. Since I'm obsessive about unit testing anyway, the static typing and syntax checking I get with Java (which is incrementally compiled in every modern Java IDE, so you get feedback in about 1 second) might be something I wouldn't miss, especially if I could spend less time coding (in a more expressive language than Java) and more time writing tests in that same more expressive language. I have a feeling that it would be a win on both fronts. Note that this is very different from me just loading up a Ruby on Rails page to see if it works; manual QA testing is slow, inaccurate, expensive, and costs almost the same every time you repeat it as it did to write and debug the tests the first time. You have to do it but it's far more efficient to do lots of automated testing first, so that the number of manual QA cycles required to get an app from feature-complete to releaseable status is minimized.
I'm working on a new project using J2ME, and I'm excited to get away from all the big dumb enterprise Java stuff that I mentioned above. I have a feeling that Java can be fun again if you take out the big dumb company technology bias (as found in EJB, JSP, Ant, and Struts) and replace it with wee device bias and a startup mentality of making something new and unique that's technically solid and feels like magic foo when you use it.
I'm off crutches, yay! I had a doctor's appointment today and he gave me the go-ahead to stop wearing the boot and using crutches. I'm in normal person shoes again. I'm not all better, though; I still have to hobble because my tendons in my ankle are really tight and need lots of stretching before I walk, and I think some of the little stabilizer muscles in my knee are atrophied. It doesn't hurt, it all just feels wobbly and tight. But it's so nice to have my hands back, so I can pick things up and carry them around. It's really annoying not to be able to carry anything that won't fit in a backpack or pockets, such as a bowl of cereal or cuppa coffee. I'd been rolling around the kitchen and dining room area in an office chair, which got the job done but annoyed our downstairs neighbors (tile floor in the kitchen!).
The little bone in my ankle that broke off never healed but the doctor said some people have a wee bone there that isn't attached so it'll probably be fine like that. If not I can just have them surgically remove it, which would mean more crutches, I guess.
Check out this pink flying-v ukelele. It's like a matter antimatter reaction. Pink, but a flying fucking v. It's so much more bizarre than even the Hello Kitty Strat. They have a black flying-v ukelele also, but I really don't think it makes quite the same statement that a pink one does. I don't know what that statement is exactly, but there's one being made nonetheless. If they ever make a George "Mr. Scary" Lynch skull & bones ukelele I might not be able to resist.
Even better: play your pink flying-v ukelele or Hello Kitty strat while your Ewok cupcakes are baking.
This is the best downloads page I've ever seen. SourceForce needs to hire this guy to redesign their retardo downloads page.
If you're looking for a charity to make a donation to, consider Creative Commons.
I'm done with school for the semester, woo hoo! I had to write two papers and perform a song that I wrote for Piano class (I think I was the only person who composed something new for the final instead of just choosing an existing piece) and that all went well. Now I'm back at work as a telecommuting contract software developer, for the duration of the winter break.
My ankle is still broken; the doctor says that some people have an "accessory bone" where my bone chip is and that it may or may not require surgery to correct (removal or re-attachment). More time in crutches, no idea of where this is going. Fortunately it doesn't hurt, and I don't really need to go anywhere for the next few weeks (we're not traveling for Christmas), so it's just a minor annoyance. I hope it gets better soon 'cuz we have New Year's Eve plans and I'd like to be able to stand up on my own by then. If not, oh well; I'm not going to rush this. I've already pretty much given up on ski season for this year and everything I've read about sprains says that it can take months to fully heal, so I'll definitely chill out and give it time to get better before I start stressing it out again with cycling and skiing and hiking and stuff like that.
I was looking for more info about actual ankle breaks, as opposed to my sprain with bone chip. Wow. Really breaking your ankle, as in the tibia and/or fibula all the way across, is a total nightmare. Check out this page... try to cut yourself off from reading the comments before you start to cry. Permanently decreased mobility, chronic pain, depression... yikes. Okay so I'm not only cheered up about my meager bone chip but holy cow am I gonna baby this thing until it heals.
Added to my regularly recorded TV shows now is The Boondocks. Very very funny stuff.
I wish I had known that djb had an Advice for Computer Buyers page. His "standard workstation" is pretty close to what I put together on my own, except mine is a bit older, and has a bunch of drives in it because it's being used as a server. Anyway, this would make an awesome desktop PC. He even tells you exactly how to put it together.
NBC has added some content to the iTunes Video store. I was kind of wondering how long it was going to take before somebody else offered their content for sale; it didn't look good for Apple for a while there. I guess the studios are terrified. They're certainly taking forever to make a decision about HD DVD formats. It's good to see that people are actually buying videos online and that it's not just Steve's friends at Disney offering content anymore. Everybody talks about Jack Valenti's fear and loathing of the VCR which turned out to make Hollywood a ton of money, but we haven't seen a viable way for video to get paid for and distributed online until now. It's either been ultra heavy on DRM, or it's just movie piracy which is free only if your time is worthless and you don't mind downloading the same thing five times before you get a half-decent version of it. Apple has a long way to go as far as user experience, but the thing that I like is the idea that normal people can legally get TV shows in an acceptable form. Once the mass market gets used to the idea that this is possible, I think they'll laugh off any of the more draconian distribution ideas that the studios put forth until a reasonable compromise comes about. I doubt it'll be via Apple, but I think Apple will be the ones who show that it can be done and money can be made off of selling downloads of what an AV nerd might consider shockingly low quality video content. Everything doesn't have to be a bazillion gigabyte HD surround extravaganza that can only be fully appreciated on a $20,000 home theater rig.
Musicians have cool stories: electric guitar god Steve Vai writes about playing "Fire Strings" (super difficult avant garde classical electric guitar with 100-piece symphony) both before and after the actual gig. Awesome. I hope he publishes the recording soon! And keyboard genius Keith Emerson tells a story about a critter that was far too rock 'n roll itself to become a pet of a rock star.
This Katamari Damacy t-shirt store has the coolest shopping cart UI I've ever seen: drag and drop! DHTML lives!
This week I'm taking some early final exams (the ones that happen during the last week of classes instead of the official final exam week). Yesterday I accompanied a santour player on piano as we played Morgh Sahar. That went pretty well. Today I have the final exam for Music of the World's Peoples. Tomorrow Faraz (the santour player) accompanies me on piano as I play a song I wrote for this class on bass guitar.
After that it's back to being a software guy again, during the winter break. I haven't picked out my Spring 2006 classes yet but that has to happen pretty soon too. I'm thinking about maybe joining as many ensembles as I can get into (which would probably max out at about 4 or 5 because there are only so many ensembles that are looking for a bass guitarist) and taking maybe one regular class, just to force me to read music and practice like crazy.
I've been reading A Random Walk Down Wall Street which is both informative and quite funny. Now I'm surprised I haven't heard more about widespread oil speculation. I fully expect Wired to publish a chart including this soon. It'd be something like this: Tired: Housing Bubble. Wired: Oil Bubble. Retired: Tech Stock Bubble. If you think about it, bubbles arise when laypeople become so convinced that the price of something will keep going up and that people will buy it no matter what the price is. The withdrawal of ANWR drilling regulation means that prices aren't going to suddenly drop, and the promises from the folks at Honest al-Eddie's Crude Shack etc. in Saudia Arabia notwithstanding, supply is not going to increase, while demand will. Bingo!
Actually, maybe investing in crazy futuristic energy companies is a better idea since you can patent energy technologies and you can't patent oil (yet). The best bubbles are the ones that let you invest in something that doesn't exist yet, so that people who don't actually have anything to sell other than a promise that they'll make you filthy rich can take your money, so that you can turn around and sell it to someone else for a higher price. Nanobots that scrub off engine deposits? Quantum computers that crunch minute variations in the Earth's magnetic field and the reflections of extremely low frequency sonar pings to guess where undiscovered oil fields are? Buckytubes for hyperefficient fuel cells? Hot stock tip! Quantum-nano-bio-stem-o-tron Labs is about to come out with a new energy technology that's gonna revolutionize transportation! No, not like Ginger/"IT". This time it's real! Stock symbol RUBE, on the Kazakhstan exchange! Buy now!
The AMD and Intel battle for the PC processor crown continues. Tom's Hardware has a really brutal multitasking benchmark with very close results but the Intel processor is much more power hungry and is much more expensive. There's also a CNET review that compares them which shows the AMD X2 processors absolutely slamming the Intel gear. I'm glad to see that AMD is winning, whether it's by a little or by a ton, because my Linux server has a Socket 939 motherboard which means I could spend about $350 and roughly double my server's already more-than-adequate performance, or almost $800 for the 4800+ model that's the one that did the best in all those benchmark tests. For now I'm not spending a dime since my server spends almost all day doing nothing, but when I go back to work in a week and I'm running all sorts of software builds and development apps on it, I might go for that low-end one. Kudos to AMD for making it possible for me to get a cheap Socket 939 processor over a year ago, making it possible for me to just pull that out and drop in a new one and double or triple (or more) my current performance. It's good to know that the option is there.
Speaking of money spending, I haven't been playing games much over the last year, but I did play through Star Trek: Elite Force II recently and had a lot of fun. As much as reviews and l33t g4m3rz disparage single-player mode in these games in favor of endless online play against human opponents, I like the bounded time frame that comes with a single player campaign. And the lack of cheating. This game is based on Quake 3, which means it's really just a first person shooter with phasers and a tricorder and Trek models instead of machine guns and alien demons that seem almost actionably similar to the ones in Aliens, but not quite. Oh wait, I almost forgot, Star Trek Elite Force II is basically just you fighting against alien demon thingies. I was disappointed in that after starting out fighting against Borg, but the single player story is long and involved and you get to fight lots of different kinds of opponents in different environments so it's not that bad. It was sort of monotonous in the early-middle part: Jeffries tube, alien jumps at you, hallway, alien jumps at you, Jeffries tube again. But unlike just about every game I've played in the last two years, I actually was curious enough about the plot to finish it, or maybe I felt like I was getting through it fast enough to just press on and get to the end. There's nothing like a 40 hour estimated minimum expert playthrough time to make a fit of boredom 25 hours in seem like a good reason to quit playing the thing permanently. I finished this one because I just wanted to see how it ended. The story is kind of contrived: how do you turn the team- and ship-oriented stories of Star Trek into a single person shoot em up? They created a "hazard team" military strike force and of course you're in charge of it, and humorously there's even a love triangle that you get exactly two chances to influence the outcome of. Excuse me, if I want a love story I'll turn on the Lifetime Network. Now hand me that Romulan Experimental Radiation Disruptor.
I recently ordered a couple of used games that got good ratings. Why bother buying a $2000 gaming PC and a buch of $50 games when you can just spend $9.79 (including shipping) on a game from two years ago that got a 9.1 out of 10 rating and works on the hardware you already have? I haven't played Shadow of the Colossus lately, mainly because I haven't had a lot of time (translation: I was playing Elite Force II instead and that took up all my gaming time, and then some); I think I'll probably play it again and finish it simply because it's not a monotonous hack and slash game. It's a puzzle game, really, which you solve by jumping and climbing and stabbing, sorta like Tomb Raider II except that unlike that game, this one is fun.
Now that the Xbox 360 is out, I was starting to think about what console I would buy from the next generation. The first problem with that thinking is that I don't play games on my current console, so maybe dropping hundreds of dollars on a new console is dumb. I tend to like involved RPG games, and those don't work well without a keyboard. I used to want to keep gaming off of my computer because of the crappy drivers and OS upgrades that games seem to be dependent on, but lately (maybe because I don't use Windows for gaming anymore) that doesn't seem to be a problem; there aren't all those OS-level patches and updates and add-ons that are needed just to play the latest and greatest game. Maybe I'll just keep cherrypicking the best used games ported to the Mac and published by Aspyr and MacPlay for a while? That's definitely the cheapest strategy since I don't play games that often anyway. I think it would be fun to help Microsoft throw $126 at me by buying an Xbox but I probably wouldn't play but two or three games on the thing anyway, and I try to avoid Microsoft products as much as possible anyway. Sony's not much less evil than Microsoft lately, though, so it's kind of a toss-up.