Why did x86 never die?
This article on ITWorld about potential x86 replacements proposes that the reason x86 remained superior is that it had established software and that the potential replacements lacked compilers. Balderdash. In addition to the potential replacements Intel offered, the market offered hundreds of other possible replacements to the x86, many with phenomenal compilers. MIPS, PowerPC, DEC Alpha, and...
Programming is like building a house?
I saw this article today which compares programming to building a house. It’s a noble sentiment. However, one of the advantages of having (I can hardly believe it) 22 years of professional software development expertise is that I have seen trends like this come and go. Every few years, this theme of “Programming should be engineering!” resurfaces. And afterwards, even though...
Saw an interesting discussion on Slashdot today and thought I’d share some of my personal experience about receivables. I’ve been involved with lots of startups and this is a common occurrence. Delayed payment is normal. Large companies have very complex rules about how to make payments and how to process invoices. You must be extremely persistent and gracious in order to get...
Tinting Buttons in WPF
While working on the UI of a WPF application, someone told me, “If you’re going to change the background color of the form, why not re-tint all the buttons to match it?” So I thought I should write a tiny piece of code that takes as input a brush, lightens it by 50%, and assigns that to all controls of a certain type. Here’s how to do it: private void...
AltDev Student Summit 2012 →
My presentation at the AltDev Student Summit was about what new graduates should expect from the games industry. It’s a modified version of the presentation I gave to the San Diego State University ACM - http://acm.sdsu.edu/ - last month. This is a very light presentation with some interesting stories about the games industry.
New Article: Fix Your Pebbles
Just recently published my latest article, this time about my programming philosophy. This article talks about how I teach my team members to deliver results and apply their intelligence to problems. http://www.altdevblogaday.com/2012/10/21/fix-your-pebbles/
New Article: The Elements of Comment Style
I wrote a new article for AltDevBlogADay regarding the use of comments in programming. I’m rather happy with the way this article turned out; I find that the research and categorization I did when reading through my past work was quite useful in understanding how I use comments. Hopefully all of you will find the article fun reading too!
Never before in the history of mankind have so many connection strings been erroneously reset by such a simple project. With apologies to Winston Churchill.
Open source database schema comparisons!
I’ve really missed my old Red Gate SQL Compare product - I’ve been using it for years and it was a fantastic tool. But for working on independent projects, I just didn’t want to pay for a personal use license. So that’s why I’m excited to find this project: http://code.google.com/p/sql-dbdiff/ Despite the awkward user interface, this program does appear to get a...
A far better way of writing “string-to-type” conversion is here: http://www.hanselman.com/blog/TypeConvertersTheresNotEnoughTypeDescripterGetConverterInTheWorld.aspx Here’s the terrible thing about C# - it changes and grows so fast there’s tons of fantastic stuff in it that often slips below the radar. This is by far the best little type conversion kit I’ve seen!
Automated SSIS Decompiler
I’ve started an open source project to create an Automated SSIS Decompiler. This program is so far capable of reading in a DTSX package and writing, as output, a C# source code file and an accompanying configuration file. I’ll continue to develop this program as long as it helps me research my current administration / maintenance process; anyone who is interested in providing...
SSIS is not a useful product.
Read this article today while researching ways to migrate an SSIS package into a C# program. It would really be neat if there was a way to programmatically convert an SSIS abomination into a readable, intelligible C# / .NET program. Maybe that will be a useful project ;) http://ayende.com/blog/2637/ssis-15-faults So here’s the thing: why is SSIS bad? Honestly, when I used to use Data...
Introduction to Regression Analysis
I’ve been teaching people how to use basic regression for a while now, and I finally wrote it all up as an article here: http://www.altdevblogaday.com/2012/08/10/business-analytics-with-regression/ There are lots of tools available that are far more complex than you’d ever need, but fortunately there are open source tools that can really help you get started smoothly. Good luck!
C# Command Line Wrapper Library
So I got tired of writing and rewriting the same command line user interface over and over again. I have lots of programs that I write to be “automatable” - i.e. so that an operations team member can put it into a script and execute it, or schedule it, or batch it up. Rather than continue rewriting this stuff over and over, I wrote a library that accomplishes universal execution...
JPL was able to snap a picture of Curiosity as it...
This is truly the coolest photo I’ve seen in a while. Nice camera work. ;) http://www.nasa.gov/mission_pages/msl/news/msl20120806b.html
C# Library for Automating VMWare
This looks surprisingly useful! Why not have an Amazon-style scripted toolset for deploying images to your internal cloud? http://www.codeproject.com/Articles/31961/Automating-VMWare-Tasks-in-C-with-the-VIX-API This would have been fantastic back when we were deploying virtual GamePulse images every week.
QuickDraw Source Code
Ever wonder how the Mac was possible? Now you can actually download the 68000 assembly source code for Bill Atkinson’s QuickDraw, one of the most impressive toolkits you never really thought about: http://www.computerhistory.org/highlights/macpaint/
Your Task "Inventory"
Joel Spolsky wrote a cool article on the problems with letting your programming backlog get too big. http://www.joelonsoftware.com/items/2012/07/09.html Over the past five years I suffered heavily from this. There were always hundreds of bugs being reported; there we always years worth of backlog programming ideas in the queue. At the time, I felt it was useful to have a massive backlog of...
About Year-Week Dates
I did a lot of work in sales data processing. In America, sales data is reported monthly; and months are handled in one of two ways: either as a calendar month or as a NRF 4-5-4 calendar month, which is used to make year-over-year month comparisons consistent. Basically, the NRF calendar allows you to compare January 2011 to January 2012 in such a way that each month contains the same number of...
C# CSV Reader
Code that reads data from comma-separated files is quite tricky. Because most beginners simply split on the presence of a comma, and because this mostly works, it’s easy to get started with CSV files - but actually quite hard to perfect them. I wrote a library back in 2006 to parse these files, and have been modifying this for a long time. I just realized it’s really silly of me...
Microsoft research provides this helpful paper about how to run a Monte Carlo style simulation test of an API: http://research.microsoft.com/pubs/76578/randoop-tr.pdf The summary is that you can test your API by randomly calling it to ensure correct behavior for a wide range of possible inputs by randomizing within a known scope.
Article reposted on Gamasutra
Just got it up on their front page today: http://www.gamasutra.com/view/news/174545/Opinion_Programmer_Moneyball.php
How to Get Rid of Metro in Windows 8
For those of you frustrated with the Metro UI in Windows 8, here’s a link you may need. To disable it, simply follow these steps Start, Run: “regedit” Expand HKEY_CURRENT_USER, SOFTWARE, Microsoft, Windows, CurrentVersion, Explorer Doubleclick on the value “RPEnabled” and change the value to “0”. Reboot your computer. Sounds good to me! Source...
New article - Programmer Moneyball
I wrote another article for AltDevBlogADay: Programmer Moneyball. It’s about my experience with hiring and how I’ve found ways to get talented engineers on a budget, even in a tight market.
The PHP Singularity →
This article generates lots of controversy since it touches on a constant dichotomy in programming: getting things done vs doing things correctly. PHP is, by anyone’s criteria, the exemplar of “get things done”. The language has no consistency; it is simply a collection of hacks to get things done. C#, on the other hand, is a fantastic example of “doing things...
Fixing a Slow Server
Posted an article with some general advice for fixing a slow server process: http://www.altdevblogaday.com/2012/06/25/fixing-a-slow-server/
Now that I’m running a nearly fully virtualized environment out of my house, I notice a curious problem. I don’t run a DNS server, and lots of my machines have obnoxious naming issues. For example, I have a CentOS installation that I want to be named “tomcathost”. However, since I haven’t bothered to set up a DNS server for this, the address...
About the GUID
Although I know bits and pieces about GUIDs, I often found myself wondering why exactly certain numbers changed in certain ways over time. Anyways, as it turns out there is an explicit reason: a GUID is actually a structured number and the values do mean something. It’s fascinating to me how the original MAC address scheme is still quite so useful now as it was when it was originally...
SQL Server: Text and Document Retrieval
New article up on the using SQL Server to manage text and document data types. In general this stuff is easy to do, but there are lots of pitfalls along the way. I strongly recommend understanding the balance between using file systems to store large, plain data and using SQL to store small, tight, highly structured and relational data. ...
SQL Server high performance inserts
New article up! This time it’s on SQL Server high performance inserts. Keep in mind, designing your SQL database for rapid inserts is just one type of optimization. There’s lots more, amply demonstrated by the Slashdot article today regarding CouchDB and MySQL. You can continuously become dissatisfied with your database, make adjustments, replace it, and keep going. Good...
Java Spring is nice
Java SpringSource is a pretty decent substitute for the Visual Studio and C# I’ve used over the years. I’m still not a huge fan of Eclipse, but when you write high level abstracted MVC-style websites, the end result is pretty solid. /** * Simply selects the home view to render by returning its name. */ @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale...
SQL Server Performance Tuning →
My article for #AltDevBlog this week is about SQL Server performance tuning. Although not every gaming company uses SQL Server for its back end datastore, there are lots of good reasons to use it, and lots of good ways to tune your queries. http://www.altdevblogaday.com/2012/05/02/sql-server-performance-part-1/
Headless Linux Server with VNC Connection
So I installed a CentOS 6.2 server in my closet to store my media files. However, I’d really like to be able to connect to the desktop and play around with the latest Linux UI - so I tried setting up VNC. Big mistake! VNC is very tricky to set up, and Google has lots of misleading results. Using the first few searches, I was recommended x11vnc, LTSP, K12Linux, and bunches of other...
Short shell command for hard drive temperature
I recently built a headless CentOS 6.2 computer to shut up in my closet. While I worried about the hard drives’ temperature, I decided to figure out a way to do a quick check using SSH. Here’s a shell command that iterates through all hard drives in the system and displays only the temperature readings from their SMART data feeds. for f in /dev/sd? ; do echo `smartctl -A $f |...
Lessons Learned from Training Interns
I joined #AltDevBlogADay - my first article, and it’s on interns. Props to all of you who’ve worked with me to make these internships a success!
How to Read a Floppy
Ever since Steve Jobs announced that floppy drives would not exist on the iMac, we’ve been phasing out this once-essential piece of technology. Now, in order to actually produce usable data off a floppy drive, we have to resort to complex audio processing techniques. Apparently Price of Persia has been saved from the history bin in this method. Now if only they could bring back MULE!...
Classic videogame dialogue
Very few conversations in videogaming worked quite as well as the ones from Star Control 2: #(what_about_guy_in_back) Does that guy in back ever say anything? #(ABOUT_GUY0) zoqfotpik-289.ogg Nope. #(ABOUT_GUY1) zoqfotpik-290.ogg Not a word. I love the fact that they designed the conversation system using basic text parsing algorithms. Each line of dialogue could be retrieved with a basic C or...
Hex Workshop →
Finally, a tool I can use to browse gigantic binary files the way I use Notepad++ for text files!
Jack Tramiel, 1928-2012
He passed away today. Here’s a great interview from his earlier days. This guy was hard. He was a tough bastard, and you’ll appreciate how his completely indomitable attitude created the modern PC market, both created and destroyed the Atari videogame bubble in the early ’80s, and led to Bill Gates’ domination of the PC industry for the next twenty years. The book is...
CPUDB - Why have processors succeeded?
This article at the ACM explains Stanford’s CPUDB project, which analyzes historical and modern SPEC performance numbers using a clever batch of extrapolation and metadata. It’s clearly the definitive database on CPU history and a treasure of resources for geeks like me who can’t stand to switch back to CPU95 for historical reports. http://queue.acm.org/detail.cfm?id=2181798 ...
Automated Testing - The Crazy Way →
This comment was written by the author who wrote a test suite for Microsoft in the olden days. The really olden days. This tool used a PRNG to generate random parameters for binary function calls - well, just read the comment and it’ll start to make sense. http://tech.slashdot.org/comments.pl?sid=2761033&cid=39549147 The moral of the story: Don’t knock crazy ideas. Crazy ideas...
Custom Networking Hardware →
With the rise of scalable data centers, one-size-fits-all switches just aren’t possible anymore. The vendors who build switches in standard configurations - 24 port, 48 port, with uplink, without uplink - have had to give way to those who custom build the switches directly for the application. http://www.wired.com/wiredenterprise/2012/03/google-microsoft-network-gear/all/1 This was...
Better assembler calling conventions in x64
As many of you know, the x86 instruction set was pretty wacky. It accumulated lots of interesting ideas over the years, most of which gradually got superceded and replaced by better ideas. But, for legacy reasons, many of them had to stick around. One of the most unique problems with calling conventions has apparently been addressed - it’s just been so long since I did assembly that I...
Outlook Contacts Are Missing?
I’ve been wondering for a while why certain contacts never show up in Outlook 2010. The pattern is odd, but surprisingly common: When emailing someone, their contact shows up. I can edit it, add details, and write notes. However, when the time comes to share a contact with a colleague, I try to dig up the business card and I can’t find it. Eventually I recreate the contact, only...
How to estimate when estimating doesn't work?
We all know that software engineering isn’t really estimatable in the same way that, say, welding a steel girder is estimatable. It’s possible to look up serious, scientific research into the amount of time it takes to weld something. But nobody writes articles about how long it takes to build a red-black tree indexed off of a 20 character string and an integer, or how long it takes...
Cleaning up SQL Server 2008 Simple Databases
We make lots of databases here at the office. Often they’re play databases, or restore databases, or test databases. Since they rarely progress from development status to production status, they need to be set up with simple recovery model so they don’t collapse under the weight of the dozens of gigabytes of transaction logs my programmers pump in every day (at least, until Western...
Social/Phone Gaming and Bugs
With the comments from some analysts today that social gaming is flat or unsustainable, let me mention something that may be clear to people on the inside but might not be visible to the outside: Social games, and mobile / iPhone games, are designed to exploit platform bugs. What does this mean? Some facebook games became popular because they exploited the ability of applications to generate...
Reed Hastings Claims To Be Moneyball
“We’re very much the ‘moneyball’ content buyers,” Hastings said, referring to Michael Lewis’ book about a low-budget baseball team’s approach to player acquisition. “We’ll look at, OK, we paid X for something, so how many people watched it?” Netflix has problems. At least, their streaming service has problems. The biggest problem...
Multithreading a User
Programmers spend lots of time writing multithreaded applications that can get work done while the user is thinking, or reading, or whatnot. We know, almost instinctively, how to make the program fast. But we often don’t think about making the user fast. Why? Well, the first reason is that computer science classes often say “Waiting for I/O is slow;” and leave it at that. ...