Ugly, helpful error messages

I've been trying to sign up for an ACM SIGPLAN membership for over a week. Whenever I hit the button to submit my application, I got an error message with a bunch of raw stack trace information. I figured eventually someone at the ACM would fix this, but apparently not.

Around about the tenth time that my application failed to be processed, I finally decided to read the error message carefully. Here's what I saw:

More...
Yahir: The article is nicely written, thanks for sharing it. Canada...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
edfashionclothes: Thank you for the message!With the advent of Christmas and t...
nikeaf1jordanshoes: Good job!Thank you for your message!It help me so much! Chri...
uggsnowbootsbest: Thank you for the great job!In order to welcome to Christma...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: Christian Louboutindiscount Yves Saint Laurent Shoescheap Ch...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Ocaml stubbed my toe

In ocaml, the expression 0.0 == 0.0 +. 0.0 is false. Gah! That is so stupid. I miss haskell.

lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rolex watch for sale: cheap replica watchesRolex watch for saleIWC watch for saleR...
Montblanc watches: watches replicaMontblanc watchesreplica Rolex DatejustLady r...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: cheap Christian Louboutincheap Christian Louboutin Pumpdisco...
replica Audemars Piguet: Christian LouboutinChristian Louboutin Shoes on salecheap Ch...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Cellular automata over a graph?

Is anybody aware of a project that has created a cellular automata-like system, but where the grid is replaced by a directed graph? In other words, each node has a state plus a list of neighboring nodes, and a rule for computing the next state as a function of those two things. Many relaxation-based graph layout algorithms are based on a data structure like this, but the rules are usually hand-crafted. In contrast, a cellular automata-style system would view the rules as being configurable.

I've been thinking about using evolutionary algorithms to play around with source code. One of the most natural ways of doing this, to my mind, is to use a system like the one I just described. The directed graph would be the program AST, enriched with edges representing function references, variable references, and type references. My main open question right now is how to represent the node state and transition rules (these two things being intimately related). The state needs to be simple so that it is easily manipulable by the transition rules, yet it also needs to be sophisticated so that it can encode interesting information.

I'm currently thinking of having a fixed number of state variables per node, but allowing each state variable to hold a set of values. That way you can get rich information (any number of values), with a simple interface (insert, remove, and query-membership). The state transition algorithm might be different for each node type. The instruction set would include SIMD instructions for working with all the edges of a given type, or all the values in a set, at once.

If anybody is aware of any other projects working on applying evolutionary algorithms applied to directed graphs, please let me know. (Genetic Programming doesn't count; it uses a DAG to represent the phenotype, not the environment.)

magicstix: President Inauguration. Sampai Kapan Indonesia Terus Memben...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Glashutte watch for sale: replica watchesGlashutte watch for saleHermes replicaRolex D...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: Christian LouboutinChristian Louboutin Shoes on salecheap Ch...
uggboots: ugg boots sale at a time when large heat has set off a winte...

log-structured file systems vs heap-allocated frames

During a discussion with a co-worker, the similarities between log-structured file systems and heap-allocated stack frames came up. They're basically the same concept, except that the former is optimized for disks, while the latter is optimized for memory. The first is useful for supporting transactions against a persistent store, while the second is used to support multi-shot continuations. This suggests that there's probably some insight in here where you realize that continuations and transactions are, in some larger sense, really the same thing.

In particular, consider that heap-allocated stack frames preserve the lexical state, but not the global state. Is there some analog to this concept for transactional systems, where some data is held constant per-transaction, but other data is shared globally? In the context of continuations this distinction makes sense -- the local state is essentially just flow control information -- but I'm not aware of any analog to flow control in transactional systems.

There's this paper on composable memory transactions, which is basically a log-structured store for functional programming languages. But because functional programming languages don't have side effects, the distinction between global and local state doesn't really apply here.

Hmmm.

Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Rolex Day-Date II watch for sale: cheap replica watchesBreitling replicaRolex Day-Date II watc...
Rolex Milgauss watch for sale: replica watchesRolex Milgauss watch for salereplica Lady Wat...
Rolex Milgauss watch for sale: replica watchesRolex Milgauss watch for salereplica Lady Wat...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...

Misunderstandings

Kitchen Bins: Loved it... Lol.. Hilarious......
indonesia: The Airlines Page. JAL - Japan Airlines. Malaysia Airlines...
Kitchen Bins: Loved it... Lol.. Hilarious......
indonesia: The Airlines Page. JAL - Japan Airlines. Malaysia Airlines...
indonesia: The Airlines Page. JAL - Japan Airlines. Malaysia Airlines...
uggboots: ugg boots sale at a time when large heat has set off a winte...
Indonesia: Guam Page | Guam Jobs | Guam Map | Guam Hotel | Guam Home | ...
Guam: Guam Page | Guam Jobs | Guam Map | Guam Hotel | Guam Home | ...
tiffanys : Lazy marriage family, is a very good jobtiffany jewelryHave ...
paul: if people awake, learn a lot of precious things, let people ...

Where I Work

I can finally mention where I've been working for the last 12 months. I work at StreamBase, which has been mentioned recently in Forbes, InfoWorld, MSNBC, and Slashdot.

I find it a very exhilerating place to work -- there's a lot going on, a lot of really smart people, and a lot of interesting stuff still to do. However I still can't say much publically about the technology. All I can really do is point at the press coverage and interviews.

linkboots: UGG Bailey Button UGG Christmas Special Offer UGG Classic ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rolex Day-Date II watch for sale: replica watchesRolex Day-Date II watch for salereplica Rolex...
Louis Vuitton watch for sale: cheap replica watchesLouis Vuitton watch for saleRolex Datej...
Louis Vuitton watch for sale: cheap replica watchesLouis Vuitton watch for saleRolex Datej...
Louis Vuitton watch for sale: cheap replica watchesLouis Vuitton watch for saleRolex Datej...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: Christian Louboutincheap Christian Louboutin PumpsChristian ...
louis: Classical And Simple Style Of Louis Vuitton Spring 2010 .Let...

Buddhabrot

The Gallery of Computation at complexification.net has several interesting computer-generated pictures. I found it via a link to the buddabrot on mathforge.

fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
nikeaf1jordanshoes: Good job!Thank you for your message!It help me so much! Chri...
edfashionclothes: Thank you for the message!With the advent of Christmas and t...
uggsnowbootsbest: Thank you for the great job!In order to welcome to Christma...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rolex Day Date watch for sale: watches replicaRolex Day Date watch for salereplica RadoHerm...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: cheap replica watchesDeWitt replicaHermes watch for saleRole...
uggboots: ugg boots sale at a time when large heat has set off a winte...
louis: Classical And Simple Style Of Louis Vuitton Spring 2010 .Let...

Problem-Solving

I've been spending some time learning and reviewing algorithms recently. For example graph theory (Djikstra's algorithm, Prim's algorithm), Markov chains and Bayesian inference, the Simplex algorithm, and dynamical systems.

This has become surprisingly entertaining for me, primarily because my habitual problem-solving method is not at all similar to how these kinds of problems are solved. It's hard to explain, but it seems like by playing around with all these abstract techniques, it kind of forces me to start thinking of problems more abstractly; in terms of structure, rather than semantics.

For example, suppose I'm trying to write a Minesweeper clone.

My normal problem-solving technique would be to start with the concept of a "cell", which has "neighbors", and a "nearby-bomb-count", etc. This cell concept feels like a concrete, solid thing, almost as if it could inhabit physical space.

In contrast, after reading about lots of algorithms, I want to break the problem down by starting with the concept of a "grid", which is an abstract concept but is represented visually on the screen. The representation of each cell of the grid is some function of multiple state spaces, which are then combined in a Cartesian product. For example, whether the cell is covered or uncovered is one state space, and the grid of bomb locations is another state space. Rather than combining both of those states as member variables in the same "cell" class, I think of them as being represented in completely unrelated data structures. The visual representation of a cell, then, is a function of both data structures.

I'm not sure what exactly is the qualitative difference between these two views, except that the first view seems more intuitive, while the second view seems more decoupled and extensible.

ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
chopard replica: replica watcheschopard replicaBreguet watch for saleRolex Mi...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
fanqin: market to find a good job. And many young female think that ...
ugg boots sale: uggs on sale ugg classic tall...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
nike sports: watches replicaBreguet watchesOmega watchesreplica RadoBell ...
replica Audemars Piguet: cheap Christian LouboutinChristian Louboutin PumpChristian L...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Fast C++ Build Trick

At work we came up with an interesting trick for speeding up the compilation of C++ libraries: create a dummy cpp file which just #includes all the other cpp files, and compile that.

More...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Concord watches: cheap replica watchesConcord watchesHermes replicaPatek Phil...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
nike sports: replica watchreplica Rolex GMTreplica A.Lange & Sohneome...
replica Audemars Piguet: cheap Christian LouboutinChristian Louboutin PumpChristian L...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Image Analogies

The Image Analogies project is really cool. You train the software by providing it two images, and letting it infer the function that maps from one to the other. Then you provide a new input image, apply the inferred function, and see what comes out. Some of the results are very impressive. My favorites are the pretzel island and the Lucian Freud style.

cheapgoodssale: We are the best online sales for the china wholesale . Here...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Rolex Day : Rolex Day-Date II watch for salereplica Rolex Day DateAlain ...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: replica watchesLongines watch for salereplica BreitlingCarti...

Too Many Bugs

At work we just crossed the 2000-bug mark. One of our more witty engineers entered the actual 2000'th bug:

B2K: Too Many Bugs

We've been finding too many bugs in our product.

Suggested resolution: stop looking for bugs. Alternatively, disallow
all CVS checkins to ensure that we don't introduce any more problems.

ugg boots: Good day! Thx for your great post and Im thinking about how ...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
fitch: People all over the world know the abercrombie and fitch,but...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
omega replica: replica watchesA.Lange & Sohne watchesomega replicaPatek...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: cheap Christian Louboutincheap Christian Louboutin Pumpdisco...

CleverCS Blog

Darius Bacon pointed me at CleverCS Blog, which bills itself as "a forum for clever computer science ideas". From there I found a link to the ESP Game, which helped me fritter away an hour of my life yesterday. CleverCS Blog seems to hold some promise as a source of interesting nuggets. It's like LtU, but with less traffic and a broader scope. Or like Sweetcode but not dead, and with a more academic slant.

ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica U-boat: replica A.Lange & Sohnereplica U-boatreplica RadoRolex E...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
Tiffany Oval Tag Cuff Links: replica watchesA.Lange & Sohne watch for salereplica Bre...
lastmiss: watches replicaPiaget replicacroum watch for salereplica Pan...
nike shoes for women: discount Christian LouboutinChristian Louboutin Pumpscheap M...
ebel watch for sale: [url=http://www.iwcwatches.us/]cheap replica watches[/url][u...
replica Audemars Piguet: Christian Louboutin on saleChristian Louboutin Boot on saled...
http://www.christianlouboutinbuy.org/: discount Christian Louboutindiscount Christian Louboutin Boo...

Reading Pixels From Stdin

I made a quick little tcl/tk script to read pixels from stdin, and then display them on the screen. You run it like this:

wish streaming_pixels.tk <width> <height> <pixels-per-repaint> <magnification>

Then you send lines of the form "x y r g b" into stdin. For example, here's a perl script that generates an animation of a 20x20 grid of pixels with a red/green gradient, with the blue component increasing slowly:

for $z (0..9) {
    for $y (0..19) {
        for $x (0..19) {
            print "$x $y ".($x*13)." ".($y*13)." ".($z*26)."\n";
        }
    }
}

If you pipe this into the streaming_pixels script, with a magnification of 4, you get this:

->
perl genpixels.pl | wish streaming_pixels.tk 20 20 400 4

There are two advantage to this script as opposed to the numerous others that convert text formats into images. First, the pixels don't have to be in strict top-down left-right order -- you can send in pixels for any part of the image at any time. Second, you can overwrite pixel values that have already been input, so the script can handle animations.

I don't know enough tcl to make the script process all the pixels that are available before repainting, so instead you have to explicitly specify how many pixels it should read in between repaints. There's a 100ms wait between repaints, so don't set this number too low or you'll die of old age before it finishes the first frame. I also don't know enough to make it handle end-of-input correctly, so instead you just have to ignore the error message at the end.

ugg boots: Good day! Thx for your great post and Im thinking about how ...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
fitch: People all over the world know the abercrombie and fitch,but...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Panerai replica: watches replicaPanerai replicaxxx replicaRolex Day-Date II r...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: Christian Louboutincheap Christian Louboutin BootsChristian ...

Nasty Little Problems

Paul Graham has posted another mildly provocative, yet mildly predictable, essay. This one is titled "Great Hackers". I want to contrast two of the points he makes in this essay. Point the first:

It's hard to predict which problems hackers will like, because some become interesting only when the people working on them discover a new kind of solution... When Google was founded, the conventional wisdom among the so-called portals was that search was boring and unimportant. But the guys at Google didn't think search was boring, and that's why they do it so well.

Point the second:

It's pretty easy to say what kinds of problems are not interesting: those where instead of solving a few big, clear, problems, you have to solve a lot of nasty little ones. One of the worst kinds of projects is writing an interface to a piece of software that's full of bugs. Another is when you have to customize something for an individual client's complex and ill-defined needs. To hackers these kinds of projects are the death of a thousand cuts.

I'm somewhat surprised at the lack of self-awareness evident in this juxtaposition. First he says that you never know what's going to be interesting, because great hackers can find interesting things in unexpected places. Second he points out an area that he thinks is always uninteresting. Well gee, it seems to me that he's just put up a big ole' sign pointing at an area that needs some serious hacker attention. Someone smart just needs to think about how to make those "nasty little problems" less nasty!

In fact, those "nasty little problems" are pretty much exactly what I have found interesting over the years. For example, writing GUIs can be tedious, so I started thinking about using dataflow to make it more elegant. Similarly, designing custom data structures for highly scalable software can be nit picky and unrewarding, so I started thinking about automatic programming. And I personally find debugging to be spectacularly frustrating, so at one point I started thinking about value tracing debuggers.

This also helps explain why I love my current job (QA lead). I'm charged with making sure that the product we're building is useful, usable, and robust. This means I get to spend time thinking about verification techniques like model checking. I also get to advocate for new features that I think are important in order to make the product more useful. And I am obligated to develop a broad understanding of what problems our customers are actually trying to solve. All of these things are challenging (which makes it interesting) and important (which also makes it interesting). Plus I get to learn management skills (which makes it interesting yet again, but in a different way).

ugg classic cardy boots: Uggs on sale now.Classic cardy boots ugg is a special boot t...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...

Hey that's me

Joel Spolsky writes:

I noticed (and confirmed this with a recruiter friend) that Windows API programmers here in New York City who know C++ and COM programming earn about $130,000 a year, while typical Web programmers using managed code languages (Java, PHP, Perl, even ASP.NET) earn about $80,000 a year. That's a huge difference, and when I talked to some friends from Microsoft Consulting Services about this they admitted that Microsoft had lost a whole generation of developers. The reason it takes $130,000 to hire someone with COM experience is because nobody bothered learning COM programming in the last eight years or so, so you have to find somebody really senior, usually they're already in management, and convince them to take a job as a grunt programmer, dealing with (God help me) marshalling and monikers and apartment threading and aggregates and tearoffs and a million other things that, basically, only Don Box ever understood, and even Don Box can't bear to look at them any more.

Huh, that's weird. He just described me. I know everything about COM and monikers and marshalling and apartment threading and the rest of it. I read the 800-page "Inside COM" book about eight years ago, and I still remember it. And as he says, I am senior, and I am in management now. I guess it's time to recalibrate my self-image. At this rate, someday I'll be one of those semi-retired COBOL programmers who gets pulled back in to fix the Y2K bug.

And I'm only 27.

Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
fitch: People all over the world know the abercrombie and fitch,but...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rado watches: replica watchRado watchesBvlgari watchesBreitling replicaGla...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: replica watchesLongines watch for salereplica BreitlingCarti...

Roll Your Own Search Engine

This month's edition of ACM Queue is all about search. I found it pretty interesting to read, after my experience at Endeca. For example, the first article was a conversation with Matt Wells, who is apparently writing his own search engine, and making enough money at it to live on. My first thought was, why didn't I think of writing my own search engine? :) It was interesting to read his catalogue of search techniques -- for example, how you should distribute documents across multiple machines for scalability. All the concepts were very familiar.

The "Why writing your own search engine is hard" article was fun. While I read it I kept thinking "yep, yep, yep". However, since I've already had exposure to all of these issues, it didn't seem to me like it all added up to "search is hard" -- but I suppose if you've never worked on a search engine before, there's lots of things that you're likely to overlook.

In my opinion, search engines actually have it easy in many ways. Sure, they're distributed, and that makes things complicated, but at least they're working with a read-only set of data. If one of your nodes goes down, you can just failover to a backup node. Databases, on the other hand, are really hard. There you're working with distributed, mutable data. And that complicates everything in a completely orthogonal way, which makes everything you do just that much harder. For example, it means that you can't use the same design to provide redundancy as you do to provide scalability.

There was an article on why intranet search is hard: because intranets aren't as hyperlinked as the internet is, and because users in an intranet are looking for authoritative answers, not just popular pages. I haven't seen any really good techniques for dealing with this problem, except for ones that add structured information to the underlying data. However it's very hard to add structured information in a wholesale way -- you either do it automatically in which case it's poor quality, or you do it manually in which case it's expensive and incomplete. I think incorporating user feedback might be the only way to really do this effectively, but it's difficult to come up with a feedback model that's both useful and robust.

The "Searching vs Finding" article started out very familiar but quickly moved into things I had never even thought of, for example requiring that the words in the document be in the same relationship as the words in the document. The example was a query of "black and white dog" which, if you don't pay attention to word relationships, returns articles about dogs being used to stifle racial protests. Whereas if you pay attention to word relationships, you get articles about dogs seeing in black and white, which is at least closer. Presumably an ideal search engine would return matches for dalmation instead...

Another interesting thing throughout the issue was the number of advertisements that I saw from companies that I was very familiar with (ex-competitors). For example, the enterprise search article used a screenshot from a Verity product. And the back cover is an ad for Convera. I didn't notice any Endeca ads though...

Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Rolex Datejust: replica Franck Mullerreplica Rolex DatejustRado replicaFerra...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: replica watchesLongines watch for salereplica BreitlingCarti...

Self-Adjusting Computation

I'm going to see this talk in three weeks, over at MIT. I'm looking forward to it, because it seems to fit into the functional reactive programming and dataflow themes which I've been so interested in recently.

nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
fitch: People all over the world know the abercrombie and fitch,but...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phones Ch...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica Graham: replica watchesreplica GrahamRolex Day Date watchesBell &...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: Christian LouboutinChristian Louboutin Shoes on salecheap Ch...

ccache

I just found out about the ccache tool. It's a tool that sits in front of gcc and caches the results of each compile, so that subsequent builds go a lot faster. I've been rebuilding my sources over and over today, trying to get code coverage to work, and it has come in handy. Unfortunately, it doesn't yet support gcc's code coverage features, because it doesn't realize that it needs to cache the *.bb and *.bbg files that gcc generates -- instead, it only caches the object file. It's still useful, though.

Luke: I've had endless problems with ccache, though it might just ...
: A couple other interesting bits: gcc has support for precomp...
wholesaler business website, net shopping site, external wholesaler,dvd wholesaler,wholesaler definition,china wholesaler,mutual fund wholesaler,define wholesaler,insurance wholesaler: discount ugg boots forture ugg boots Discount store...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
fitch: People all over the world know the abercrombie and fitch,but...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...

Unix Quiz

If you ever want to see how well someone knows unix (e.g. in an interview), you could ask them this question:

You have a directory containing a lot of files and subdirectories, and you want to copy all of them except for the directory called big_dir. How do you do it?

Here's my solution (select the text to make it visible):

cp -r `ls | grep -v big_dir` dest_dir

Here's another one:

Remove read and execute priviledges from the files you don't want to copy, then proceed as normal

ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
movado watches: watches replicamovado watchesBreitling replicaFranck Muller ...
fanqin: It is no doubt that Replica Louis Vuitton Speedy 30 enjoys h...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
nike sports: replica watchreplica MontblancRolex Submariner replicaFranck...
replica Audemars Piguet: discount Christian Louboutincheap Christian Louboutin BootJi...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
nike shoes,ugg boot,timberland boot: shoesbing bing shoes puma shoes nike shoes adidas shoes ...

Options vs. Salary

The question arose: how do you evaluate how much options are worth when considering a job offer at a startup? My answer: at the time of the offer, they're probably worth very little, but over time they may become worth enough to make leaving the company painful.

More...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
fasfr: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Piaget watches: cheap replica watchesreplica ebelreplica A.Lange & Sohne...
fanqin: Recently Louis Vuitton Multiple Wallet Replica the secret ve...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: Christian Louboutin on saleYves Saint Laurent Shoes on saleY...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

"The Deadline"

During my christmas vacation, I read "The Deadline", by Tom DeMarco. The book greatly exceeded my expectations. It's truly enjoyable to read, and there were at least a dozen times when I had to to put the book down and take a walk, to think about what was said.

More...
ugg classic cardy boots: Uggs on sale now.Classic cardy boots ugg is a special boot t...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...

Unix-ism of the day

The "rename" command lets you rename lots of files according to a pattern. I wish I'd known about this command earlier.

More...
Michael Tucker: Bah... Perl "utilities" don't count as "commands". I say rol...
Luke Palmer: Heh, that would have been nice. I, too, wrote my own regex ...
Andrew Birkett: Wow, I've been unixing for 9 years and have always done that...
kim: Thanks, I didn't know about ${name/from/to} before either....
Alex: A year or so ago I had a similar rename situation. I even im...

Technology Losers

Tim Bray has an amusing look at seven technologies that seemed spectacular in their day, but turned out to be duds. Here's my thoughts on his list:

More...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
fitch: People all over the world know the abercrombie and fitch,but...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rolex Milgauss replica: watches replicaRolex Milgauss watch for salereplica Rolex GM...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: Christian Louboutincheap Christian Louboutin BootsChristian ...

Debugging with Code Coverage

Lately I've been spending a lot of time debugging regression tests. (That is, I started with a codebase and some tests that passed, but after I changed the codebase, the tests don't pass anymore). Figuring out why the tests are failing can be pretty tedious, especially if I didn't write the test in the first place and therefore have no idea what it's actually trying to test.

So here's an item I'm putting on my Christmas wish list: a regression test framework that takes advantage of code coverage metrics to help you localize the error. The idea is that you would run the unit test on the working codebase to get a baseline code coverage pattern. Then you'd run it again on the broken codebase, and do a diff on the code coverage pattern. I bet that in a large percentage of failures, this would quickly highlight what area the problem is in.

I'm only thinking of using a single bit per line of code, indicating whether that line was executed or not. A more elaborate system might do something with execution counts (how often the line was executed), and/or execution order. But I think that a simple bit-per-line approach would get you 90% of the utility, while remaining very simple and understandable.

The target system for something like this would be a large codebase (100KLOC or more), where several people are making changes. So you can't fit the entire system in your head, and the bug that you triggered might well be manifesting in code that you've never seen before.

I've been mulling over this idea for a couple weeks now, and I wanted to share it and see what people think. Comments? Has it been done already?

Christian Louboutin Boot on sale: cheap Christian Louboutin cheap Jimmy Choo cheap Yves Sain...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Rolex Day Date watch for sale: replica watchesRolex Day Date watch for salereplica movadoCa...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: discount Christian Louboutincheap Christian Louboutin Shoesd...

Teleworking

Andrew Birkett has posted about his experience with working remotely. The remote job he took was at a company that focused on developer tools. I think I'd really enjoy working at a similar job, so I'm vicariously glad he gave it a shot. He lists some of the difficulties he encountered:

More...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Cartier watches: watches replicaCartier watchesLongines watch for salechopard...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: Christian Louboutincheap Christian Louboutin BootsChristian ...

Moving Up the Food Chain

I just finished reading this article about the jobless recovery. It's full of depressing quotes like these:

More...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rolex Datejust II watches: cheap replica watchesRolex Datejust II watchesreplica Rolex ...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: replica watchesLongines watch for salereplica BreitlingCarti...

Sweetcode Bulk Update

Sweetcode just did a bulk update, after a few months of inactivity. The project that looks most interesting to me is Myer, which tries to deduce coupling and cohesion metrics for code by "running the preprocessor in reverse". Unfortunately it's hosted on Savannah and is therefore unaccessible at the moment due to a recent security breach. I wish the folks at Savannah would just print a warning and then give you access to the content, rather than refusing to let you have access to anything at all.

Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Rolex Explorer: watches replicareplica Rolex ExplorerRolex GMT watch for sal...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: Christian Louboutincheap Christian Louboutin PumpsChristian ...

Static vs Dynamic

I was thinking about Mandelbrot sets again today, as a metaphor for the difference between the static and dynamic aspects of programming. The static equation of the Mandelbrot set (Z <- Z2 + C) is relatively simple, while the dynamic behavior (a fractal) is relatively complicated.

More...
dasf: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Panerai watch for sale: replica watchPanerai watch for salereplica IWCreplica Rolex ...
Panerai watch for sale: replica watchPanerai watch for salereplica IWCreplica Rolex ...
fanqin: Louis Vuitton Tivoli PM Louis Vuitton Replica Tivoli P...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
nike sports: replica watchesRolex watch for saleVacheron Constantin repli...
replica Audemars Piguet: Christian Louboutin on salediscount Christian Louboutin Pump...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Job Market Picking Up?

In the last week or so, I've been contacted by three recruiters, one of which was a regular head hunter, while the other two were in the HR department for large Seattle-based software companies.

This is a very noticeable change for me, not just because they all called within a week of each other, but also because in the two years previous to this, I received no calls at all. That two-year dry spell was itself a noticeable change from the boom times, when I regularly received one or two calls a month.

I don't know whether this means that the job market is getting ready to pick up, or whether it just means that google happened to notice my resume. As a member of the proletariat, I hope it's a general trend, which is why I'm sharing it with all of you. Have you seen any change in the job market recently? I know my company is hiring as fast as we can, but that's just one datapoint.

Wisp: I know one of my friends with reasonable experience is still...
drlloyd11: I've had a noticeable upturn in unsolictited calls from head...
fitch: People all over the world know the abercrombie and fitch,but...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...

Programmers as Athletes

Geoffrey Knauth made an interesting post on the ll1 mailing list. The topic was whether programmers (and programming language designers) should try to learn about advanced type theory, or whether type theorists should try to make their work more accessible to programmers.

More...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
fanqin: Eugenie Wallet Louis Vuitton Eugenie Wallet Loui...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rolex Daytona watches: replica watchesRolex Daytona watchesGlashutte watch for sale...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: Christian LouboutinChristian Louboutin Shoes on salecheap Ch...

Unconscious Design

I've been programming professionally for about nine years now, and a few years ago I got to the point where designing software is largely nonverbal. That is, I reached the fourth level of competence.

Recently I tried to explain to someone without much experience how I choose between design tradeoffs, and I found myself becoming very vague and metaphorical. For example, to me problems feel like they have a three-dimensional shape, and I try to come up with solutions that match that shape, or that change it into a simpler shape, or that serve as a bridge between two shapes. Good solutions feel "smooth" to me, and when I spend time perfecting a design, I literally feel like I'm sanding down sharp edges.

Unfortunately, that metaphor tells you virtually nothing about how I actually create software designs. If I try to explain to someone with less experience how to recognize when software is "smooth", they'll just stare at me like I'm speaking Japanese. Which is pretty much exactly what I'm doing, in terms of information transfer.

More...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Glashutte watches: replica watchGlashutte watchesreplica Rolex Sea-Dwellerrepli...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: Christian LouboutinChristian Louboutin Shoes on salecheap Ch...

Code Inertia

As a body of code gets larger and larger, it requires more and more effort to make any changes to it. I do my best to fight this inevitable bloat, but my current place of work doesn't seem to care much about this. We have people routinely pump out 10,000-15,000 lines of code in only two or three months, to solve a problem that probably only needs a third as much code. I've actually heard people say, "Yeah I didn't put too much thought into how to make the code more compact, because I knew I was going to have to type a lot of code, so I decided to just get started."

When I try to explain that this is a bad thing, I can't seem to get any traction in my arguments. I'm greeted with blank stares or, worse, implications that if I can't handle reading through 10,000 lines of code, I must be lazy or stupid. "Ten thousand lines of code really isn't a lot of code!" I beg to differ; I have better things to be doing than reading thirty lines of code that has been cut-and-pasted a hundred times, each with slight modifications.

I suppose I'm just a code poet, working with a bunch of essayists and novelists. As with all poets, I'm tragic and misunderstood. Color me angsty.

magicstix: Guam Page. About Guam. Hafa Adai from Guam. Kalakas 671...
magicstix: Guam Page. About Guam. Hafa Adai from Guam. Kalakas 671...
replica Audemars Piguet: replica watchesVacheron Constantin replicaYachtmaster watch ...
Mengembalikan Jati Diri Bangsa: Your article very interesting, I have introduced a lot of fr...
adapter: Laptop Parts Laptop AC Adapters Acer AC Adapters Apple AC A...
adapter: Laptop Parts Laptop AC Adapters Acer AC Adapters Apple AC A...
lan: [url=http://www.tvshowsstore.com]dvd sale[/url] [url=http:/...
anyyi: dvd sale dvd for sale dvd boxset tvshow tvshow...
uggboots: ugg boots sale at a time when large heat has set off a winte...
Patricia: Jimmy choo bags Tube-1 Jimmy choo bags Tube-10 Jimmy c...

Too Much Sex

My group got a bug report today from one of our customers. If you did a search on their site for "sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex", then it would take down the site. You had to have at least 16 occurences of the word "sex" in order to trigger the problem.

More...
cheap goods sale.: We are the best online sales for the china wholesale . Here...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica movado: Rolex Day-Date II watch for salereplica movadoIWC watch for ...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: Christian Louboutincheap Christian Louboutin PumpsChristian ...

Endeca Still Hiring

I just got a list of several positions we have open.

  • Release Engineer/Toolsmith
  • Software Quality Assurance Engineer
  • Sr. Technical Support Engineer
  • Sr. Technical Writer
  • Software Engineer
  • Technical Product Manager
  • Industry Marketing Manager
  • Federal Pre-Sales Application Engineer
  • Pre-Sales Application Engineer - Europe
  • Sales Representative - Washington
  • Federal - Sales Representative - Washington
  • Sales Representative - St Louis/Cleveland/Indianapolis
  • Sales Manager - California
  • Inside Sales Representative - Cambridge, Boston
  • Telesales Representative - Central London, UK

Read on for a longer description of each opening.

More...
Christiaon Louboutian boots: Thank you for the great job,it help me so much!With christma...
ugg boots: Thank you for the message supplyer!There are amazing ugg ult...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
nike sports: Rolex Day-Date II watch for salereplica Paneraireplica Vache...
replica Audemars Piguet: watches replicareplica RolexRolex Datejust watch for saleBre...
nishelly: [url=http://www.realugg.com/ugg-bailey-button-c-52.html]UGG ...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...
paul smith on sale: now, Paul Smith shoes, paul smith clothing, and paul smith ...
cheap paul smith: we know Paul Smith has an ability to anticipate and even s...

tcpreen

If you have to debug a network communication problem, tcpreen is a great tool. It lets you see exactly what information is getting sent between the client and the server. It's a lot quicker to whip out a tool like this than to start inserting print statements.

cheap goods sale.: We are the best online sales for the china wholesale . Here...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Longines watch for sale: watches replicaRolex Sea Dweller watchesLongines watch for s...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...

Reversible Computing

There's an interesting article about reversible computing over on kuro5hin. It surveys time-warp debuggers, zero-energy computers, quantum computing, dynamical systems optimization, and haskell.

cheap Christian Louboutin: discount Christian Louboutin discount Jimmy Choo discount ...
ugg boots: Good day! Thx for your great post and Im thinking about how ...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Piaget replica: watches replicaPiaget replicareplica BreitlingGraham replica...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: Christian LouboutinChristian Louboutin Shoes on salecheap Ch...

Windows NT Uses Prolog

Apparently Windows NT has an embedded Prolog interpreter, for network configuration. (Via LtU).

Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Rolex Datejust II watches: cheap replica watchesRolex Datejust II watchesU-boat replica...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: watches replicaIWC watchesebel watchesreplica RadoPanerai wa...

Quantity Has To Matter

When coding at work, I periodically remind myself to take some pride on the sheer quantity of code that I manipulate. If I don't, I become depressed. If I stop to realize that I just modified 40 lines of code simply to add a member variable to a COM wrapper around a C++ object, I'm likely to die a little inside, and then go "waste time" by reading about monads or category theory or abstract interpretation.

Kaushik: Yes, I know what you mean. I too feel depressed when I am no...
kim: Yep :(...
Kris Bosland: I think people give a tepid response because the mountain o...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
fitch: People all over the world know the abercrombie and fitch,but...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...

The PLT Web Server isn't a Library

I decided to hack a bit on the Wiki Diamond project tonight. First decision: choose a language. Because of my recent ramblings about flexible syntax and semantics, and because I already have it installed on my home machine, I chose PLT Scheme.

I decided to start by creating a simple hello-world web page, using the PLT web-server framework. If only it were that easy... More...

ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica Rolex Masterpiece: watches replicaIWC watch for salereplica Rolex MasterpieceVa...
fanqin: Recently Louis Vuitton Multiple Wallet Replica the secret ve...
fanqin: What kind of girls do you like? And what kind of girls do yo...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
nike sports: replica watchesreplica Rolex SubmarinerAudemars Piguet repli...
replica Audemars Piguet: cheap Christian LouboutinChristian Louboutin PumpChristian L...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Multi Lingual Development

For the last couple days at work, I was updating our APIs to reflect a relatively small change I made. The change was small, however updating our APIs is very time consuming, because we support five different languages: Perl, C++, Java, COM, and .NET. Making a change to the API means making a nearly identical change in five different languages, using four different compilers, four different development environments, five different test drivers, and two different platforms (unix and windows).

This drove me crazy. If I ever have to do more work on our APIs, I will try to convince someone to reorganize them. Currently, each API has its own directory, so you have nearly identical code scattered in several different directories. If I had my druthers, I'd colocate corresponding methods, so that I could change them consistently, without losing my train of thought. I'm imagining a very simple preprocessor that takes a single file containing six different languages, and generates six different output files, with one language in each. Even the C preprocessor would probably work -- just use a #define for each language, and run it six times. With a judicous use of macros, you might even be able to get away with only one or two versions for some of the simpler methods (e.g. getters and setters). A more sophisticated preprocessor (like, say, scheme) would probably be even better.

I doubt we'll ever do this at work though. Which is why I had to make a post about it, to get my frustration out.

Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
fitch: People all over the world know the abercrombie and fitch,but...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica watch: replica watchHublot watch for saleConcord watchesreplica Hub...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: watches replicaIWC watchesebel watchesreplica RadoPanerai wa...

Reducing Bug Counts

Jason Marshall has a good point:

Let us conjecture that 2 bugs take as many man-hours to fix as implementing the feature did. That's only 2 units of effort expended toward new development for every 5 available. If you could eliminate one bug per feature, that would mean 2 units out of every 4 go to new features. That's a 25% gain in productivity, and that's not counting the psychological benefits of spending less time cleaning up old code, and the political capital of appearing more professional to the rest of the organization.

Unfortunately, I find that my bugs usually only take about a tenth as much time to fix as implementing the actual features. This could mean several things. Maybe I have already achieved low bug counts. Or maybe I just spend way too long implementing features.

It's still a good point, though.

ugg classic cardy boots: Uggs on sale now.Classic cardy boots ugg is a special boot t...
cheap goods sale.: We are the best online sales for the china wholesale . Here...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...

Coding

My mom is a doctor. I was talking to her the other day, and I casually mentioned that I had done some coding on the weekend. She looked at me in horror, and it took her a few seconds to understand what I meant.

To her, "coding" means having a heart attack.

Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Vacheron Constantin watch for sale: cheap replica watchesVacheron Constantin watch for saleU-boa...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: cheap replica watchesDeWitt replicaHermes watch for saleRole...

Adaptive Navigation

Nova Spivack has a worthy goal:

... a self-organizing blog/wiki. You just type stuff and it congeals around the main topics. Call it "Adaptive Navigation" -- The navigational structure changes to reflect what you are interested in and how those interests change over time.

This is the same problem that I faced when thinking about my history project idea, although I was willing to expend some organizational effort in order to create potential navigational structures. My ramblings about refinements are just one possible technique for heading in this direction.

Nova's article is short on constructive proposals, but as a long-term goal it's right on target.

I'm in work-crunch mode for the next couple weeks, but maybe after that I'll have some time to play with these ideas.

UGG Knightsbridge boots: Welcome to purchase online or contact us and we will be happ...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...

CSS Zen Garden

The CSS Zen Garden is really excellent. I feel a sense of peace coming over me -- good design refreshes like nothing else.

If you haven't seen it, go now. Click. Enjoy. Breathe.

Jane Jolin: I'm very excited about the project as I just finished a desi...
boyy: Dancing Girl Dresses: This dancing girl has lots of dresses ...
boyy: Dancing Girl Dresses: This dancing girl has lots of dresses ...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...

Motivation

Today's lesson: if you never make an effort to do anything, you'll get bored out of your mind. A life of leisure is neither fun nor rewarding.

If you're bored and unmotivated at work, and you've been spending your time surfing the web looking desperately for something more interesting, you may be stuck in a vicious circle. If you're bored with work and try to avoid doing it, you will become even more bored. That sense of boredom will permeate the work you're not doing, making you feel like the work itself is boring, which makes you try even harder to avoid doing it. (There's a chicken and egg problem here -- does the boredom come first, or the avoidance?)

If you find yourself needing, desperately, to work on something more interesting, then you may be stuck in this trap. If you begin to feel like your skills are atrophying due to lack of challenge, then you may be stuck in this trap. If you resent every little difficulty you encounter while working, because it means you actually have to pay attention to what you're doing, then you are probably stuck in this trap.

The only way to get out of this is to realize two things: 1) that moods are largely self-reinforcing, and 2) that if you don't actually put effort into doing something -- anything -- then you will be bored. Follow the chain of cause and effect backwards, and realize that it's your own damn fault you're going crazy.

Paying attention to something boring is like doing exercise -- at first, you hate it and you'd really rather go back to sleep. But eventually the endorphin high will hit you, and maybe it'll get you high enough to get out of your funk. After all, there's a reason you decided to become a programmer in the first place, right? You like programming. The endorphins are there waiting for you -- all you have to do is put in enough energy to shake them loose.

They feel so good...

weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
fd: UGG Fake Women's Highkoo Fake UGG Women's Liberty Fake UGG...
Hermes Handbags: tag heuer carrera calibre 1 knockoff monaco 24 concept chro...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: watches replicareplica Louis VuittonRolex Milgauss replicaRo...
replica Audemars Piguet: watches replicareplica Louis VuittonRolex Milgauss replicaRo...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...
123: Cheap Chanel Quilted UGG Fake Ultra Tall 5245 UGG Cheap Wo...
Guam: Guam | Guam Page | Guam History | Guam Map | Guam Music | Gu...

What are Refinements?

I've gotten a couple people asking me what exactly I mean by "refinements". So let me try to explain them more clearly. They're difficult to describe without an example, so let's use Tower Records Classical Music as an example. That link will open in a new window, so you can follow along.

More...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Glashutte watch for sale: replica watchGlashutte watch for saleYachtmaster watchesBrei...
fanqin: When a girl has Eugenie Wallet experience the poor day, she ...
Hermes Handbags: tod d bag replica lv 2009 collection bottega veneta replic...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
nike sports: replica watchesWatch Accessoriesreplica OmegaPatek Philippe ...
replica Audemars Piguet: watches replicaLongines watchesPatek Philippe replicareplica...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Sexism Among Programmers II

Via chromatic's diary, I stumbled across this slashdot post, illustrating an even worse example of the kind of sexism I've talked about before.

Thanks chromatic, for not remaining silent.

Bill Glover: I'm a man, a programmer, the father of a 12 year-old girl an...
nike-airyeezy: discount nike air yeezy china wholesale online di...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
fitch: People all over the world know the abercrombie and fitch,but...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...

Sacrificing Quality

There's a discussion on Robert Martin's blog about whether a programmer should insist on a certain level of quality in their work. Some of the responses claim that if the client wants quality to be sacrificed, then the programmer is being unprofessional by insisting on a higher (and more costly) level of quality.

I can see their point, but I'm shocked to see that some of these posters seem to think that quality is synonymous with robustness, and that "sacrificing quality" therefore means they can skip testing. And then they're surprised to find out that the client expects the program to be bug-free! After all, didn't the client say that they could skip testing?

I'll use an architectural metaphor to illustrate what I mean:

Suppose an architect is hired to build a home, and the client says to sacrifice quality in order to keep the cost down. This does not mean that the architect can skip all the calculations involved in making sure that the building will actually stand up. All it means is that they should use cheaper materials for the unimportant parts of the building -- the eye candy, if you will.

Perhaps the interior doors are hollow instead of solid wood -- that doesn't mean that the doors don't have to open. Perhaps there's only one electrical outlet per room instead of three -- that doesn't mean that the wiring to that one outlet can be faulty.

Low-quality does not mean broken or dangerous. However it may mean ugly or tedious. So go right ahead and require that the user edit XML by hand instead of having a configuration dialog box. Feel free to leave out the splash screen with the pretty picture. But don't think that the quality of the code itself can be sacrificed without creating an extremely unhappy client, and possibly (justifiably) a lawsuit.

jerseysleague: chaoying nfl jerseys Troy Polamalu Jersey Hines Ward Jerse...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Rolex Submariner watche: replica watchRolex GMT watchesRolex Submariner watchesWatch ...
fanqin: Louis Vuitton Tivoli PM Louis Vuitton Replica Tivoli P...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
nike sports: cheap replica watchesA.Lange & Sohne watchesBreitling wa...
replica Audemars Piguet: replica watchreplica MontblancRolex watchesLouis Vuitton wat...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Andrew Birkett

If you like reading this blog (especially the programming language bits) then you'll probably like Andrew Birkett's blog as well. I also find it amusing that our last names are so similar (Birkett versus Burchett).

nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
replica IWC: replica watchesreplica IWCBreitling watcheschopard watchesxx...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: Christian LouboutinChristian Louboutin Shoes on salecheap Ch...

Simplifying debugging

One thing that makes debugging really difficult in imperative languages like C++, Java, C#, etc, is the use of state. If I'm in the debugger and I notice that a variable has the wrong value, it can sometimes be very difficult to figure out where that value came from. For local variables, this isn't usually much of a problem -- I can just page up and see where the variable got assigned. But for global variables, or even for class member variables, it can be a real pain.

It occurs to me that it would be useful if my debugger could let me time-warp back to the place and time where any given variable was assigned. To do this, it would have to store a stack trace with each and every non-local variable. For languages that already store activation records on the heap (e.g. to support closures and continuations), this should be almost trivial. It would increase memory usage quite a bit, but when I'm debugging the cost would be well worth it.

It would be an interesting project to try to hack something like this into Python or Ruby (I hear Perl internals are a mess, so I wouldn't even consider trying it with Perl).

Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
China Wholesale: We are the best online sales for the china wholesale . Here...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
puma running shoes: Now more and more young people love to wear puma running sho...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
watches replica: watches replicaBreguet watch for saleRolex Submariner watch ...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: replica watchesLongines watch for salereplica BreitlingCarti...

The Developer and the Sophist

Here's an amusing koan (by Frank Atanassow) that I would like to share with you:

The sophist says, `Users demand correct software.'

The developer rightly replies, `Correctness is an illusion. The program exists or it does not exist; it behaves as it behaves. Motibo ergo sum.'

The sophist counters, `What users want is an illusion?'

`No. We exist only to serve. Such is our purpose. But our masters are fickle,' says the developer. `They do not know their minds, which are clouded by their own desires.'

`How can you serve your master when you do not acknowledge his desires?'

`We are clever and nimble. Though a chasm lies between us, our master may say, ``Come hither,'' and we run elsewhere very quickly, knowing his true mind.'

`Why do you not build a bridge?'

`We have no such art; do you think us engineers?'

`Then why do you not tell him you cannot please him?'

`Simpleton! Who bites the hand that feeds? He is anywise oft amused by our agile antics. We do not go where he asks, but where we go, we go quickly.'

Here endeth the lesson.

The original discussion was about whether or not Microsoft could ever be expected to solve all buffer-overflow security bugs.

Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
lovebo: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
fanqin: Speedy 30 Louis Vuitton Speedy 30 Replica...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Breitling watch for sale: watches replicaBreitling watch for saleIWC replicaRolex Day ...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: replica watchesLongines watch for salereplica BreitlingCarti...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Sexism Among Programmers

There are several reasons why the software engineering profession is dominated by men. In my opinion, the main reason is because people expect it to be that way, and so they act in ways that reinforce it. On sites like Slashdot and Kuro5hin, it is common for people to make stupid jokes like this one, about how there are no women in the programming community. Eventually, the sheer volume of such jokes piles up, and women start to feel unwelcome.

These jokes are almost always just bad taste, and are not intended to make anyone feel unwelcome. However at some point, someone has to point out that enough is enough. Unfortunately, by pointing this out, you open yourself to attack. Quite commonly, people will rightly point out that your comment is off-topic (but where else are you supposed to mention it?). You sometimes will be called a troll, even though all you are doing is reminding people that you belong to the same community. And occasionally, you will be viciously insulted.

I usually don't mind the initial jokes, even though most people seem to think that because I bothered to mention it, I'm being "thin-skinned". However, the defensiveness that my comments stir up makes me think two things: this problem is much more ingrained than most programmers are willing to accept, and hardly anybody cares enough to try to change it.

: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
China Wholesale: We are the best online sales for the china wholesale . Here...
jerseysleague: chaoying nfl jerseys Giants Jerseys Patriots Jerseys Pack...
lovexx: China Electronics Wholesale China Phone Cheap Cell Phone...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
Tag Heuer watch for sale: watches replicaTag Heuer watch for saleDeWitt watch for sale...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: cheap replica watchesDeWitt replicaHermes watch for saleRole...

How To Teach How To Program

Slashdot has an article on how to teach kids to program. There's an interesting post in that discussion by John Harrison, who helped a 12-year-old kid write a video game in Java. The game itself is actually pretty fun (it follows in the grand tradition of galaga-style games), and relatively well done.

I started a similar project once when I was helping teach someone Java (in exchange, she was helping me learn chinese). We were going to do a pacman game, but we never finished. I think games are a great teaching tool, because they involve algorithms, data structures, and I/O. Plus they're fun, and therefore hopefully an end in themselves. What more do you really need?

I first learned to program because I was inspired by a guy in my high school who wrote games in Pascal. They were orange and black, because those were the only colors our monitors supported. The computer lab had about 20 computers, and at any given time, most of the people in the lab were playing one of this guy's games. I don't remember his name anymore though -- it would be interesting to see what he's doing now.

Gaming inspired me to learn about VGA registers (anyone remember "Mode X"?), interrupt handlers, palette rotation, trigonometry, vector algebra, assembler, C++, etc. I still have "Computer Graphics: Principles and Practice", and "Advanced Animation and Rendering Techniques" on my bookshelf.

ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Rado watch for sale: cheap replica watchesRado watch for salereplica GlashutteGla...
adgfh: UGG Fake Women's Highkoo Fake UGG Women's Liberty Fake UGG...
fanqin: Gucci is famous as top quality, Louis Vuitton Tivoli PM luxu...
Rcat: Respectable Reviews Fat Loss 4 Idiots Review The Tweet Tan...
Hermes Handbags: replica louis vuitton wallet bottega veneta replica swiss ...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: cheap Christian LouboutinChristian Louboutin sandal on saleY...
nishelly: [url=http://www.realugg.com/ugg-bailey-button-c-52.html]UGG ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Programmer Productivity

Robert Martin has a post about how 10% of programmers write 90% of the code. I think this is more-or-less accurate, but he seems to think that whether a programmer is a member of the elite or not is an innate quality -- that there are good programmers and poor programmers, and nobody ever moves between the two groups.

I have worked on projects where I've been in the elite, and I've worked on projects where I've been in the middle, and on occasion I even qualify as a Waste Of Space for a month or two. There are several factors that influence how productive I am, personally.

More...
weddingdressclub: Spring is near,every girl wants to be the bride in the speci...
adgfh: UGG Fake Women's Highkoo Fake UGG Women's Liberty Fake UGG...
ugg boots sale: uggs on sale ugg classic tall...
Hermes Handbags: swiss replica ulysse nardin watches pre daytona replica rol...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
nike sports: replica watchesJaquet droz replicaRolex Air-King watch for s...
replica Audemars Piguet: replica watchesOmega watch for salereplica Rolex DateJustTud...
uggs on sale: The ugg Bailey Button boots is made with 100% premium twin-f...
Dert: download nine download did you hear about the morgans down...
buy cheap puma shoes on puma store: Merry Christmas ! Go to puma store buy a pair of puma sneake...

Naked Objects

Naked Objects is a Java framework for automatically generating a user interface from a set of classes. I really like this idea.

The first four years of my career were spent developing custom applications that generally followed the pattern of "software that controls some custom hardware, has a GUI, and is persistent to a relational database". The GUI nearly always was a very simple reflection of the underlying object structure. In that context, something like this would be very useful. First it would allow delivery of a prototype very quickly, since the GUI code would be largely implicit. Second it would allow the customer to play around and see the software's potential for themselves. Third, in a released product, it could serve as a GUI-style scripting language that users could use if the "standard" GUI wasn't sufficient for some unanticipated task.

Except for the fact that I no longer use Java and no longer write GUIs, I would definitely start learning and using this framework. It seems to hold a lot of potential for simplifying development.

rolex replica : replica omega replica oris replica Panerai replica Patek ...
cheap goods sale.: We are the best online sales for the china wholesale . Here...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Cartier replica: replica watchesRolex GMT watch for saleCartier replicaBregue...
replica Audemars Piguet: replica watchesLongines watch for salereplica BreitlingCarti...

Register-Based vs. Stack-Based

Dan Sugalski has an interesting discussion of the tradeoffs involved in register-based versus stack-based virtual machines, and how the different architectures affect interpreters versus JITs.

faf: Paul Smith has been collaborating with a few different organ...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
http://www.iwcwatches.us/Patek-Philippe/: replica Franck MullerTag Heuer watch for salePatek Philippe ...
fanqin: Recently Louis Vuitton Multiple Wallet Replica the secret ve...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: watches replicareplica Louis VuittonRolex Milgauss replicaRo...
replica Audemars Piguet: watches replicareplica Louis VuittonRolex Milgauss replicaRo...
ugg wholesale: UGG Bailey Button UGG Classic Argyle Knit UGG Mayfaire ...
uggboots: ugg boots sale at a time when large heat has set off a winte...

Perl is Maintainable

Ugh, I have seen too many people claim that you can't build large programs in perl. Here's the most recent one.

This claim is just plain wrong. I currently maintain a perl application that I wrote at work, which clocks in at 15,000 lines of code. It shows no sign of being creaky, and it is maintainable enough that I sometimes get patches sent in from customers (not just other programmers at work).

The problem is not perl, people. The problem is that people have such low expectations of the mainainability of perl that they write shit perl code, and don't bother trying to make it maintainable.

Yes, the syntax is a bit line-noisy, but that has nothing to do with whether the larger structure of your program is scalable or not.

How do you write good perl code? First, use strict and use warnings. Second, use classes to structure your program, even though Perl is a bit weird about how you declare classes. Third, write unit tests, and make sure they call every function at least once, even if they don't check whether the function returned the correct result.

Here's my idiom for unit tests in Perl. I include something like this at the end of each module, and then run it with "perl -wc":

sub unit_test {
    ... insert your code here ...
}
BEGIN { unit_test() unless caller(2); }
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
vitjot2: Feel free to search something related to this post with new ...
vitjot2: Feel free to search something related to this post with new ...
ebay coupons: I really like these post. Appreciate it. Thank you for shar...
Fire Safety Education: Great post. Thank you for the information. ...
4inkjets coupons: thanks for the info.....
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Breguet replica: replica watchBreguet replicaGraham replicareplica Burberrymo...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
replica Audemars Piguet: cheap replica watchesDeWitt replicaHermes watch for saleRole...

Hackers and Painters

Paul Graham's most recent article, Hackers and Painters, makes a very important point that should be explained to all CS majors before they decide to major in CS:

More...
Wisp: It's funny... I pulled out the last quote without reading yo...
1: Louis Vuitton , commonly referred to as LV Comes First In 20...
nike-airyeezy: discount nike air yeezy china wholesale online di...
Supra Shoes: Supra Shoes Supra Skytop Shoes Supra Society Supra Thunde...
fitch: People all over the world know the abercrombie and fitch,but...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
China Wholesale: We are the best online sales for the china wholesale . Here...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...

Things get cheaper

There's a good article over on Fortune, titled Where the Action Is. The article elaborates on the most important fact in the tech industry: things get cheaper. Not only does hardware get cheaper, but software too. If your company sells software then your company must have a plan for either lowering the cost of that software over time, or adding more and more features for free.

The corollary to this is that a software company can't depend on having only a small part of a large market, because the market itself will shrink over time. Things get cheaper, and that means that the industry itself will have lower total revenue over time. Growth industries are different, obviously -- there you can compensate for the shrinking amount of revenue per customer by expanding the number of customers (assuming, of course, that you planned on revenue per customer diminishing over time). But in a stable industry, you need to continually improve your efficiency, or you will die. This is happening to Windows and Oracle right now.

ghd straighteners: Your article is write very well, I like it very much ~ ghd...
inetwork: President Inauguration. Sampai Kapan Indonesia Terus Memben...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
Laptop Battery: Laptop Battery Laptop Battery Laptop Batteries Laptop Batte...
: rongTiffany Jewelry Online - Discount Tiffany & Co Jewelry O...
ugg bailey button boots: Just wanted to say great job with the blog, today is my firs...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
replica Watch Accessories: replica watchOmega watchesRolex Prince watchesreplica Watch ...
nike sports: replica watchesIWC replicaMaurice Lacroix replicaConcord wat...
replica Audemars Piguet: replica watchesLongines watch for salereplica BreitlingCarti...

sweetcode

I found the sweetcode website via Lambda the Ultimate. It appears to be a blog of interesting, useful, non-trivial software. For example, I can imagine using Judy, a fast associative-array implementation for C, for work. And VIPS, a lazy-evaluated image processing program, is something I've wished for more than a few times over the years. I also like Sequitur, which generates grammars from example text. Perhaps Sequitur would be useful for reverse engineering file formats?

Rolex watch for sale: replica watchRolex watch for saleGraham replicaMaurice Lacro...
Breitling watch for sale: replica watchBreitling watch for salecroum watch for saleHer...
UGGs: UGG Cardy UGG Cardy Boots UGG Cardy On Sale UGG Cardy Sal...
fanqin: Louis Vuitton Tivoli PM Louis Vuitton Replica Tivoli P...
ugg boots sale: uggs on sale ugg classic tall...
Jimmy Choo Handbags: Burberry Handbags| Burberry Handbag| Burberry bags| Burbe...
sindee: nike air max 2009 discount air max 2009 nike mens low dunk...
nike sports: replica Franck MullerBreitling watchesomega replicaCartier w...
replica Audemars Piguet: cheap Christian LouboutinChristian Louboutin Bootsdiscount S...
uggboots: ugg boots sale at a time when large heat has set off a winte...