I want to make a tool for creating websites based on faceted classification. This is basically what I do for work, but I want to make a simple version that emphasizes ease of use over feature set. This would be targeted at self-publishing (ala Movable Type) and community-publishing (ala Wiki).
Faceted classification is a technique that lets you categorize "things" into multiple overlapping hierarchies. For example a Madonna CD might be categorized under "Artists / Madonna" as well as "Format / Compact Disc" and "Price / $10 - $15". The advantage of this is that it doesn't force a dominant decomposition upon the user (to borrow a phrase from Aspect Oriented Programming). For example, one user might restrict themselves to cheap CD's first, while another user might want everything Madonna, cost be damned.
I don't have time to work on this idea quite yet, but I've been thinking about it for a few weeks so I wanted to post my current conception of it. Here's a quick list of the requirements I'm envisioning:
What kind of site would this system be useful for? Well I could use it for my history idea, for one. It would also be useful for catalog sites like freshmeat. And it might encourage a weblog-wiki hybrid that people might find useful.
The underlying assumption I'm making is that if you make software that structures information differently, then it will find its own unique uses. Think of the difference between web pages (one-way links, read-only), weblogs (single author, public comments, chronological), newsgroups (subject categories, threaded discussions), wiki (interlinked, publically editable), and instant messages (immediate, point-to-point).
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.
Here's a very interesting post (with pictures!) by Brad DeLong on the real distribution of Democrat and Republican votes in the US.
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.
I'm reading a history book called From Dawn to Decadence: 1500 to the Present, 500 Years of Western Cultural Life. There's a passage in it that I think does a very good job of helping the reader sympathize with what it might have been like to live in sixteenth century Europe, where Christianity was all-pervasive:
Consider Predestination, which states that individual merit does not ensure salvation and that man has no free will. This has been the most widely held Protestant dogma. When an idea posesses so many minds and such good ones, it is foolish to write it off as fantasy; one must look for the experience on which it rests... I said earlier that predestination is still maintained by a good many non-believers; they might be surprised to hear it; they do not, indeed, believe that eternal damnation is decreed for the many, including unbaptized infants. But they do believe in scientific determinism -- the unbreakable sequence of cause and effect, and that is predestination. It is the assumption all laboratory workers make and it rules out free will. Any present state of fact, any action taken, is the inevitable outcome of a series of events going back to the Big Bang that produced the universe.Social scientists and common folk who babble about genes or the Unconscious or "man a chemical machine" similarly account for others' actions and their own as did Luther and Calvin. The road taken was set from all eternity, with no choice at any moment: will is an illusion. The sense of being driven by a power not ourselves is not uncommon... Modern criminology is rooted in this conviction and public opinion in the main agrees: the criminal is not responsible for his acts; he is "conditioned." Grace (the right heredity or environment) has been denied him.
Other root beliefs of the 16th century also have their present counterparts. Luther's agonizing about sin is matched by the Existentialist preoccupation with Angst, or despair at "the human condition." Unaccountable "guilt" may be said to be popular today, notably among the many sufferers of depression. It is sometimes cured, as Luther's was, by introspection, on the analyst's couch and by acceptance of what is thus revealed. Catholic confession was a summary form of therapy.
Nor has the word sin disappeared from the vocabulary of the enlightened. More than one modern novelist, poet, or social theorist has attributed the horrors of our time to original sin, although its definition is left vague. It presupposes that human nature is fatally flawed. This is a more ruthless belief than the theologian's, since it does not include a Redeemer from sin or the efficacy of baptism. In the 16th century both together lifted that terrible burden. For some in our day what redeems "scientifically" is political revolution, after which history will stop and society will know happiness without laws -- in other words, the Kingdom of the Saints fought for by the Anabaptists and others for 100 years.
I especially liked the idea that Grace (as in "there but for the Grace of God go I") can be likened to having the right genes or upbringing, and the comparison of political revolution with the coming of the Kingdom of the Saints. Comparisons like this make religious ideas seem much more reasonable to an athiest like me.
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).
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).
I never thought about this before, but apparently Japanese software doesn't need icons. They have enough one-character words that they're unnecessary. Seems obvious in retrospect. I wonder what they think of software designed by English speakers, like Microsoft Word with all its icons for open-file, save-file, print, etc. Does the Japanese version of Word use ideographs instead?
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.
Metallica is suing Canadian band "Unfaith" for using the chord sequence E F.
"We're not saying we own those two chords, individually - that would be ridiculous. We're just saying that in that specific order, people have grown to associate E, F with our music," blathers Lars Ulrich. "It's nothing personal against them, we intend to enforce our rights with any band intending to use Metallica-branded chords in the future."
Yes, this is true, I checked it on Google News. Time to burn any Metallica albums you have. May I recommend Apocalyptica as an excellent substitute? They play Metallica (as well as Pantera, Helmet, Prong, etc) songs on cellos.
Here's a movie of a crow creating and using a tool. In this case it's a piece of wire which the crow bends into a hook so that it can get at some food. The movie is interesting primarily because so many people are surprised that a crow could do such a thing -- they assume that animals are not only incapable of using (much less creating) tools, but that they are also incapable of problem-solving in general.
I find it interesting when people allow their cultural assumptions to leak into the scientific realm like this. It's frequently very difficult to tease apart what you're assuming from what you're actually seeing.
Howard Dean is "guest blogging" over on Lawrence Lessig's blog. I haven't seen anything like that before. It's a very interesting idea. Why didn't I have a guest blogger while I was on vacation? ;)
Pictures from my vacation. London, Barcelona, France (Villefranche, Canne), Italy (Florence, Rome, Naples), Greece (Mykonos, Santorini, Athens), Malta, and Vienna.
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.
While I was on vacation, I learned a lot about the various places I went to. I also started reading A History of the Arab Peoples. Until now I had always thought of history as being extremely boring, but somehow all that changed in only three weeks, and I suddenly realized that the inter-relationships and complexity of history can be fascinating.
Being a programmer, and having a very poor memory for names, I naturally started wondering how I could create a database out of all this, to help me organize and remember everything I've been learning. I'm thinking of something like Mathworld, but for history. It would store a lot of snippets, annotated with metadata that can be used for organization and searching. For example, one snippet might take place in Barcelona (place), in 1583 (date), involving both politics and Christianity (themes), and be worth mentioning when considering anything within 10 years and 100 miles (relevance). And of course the information would have been gleaned from somewhere (source).
The resulting website would be very different from most history books. Instead of being a linear narrative, or even a hyperlinked set of pages, it'll just be a collection of little snippets, like the panels next to exhibits at museums. Making the result actually be interesting to browse will probably be the most difficult part -- most people find history boring enough already that if you take away the narrative, their eyes will glaze over before the page even finishes loading. But I'll work on that problem once I actually have some content.
Obviously this is a mammoth task, and I don't feel like restricting its scope in order to make the task more managable, so it would have to be possible for other people to contribute to the database. Which means that the markup will have to be relatively simple, along the lines of Wiki.
I'm currently trying to keep this idea really quick and dirty, so that I'll have a hope of actually implementing something before I lose interest. Of course the first question is what language to use to implement it... ;)
From ScienceBlog:
Given only a fraction of a second to respond to images of men popping out from behind a garbage dumpster, people were more likely to shoot blacks than whites, even when the men were holding a harmless object such as a flashlight rather than a gun. The research used a virtual reality simulation and was prompted by a number of mistaken shootings of unarmed blacks by police officers in recent years.