Search Results: "tach"

5 May 2006

Simon Richter: Novelty and the desire to be part of it

Since no movie would be worth watching on its own, there has to be a shitload of extra stuff attached to it. Granted, m:i 3 is probably not worth its budget even with the ringtones, but the "set your phone to infrared reception and stay near the ad" thingy was kind of cool. Only that it doesn't work as one might expect, by transferring the ringtone. No, it uses AT commands to send an SMS on your behalf. And that is not worth trying out (hey, as if I wanted a new ringtone now that I got used to Lagerfeldt's "Dutch Breeze Robocop 3 progressive uplift"

4 May 2006

Martin F. Krafft: Back to Bangkok

I spent my last evening in Yangon at "Sandy's Myanmar Cuisine", a wonderful restaurant (albeit a little pricey, I paid $10 for appetiser, main dish, and two beers) overlooking the Kandawgyi lake, attached to the Yangon Kandawgyi Palace hotel; dinner was duck eggs filled with minced prawns, followed by boiled snake-head fish, wrapped in moringa leaves. Quite delicious, although I would have really liked to try their pig ear salad, but they rightfully alerted me that their pig ears weren't fresh. Afterwards, I treated myself to perhaps the second-best back massage I've ever received (the first one was delivered by a massage therapist from Berkeley, whom I had met on the boat down the Mekong to Luang Prabang last year. Before the airport the next morning, I made a stop at the Yangon MICT, specifically the Myanmar Info-Tech company, to meet William, the Myanmar Linux Guru #1. Unfortunately, he was busy at the 5th Myanmar ICT week, so I sat in one of the talks instead and was very pleased to learn that there is an active (but small) group of people working hard on localisation of Pango to the Burmese and Pali languages (the latter being the ancient Buddhist language, and the acceptance of the Burmese character set into Unicode 4.0. I exchanged email addresses with a few of the folks involved, who were well familiar with Debian and Ubuntu, and rather interested in teaming up. I'll forward their addresses to the localisation people as soon as I get back. With still some time left before check-in, I enjoyed my last Myanmar-style breakfast -- Mohinga -- which is a spicey fish soup with noodles, and definitely the best way to start the day; I'll miss it. At the airport, I was getting mildly annoyed once again at their security procedures, which in part required everyone to surrender their gas lighters. Of course, I had four of those on me and in my hand luggage, but when I refused to give them all of them, pointing to the smoker's lounge on the far side of the security check, they held their heads low and gave in. I bet they do this primarily to sell the lighters for some cash on the side, given that nowhere else in Myanmar, or flying to Myanmar, I was asked to do the same. My chaotic self managed to also leave the info brochure from the Info-Tech company, as well as the slides from the talks at the immigration counter, which promptly got me into a questioning by the military as to what kind of documents these were (they cannot speak English in general). With the help of a local, I told them all about localisation and they seemed impressed, but when I finally got on the plane, I guess I felt somewhat of a relief to be outside this tightly-controlled country again. I landed in Bangkok and took a taxi to the hotel, only to discover that thanks to a power outage and the crappy Internet connection back in Mandalay, I had managed to book the wrong one. Instead of central Sukhumvit, I am now staying at Soi 57, which is 4 km further outside of the city. That wouldn't be a problem, for the sky train station is right in front of the hotel, but the staff have not had a lesson in friendliness and generally barked back rather than answering my requests. Plus, since my flight tomorrow is only at 23:30 and I requested to take a shower at 20:00 before taking off (having otherwise checked out and cleared my room), they simply shoved a sign into my face which stated that check-out after 16:00 hours would cost a full day's room rate, and that they did not have any showers available otherwise. Screw that. I'll make sure to let asiarooms.com know in the form of a review. Having settled, and with a bunch of Thai Baht left to spend, I headed for the center, bought myself another Murakami book ("Hardboiled Wonderland and the End of the World"; I seriously love this author), and then proceeded to spend money as fast as I could -- and I am not good at that. I got another massage, bought some bamboo plates and one of those gravity-defying wine bottle holders, a bunch of DVDs, had dinner, and then didn't feel like anything more, so I went back home. As usual, coming back to Bangkok is quite a disappointment (while arriving at Bangkok at the beginning of a trip is a thrill). The city is busy, dirty, and noisy, it's all comparatively expensive (even if you bargain hard), and people are so much more into making money that it's not really possible to get in touch with locals. Then again, I cannot figure out whether my disappointment stems from the shopping mode (into which I was put by several requests to bring back stuff), this being the end of my vacation, or just being back in a metropole after so many rural days. Almost no plans for tomorrow. I might have to make my way to the dreadful Khaosan Road to pick up some student IDs for friends, I would like to (finally) see the snake farm, and I have a lunch appointment with the retail manager of Jim Thompson (the famous silk exporter), who happens to be a friend of Adam, the guy I met in Mandalay, and who introduced me to her -- no worries, I am not getting into the silk business, nor will I spend money there, but the lady is supposed to be quite a character and fun to talk to. Why not? If I wake up, it'll be Tai Chi in Lumpini Park at around 5:30, and if there's time in the afternoon, I'll make my way up north to the biggest market of Bangkok (don't have the name handy). In general, not such an exciting day, waiting to return to Europe. Sigh.

Andrew Pollock: [life/americania] Still no licence

So about a month ago, I discovered that my driver's licence was stuck in bureaucratic hell. Well the temporary piece of paper licence was due to expire on May 10, and so I called up the DMV again yesterday, and was told it was still pending. So I made an appointment to renew it. Today, coincidentally, I received a brand new 120 day temporary piece of paper licence in the mail, with a note attached:
Your application for a California driver license cannot be completed. California law (Vehicle Code Section 12801.5) prohibits the issuance of a driver license until your legal presence, as authorized under federal law, has been verified. This information has not been received from the Immigration and Naturalization Service (INS). ... Your application will remain valid for 12 months from the date you applied for your driver license. Your license will be issued and mailed to you as soon as the information is received from INS. We regret any inconvenience this may cause you.
The process inconsistencies are incredible. I know of two other E-3 visa holders that have received their proper licences without significant delay. I seem to be cursed.

27 April 2006

Martin F. Krafft: Almost crying in Bagan

I guess you could say I am now on the verge of tears, or at least have been for a while (and it's wearing off) -- since I came back from a little expedition on a horse cart around Bagan, visiting some of the poorest villages in the area to drop off a good share of the presents I still have with me (like marbles, balloons (latex ones, so biodegradable), soap bubbles, hair pins, fake jewellery, balls, and pens and paper), as well as a bunch of tubes of toothpaste, bars of soap, and bottles of shampoo, which I had picked up on the way just before. My sadness comes from two aspects of this experience. The first, which is minor because I had expected it, was simply to (once again) witness the conditions under which the poorest of the poor live: in bamboo houses together with their cattle and pigs (everyone here seems well aware of bird flu and have taken the appropriate precautions; the government apparently did a good job in educating its people), with trash and feces all over the place, kids with almost no clothing and the elderly obviously sick from a distance. But I've actually seen worse in Laos and expected it, so that wasn't the main source of my tristesse. What almost made my eyes water was rather the fact that in the first village of the two I managed today, my arrival and obvious wish to give out gifts resulted in fights among the kids, and in dishonest behaviour by some, while the mob was almost ready to run me over as everyone (including grownups) was stretching out the hand and grabbing at whatever I pulled out of my bag. Call me naive, but that part I did not expect. It's understandable, as for these people, anything makes a difference, sometime and existential one, but they are Bhuddist after all, and among the teachings of the Bhudda you can find such lines as "do not be dishonest", and its philosophy (which carries throughout many non-Bhuddist Asian countries) includes the rule to never lose one's face, which covers shouting or fighting. On my first trip to Southeast Asia -- Vietnam -- I reached some remote villages in the Tonkinese Alps in the country's north -- villages which where equally poor, but which were also quite detached from civilisation as found around larger cities. While money still served as the main means of exchange, it appears to have a much lesser meaning to the people, who are mostly self-sufficient to a point of independence from the government as far as you can get (I guess). In these villages, I also passed out presents, but never had an experience such as the one today (nor did we experience something of this sort in some of the villages in Laos, equally removed from the main lines of infrastructure). Rather than fighting for the gifts, the kids would share them. Rather than tears, the gifts brought smiles. It thus seems that civilisation as we know it causes the competition even among kids, and that's the part that fills me with sadness at the same time as it disillusions me quite a bit, because that kind of civilisation will inevitably spread. Going off on a tangent (without the intention to return), I have been thinking a lot about my "mission" in Myanmar, which was to bring clothing and medication, as well as gifts to the poor. While one could interpret this mission -- carrying more than 15 kg of "stuff" through the stifling heat -- as an altruistic act, I also cannot deny the selfish component, because I take great joy in helping people. If you recall, dropping off the clothing I had brought in a village a couple of miles outside of Pyin Oo Lwin didn't fill me with the satisfaction I had hoped to gain, mainly because I was obviously misinformed about Myanmar (btw: I am calling it Myanmar again, which is actually what locals use, unless they speak with tourists). Fortunately, however, I quite easily managed to accept that the mission was still a success for the people undoubtedly were helped quite a lot. If there is one thing I have learnt for sure this time around, then it's that I will return, sooner rather than later, and hopefully with a lot more goods than this time around. This trip has been self-funded, which is why I am also (trying to) spend most time on vacation. I could well imagine that the next time might see me just running the goods there and fly back after only a couple of days. Of course, there are no details, but keep this in the back of your heads (and pass it on), just in case you'd be willing to donate funds to finance the trip. This brings me to another, somewhat related topic, which I have been pondering ever since I arrived in Myanmar, and especially so after I met and talked to a Portuguese globetrotter, last night: the topics of beggars and how to support these countries in effective ways. Let me address those in turn, the second one first as it's more closely related to my braindump you just read (thanks for that), and because I am nowhere near a resolution and can thus sum it up in three sentences: even though individual aid trips, like the one I am on, are helping, I would guess their effectiveness to be quite low, and raising this effectiveness certainly requires a lot of effort and infrastructure. Thus, it may be more beneficial if I were to donate my will to help to an existing organisation already established and connected in the Southeast Asian countries. I am not talking Unicef and other, similar large organisations (some of which I do support already, and if only financially), but rather much smaller endeavours that concentrate on this area only -- surely the need for help exists in all developing countries, but I am most interested in helping Southeast Asia, for the people here have taught me so many valuable things that have changed my life. On the first topic -- beggars -- let me say this much: if you've been to developing countries, you know what I am talking about. If you have not, just imagine all sorts of people (but mostly poor-looking) coming up to you with their hand stretched out, saying "money, money" repeatedly and not respecting a "no" in any way. Any guide book advises you not to give any money, because it will increase the "nuisance" these beggars are to future tourists. But at one point during my time here, I was as far as giving a small amount to everyone who came up (unless there were more around, at which point it would just get out of control too fast) by reason that it doesn't hurt me a bit, and that despite the syndicates and other arguments against it, if you are actually helping one out of ten beggars, that's one more than zero. Since then, however, I've found some more compelling arguments, and the one that's been the most persuasive so far is that a beggar's success attracts more beggars, and while the guide books call that a "nuisance", the real problem is that these people come from villages to cities, from places where they are self-sufficient (at least in Myanmar with its vast resources) to places where they'll end up sleeping on the streets. Enough of that for now, you can be sure there will be more another time; on to something completely different: This is the first time I am travelling Southeast Asia while blogging, and I have very mixed feelings about it. First of all, Myanmar isn't the place for easy Internet access, so it's been quite painful to keep publishing (which was only possible thanks to the help of Hanspeter back at home; thanks), nor is it the place where you'd be inclined to spend a couple of pensive hours in front of the screen while serialising your thoughts into writing -- the power keeps coming and going every couple of minutes, and frequently the battery-backed power supplies most people have cannot bridge the downtime. But that's not the reason why I am not really too satisfied with my blog entries so far. I have found it difficult to write even in Thailand, where Internet access was excellent, and I guess it's mainly due to two reasons: first, there is too much going on outside and the fear of losing a minute of "street action" to these godaweful computers just keeps me from taking the time to think before writing. The second reason is related: impressions need time to settle, and I guess in some ways I do prefer very much to just "be", rather than experiencing with the objective to blog about it in the back of your head at all times (I am a geek after all, don't forget that). I guess I'll try it another time since having Aline along for the first part, and then being subjected to Myanmar's suboptimal information infrastructure, may be factors of larger value than I see them right now. By the way: this blog does not contain all of my writings while I am here, for obvious reasons, so there is more to come if you are interested, but not via this channel. I'll let you know. Now, on the boring side: I returned to the temples in the late afternoon yesterday and saw another three or four, before sprawling out on top of another in aspiration of the sunset to be Obscured By Clouds (which is when I talked to the aforementioned globetrotter for an hour or so). I did find that after all, Bagan didn't have much in store for me, having seen some of the temples at Angkor. The scenery is breathtaking, and some temples are really astonishing views, but as soon as you get on the inside, they are mostly walls and Bhuddas, one similar to the others, and thus quite unlike to what I'd seen in Angkor last year. Since I am also not the type of guy to go off meditating for a day in a remote location, or take my book far away to read in peace, I think that this one day between the temples was enough for me. Maybe the temperature did play a role too, but there was no question for me: I was to do something else the next day (which is today), rather than go out again on that horse cart. I thus joined up with some Australian travellers on their overland way to their new home, London, and hired a taxi to Mount Popa, home of the 37 Nats (spirits) which are closely knit into the Burmese culture. After a 25 minute climb up steep stairs, I found myself again disappointed by a somewhat dirty and absolutely non-pretty stupa on the top of the hill. The view (and temperature) was great though, so no hard feelings, but also no time lost to head back to the hotel, to get on with the village hopping I had planned for the afternoon. Tomorrow morning I am leaving for Hohe and Inle Lake, where it'll be much cooler (or so they say). Stay tuned. PS: And of course, Murakami's novel is not called "Kafka at the Beach", as I wrote in yesterday's entry, but "Kafka on the Shore". I guess it must have been yesterday's intense heat causing that Freudian slip. Anyway, the book is truly captivating and I am afraid I'll zoom through those 600 pages faster than I'd like, given that it's the last of the books I brought. Hopefully I'll find something to pick up on the way that's not Agatha Christie, Dan Brown, Jane Austen, or the other wonderful writers of entertainment fiction, which I'd rather not read even if you paid me for it.

26 April 2006

Martin F. Krafft: Mandalay to Bagan, and 2700 temples

Leaving the computer centre in Mandalay, I decided to settle my further itineraries and headed to an Internet shop in the hope to arrange some online bookings, using Aline's credit card (because mine was lost and I would rather preserve the cash dollars I have, given that there is no way to get more money in this country. I managed to book myself hotel rooms for the One Night in Bangkok I have before returning home, as well as the five days of Yangon before. Other than that, however, I could not get any flights; Myanmar-internal flights cannot be booked online, and Thai Airways refuses to take passengers when the name on the credit card does not match the passenger's. Given that my plans for the evening where set, I had to leave the place with my mission unaccomplished and headed for the Green Elephant restaurant, which the Lonely Planet describes as up-scale. For a whopping $7, I treated myself to beer, pickled ginger and green tea leaves, and butter fish in a tomato curry. Very delicious. Afterwards I attended the Mandalay Marionette & Culture Show, which was quite lovely despite the atonal music that came with it. Mandalay marionettes (or Myanmar marionettes in general) are very elaborately made, and the style to guide them is very unique to the country, the art having been the popular art back in the days when kings ruled the land. The artists are devoted to keeping this art alive, and you could really feel their enjoyment as they showed fights between ogres, princes and snakes, riding horses and trolling monkeys, princes engaging in "hackysack"-style football artistics (which is very popular over here, and people are rather good), as well as synchronised dances between marionettes and real dancers. I can recommend this show to anyone visiting (as I recommend to anyone visiting Hanoi to see the water puppet theatre) and am glad I chose this option over the "Moustache Brothers" performance, which is political satire and slapstick on the edge of legality. I ended the evening talking to some other travellers, most of which had no interest in listening to others but to tell their stories instead. The next morning saw me rising at 4:30 to catch the ferry to Bagan at 6:00 o'clock. The boat had comfortable seats and a restaurant, and only a handful passengers, so the 10 hours went by reasonably fast (no comparison to the ride we took on the Mekhong last year to get from Chiang Khong in Thailand to Luang Phrabang in Laos). We arrived in Bagan on time and together with some Australians I found the May Kha Lar guesthouse (following again the Lonely Planet), which is a rather pleasant place with a lovely, elderly, English-speaking lady running it. SHe also arranged my further air travel for me and wanted about $30 less than the official booking offices. I decided to spend an additional day in Bagan, so I am heading out from here by plane on the 28th, going to Heho, then spending two and a half days at Inle Lake, and flying to Yangon on the 30th. From there, I am leaving for Bangkok on 4 May. With the tickets in my pocket, I felt relieved, showered, and went for a traditional Burmese massage, which turns out to be completely different from the Thai style (which Laos and Vietnam copied more or less) and was rather painful, both because the lady literally tormented my legs far too long and spent only a very short time on my pained shoulders, and because neither the mosquito coils nor my repellents warded off the beasts as I was lying there out in the darkening sky right at dusk. No Malaria in this region, fortunately. Following a very traditional Burmese dinner (goat meat curry), I went to bed because... ... the next day I rose again at 4:30 to meet a guide, and left the hotel at 5:00 o'clock on a horse cart for a tour of the temples. Bagan is what could be called the heart of Myanmar, and on a 42 square kilometre area, you can find 2700 temples (of the 4500 originally built), dating back to the 10th century AD. Unfortunately, the wall carvings and paintings in most temples has been washed away, and it was nowhere near as fascinating to stroll along the endless corridors as it had been in Angkor Wat or Bayon Wat in Cambodia, but from the outside, these temples still look spectacular and are well preserved or restored. Also, climbing up on one or the other, the sight was almost overwhelming: a vast landscape of strupas and temples as far as the eye would reach, and all that under a lovely sunny sky. Haha. The "sunny" bit is what made me get up so early, because the temperatures are bearable only up until 11 o'clock or so. Between noon and 16:00 o'clock today, the thermometre measured 46 degrees Celsius -- I don't think I've ever been in a place so hot (if you leave out our trip to Death Valley in an airconditioned van. So in order to escape the heat, I went to the archaeological museum at noon, then back to the city and into the swimming pool of one of the nicer hotels in town, which cost me $3 for a pool that was green (they don't have the money for chemicals), and the water about the temperature of my bathtub at home. I did not swim, but fortunately, the showers there were pleasantly cold, so I lay in the shade to read ("Kafka on the Short" by Haruki Murakami), taking a shower every ten minutes to cool down. Going back to the hotel, I find the electricity to be gone once again. I think that this town (and Mandalay as well) has maybe 4 hours of electricity a day, it coming and going every few minutes (which makes computer use quite unpleasant). This also means that there is no aircondition most of the day, at least in the budget hotels which don't have their own generator. I am meeting my guide again at 16:00 hours for another 2-3 hours, then will follow the hotel owner's suggestion for a "back massage expert", eat, sleep, and climb Mount Popa tomorrow morning. I'll try to get online again in the afternoon. Thanks for reading along.

22 April 2006

Joey Hess: ugh, mailman

Just wasted 3 hours fighting with my mailman installation, which had, unnoticed to me, stopped processing any mail two weeks ago. It seemed to be either getting completly stuck on some messages in the outgoing mail queue -- strace and ltrace showed it was in some kind of tight loop processing their contents. So I solved that by removing some 900 of the 1000 queued messages (the ones that were messages about bounces, held messages, and spam), then it processed the rest of the actual important messages quite quickly. I think I've had enough of mailman. The web user interface is great for letting nontechnical users admin their own mailing lists, but every time the package upgrades I seem to have to manually delete cruft out of the queue; the spamassassin integration sucks, it doesn't allow configuring it on a per-list basis; its mail archiving is sucky, especially its attachment handling; it seems to shunt random messages constantly for no apparent reason; mailing list admin is unending drudgery of processing mails that it thinks are spam; this is at least the third time in the past year that it's just died for no apparent reason; and in general it seems the be designed with the idea that there will be a human constantly in the loop babysitting things. Oh and it still defaults to sending stupid monthly password reminders in cleartext. Guess I should try Enemies of Carlotta or something, ezmlm used to work fine w/o handholding back when I used qmail.

Joachim Breitner: Silencing my Slug

Some time ago, I bought a LinkSys NSLU2, that’s a very cute little box with power, usb and network plugs, and nothing more. Inside sits an ARM processor and 16MB RAM. The great thing is: You can install linux on it, even a complete Debian sarge installation.The box is not very performant, even after I de-underclocked it by scraping away a resistor from 133MHz to 266Mhz, but it is quite cheap and very handy. I use it for nightly backups. Unfortunately, the attached external Maxtor OneTouch harddrive is quite loud, even when it is idle. Here are the steps I took to make the setup zero-noise as long as the slug is doing nothing:Some further plans for my slug involve a USB attached LCD display and a temperature sensor, so I can be informed about various stuff, incuding the outside temperature, even with my regular computer off. Suggestions of what hardware I could use is highly appreciated.

19 April 2006

Andreas Barth: More information on sarge r2

I would like to highlight some of the more important changes about sarge r2. They have been placed in the official announcement not as noticeable as I would have hoped.
Notable Changes
---------------
Sudo has been changed to not propagate all environment variables to
subsequent programs to avoid security risks.  This change might affect
software that uses sudo.  Please see /usr/share/doc/sudo/README.Debian
for more details.
Miscellaneous Bugfixes
----------------------
This revision adds important corrections to the following packages.
Most of them don't affect the security of the system, but may affect
data integrity.
	affix-kernel           Fix build failures with sarge's kernel
	
	backuppc               Fix possible backup archive corruption and
			       possible data loss when changing the
                               configuration file
	
	cernlib                License problems, repackaged
	
	cyrus-imapd            Don't remove mail data on package purge
	
	cyrus21-imapd          Note cyrus-imapd data loss on package purge in
                               upgrade documentation
			       
	evms                   Fix address stack corruption leading to possible
			       data loss when activating degraded RAID-5
                               volumes
			       
	exim4                  Fix mail delivery problems to hosts with AAAA
                               DNS records and unbalanced DNS
			       
	f-prot-installer       Adjusted to work with recent releases
	
	fai                    Fix setup of lo device, replaced hardcoded name
			       of debian distribution in fai-cd, add missing
                               packages when calling fai-mirror
	glibc                  Update timezone data, fix NPTL for x86_64 (amd64)
	
	leafnode               Fix security issue (CVE 2005-1911)
	
	libchipcard            Don't remove user account on package purge
	
	mutt                   Fix possible attachments data loss
	perl                   Fix problem with utf-8/taint interaction
	                       Fix possible malloc-to-death bug, #227621
	rssh                   Fix security issue (CVE-2005-3345)
	slune                  Adjust to security fix in py2play, #326976
	sodipodi               Fix segfaults on 64-bit architectures
	tar                    Fix inability to work with remote devices
                               on non-i386, #356657

12 April 2006

MJ Ray: Reforming the NM Process

Suggestion: ... [temporary link to lurker copy until lists.d.o reruns]

6 April 2006

Andrew Pollock: [opinion] There's hope for Dell USA yet

Despite my dramas on Monday night with Dell USA, and I think thanks to the (much better) Dell APAC, I had my change of ownership expedited, and received an email today that it had been completed. So I again grappled with the abomination that is the US Dell support line. I might add that I could not find the number I called anywhere from http://support.dell.com, and had to rely on the dialled number history in my phone to call them again. I'd like to think that half of my customer service experience improvement was because I only spoke to someone in India once. They were able to pull up my laptop's service tag now, and transferred me off somewhere else. Except that wasn't the right place, and so they transferred me again. To the wrong place. At least the second person I was transferred to was able to see that I'd already been transferred twice, and used some special phone system secret powers to transfer me to the right place at last. I didn't even have to put up too much of a fight to convince them to ship me a new drive. When I told the lady on the phone that I'd run the Hitachi Drive Fitness Test and it'd failed the disk, and that it had been making nasty clicking sounds before that, she agreed to send out a replacement. Hopefully it'll arrive on Friday.

4 April 2006

Matthew Palmer: Rewriting in Rails -- A Practical Examination

[Note: this article was mostly written some weeks ago; I left it in my "to be edited" box and then promptly forgot about it. So any and all temporal references are way out of whack. Since originally writing this article, I have commenced an incremental rewrite of an in-house business management application from crazy-PHP (a common -- some may say overwhelmingly so -- dialect of the language noted for it's complete lack of any sort of good software development practices, such as the creation and use of functions (!)) into Rails. Articles on this effort will be appearing presently.] Almost immediately after I'd finished writing my previous discussion on why rewriting software is evil, I decided to make a little experiment. What I did was take a fairly well factored PHP application, and rewite (a portion of) it in Rails. My intent in this was not to produce a production-quality rewrite. I have no interest in proliferating yet more functionally equivalent clones on the world. Instead, I undertook the work simply to get a feel for (a) writing a whole, traditional, Rails app in a short space of time, (b) how quick Rails really was to produce an application, and (c) whether wholesale rewrites really are as boring and life-sucking as I imagined them to be. My methodology was this: with a small amount of knowledge of the target application (SysCP), the existing database schema and templates, and a weekend, rewrite as much of SysCP as I could in a close-as-possible reproduction of critical SysCP functionality. My summary results are: rewrites are as boring as I thought they would be, Rails is powerful but fairly complex and slightly buggy when you get down into it (especially if you're working from an existing -- possibly suboptimal -- database schema), but overall, Rails is Way Good Stuff. On the boredom aspect -- I had two days to write code. I had some domestic duties to attend to (walk the dog, visit the hardware store, help my wife with attaching a new bag rack to her bike, mow the lawn, etc) but on the whole, it was dedicated to programming. I've spent whole days (hell, 40 hour marathon stretches) cutting code before. I knew this wasn't a six-month deathmarch, but only a weekend experiment. Despite that, I feel that my motivation levels were lower than they normally are when coding. I can only imagine what it must feel like, two weeks into several months of hard core coding, knowing that you'll end up with what you had before, functionally speaking. If you are going to do the rewrite thing (and may the Flying Spaghetti Monster have mercy on your soul if you do), then pick the right project. SysCP is large masses of tangled PHP (is there any other kind?) but it has a fair amount of local and global structure once you get down to it -- for instance, it's quite well factored into business logic and display, and the code is broken down fairly logically by action handler, so you get entire source files that look like this:
  if ($action == 'edit')
   
    // 150 lines of twisty passage PHP
   
  else if ($action == 'new')
   
    // Another 150 lines
   
  // repeat for another few actions
and so on. The nice thing about this is that, if you have to look for how something works, you can almost certainly find it in one place in the source. Deciphering it might be another matter, but at least you've got something to start from. As I mentioned, the display in SysCP is pretty nicely split off from the logic -- a large number of templates, with common header/footer files, with some small parts in common templatettes. Some HTML is still generated within the actions, but due to the above action-based structure, it's usually fairly easy to identify all of the HTML that will be associated with a particular action and turn it into a coherent Rails template. I would dread doing a rewrite of the presentation layer of, say, IRM. It's idea of well-factored presentation is to separate print statements from logic by a blank line. To my great shame, I've had the reins of IRM for a year, and it's still this bad. I claim it's because I hate HTML coding with a vengeance, but I think I'm actually just scared to try and tame that particular monster. (Update: Martin Stevens has been doing some good work turning IRM's HTML into Savant templates. The only downside is that I can hear his manic laughter -- caused by IRM's insanity slowly infecting him -- all the way from England, and it's keeping me awake at night). I also had to re-learn that most hated but most important of lessons -- that, no matter how much reading you may have done, until you've cut chunks of code in a language or environment, you have no idea how it actually behaves in your brain. Specifically, I spent a fair amount of my alloted rewrite time learning a few little lessons in how Rails actually behaves, and all of it's cool little features. Of course, everyone is going to have this pain, and I've suffered it in every language that I've done any appreciable amount of programming in, but it's always a shock to the system that -- after all this time programming -- a new language still makes my brane tingle curiously for a while. Luckily, I'd read and digested all of both the Pickaxe (Programming Ruby) and AWDWR (Agile Web Development with Rails) so I knew what was possible, I just usually wasn't sure how exactly, so I spent a lot of time with my head in the books. Rails' little foibles also bit me in the bum more than once. For example, I spent over an hour (a no foolin' hour) trying to hunt down what I was doing stupid in my code to make Rails completely forget about the value of a couple of my fields. The answer turned out to be to restart Webrick (Rails' internal webserver for development testing), and the problem cleared right up. You could hear my screams of anguish from the moon (even through the vacuum of space -- it was a lot of anguish). Rails isn't the Final And Ultimate Solution To The Webapp Problem, but it's a good start. There is near-zero administrative bumf when you're writing a Rails app. Rails is fairly intelligent about working out what you want done from the world around it. Code generators (which produces sensible, minimalist templates -- not the ugly, unmaintainable behemoths produced by Visigoth Studio, which has given the whole code generation world a bad name) handle a lot of the low-level "oh bugger, I have to add a new file" feeling. It's very, very anal about project structure, but (in contrast to many other bondage-and-discipline frameworks I've looked at in the past) this structure seems almost comforting (maybe I'm just getting old and turning into a satisficer). What all this means is that you (a) don't write much code unless it moves you toward your goal, and (b) Common structure means that any Rails app will be fairly familiar to an incoming programmer. Unfortunately it also means that cunning wankers will, sooner or later, work out a whole pile of ugly tricks and contortions to get themselves out of Rails' comfortable-but-no-doubt-incompatible-with-many-people's-ways-of-thinking straitjacket, which I will (sooner or later) end up maintaining. Like many of Rails' (and Ruby's) features, though, I don't see them being any more abusable than most features of any programming language or environment -- and at least they're powerful and useful (unlike, say, register_globals, magic_quotes_gpc, magic single-character variables, mandatory indenting, or banning tabs as indent characters -- I thought I'd spread the slagging amongst lots of languages). Productivity-wise, although I was only just kicking off my Rails webapp knowledge, I felt I was doing fairly well. From experience, what I produced in my weekend was roughly on par with what I could produce in PHP in the same amount of time, had the situation been reversed. Considering that I have about 3 weeks of Ruby/Rails knowledge, and about 5 years of PHP experience, I think that's a big win. (Update: I've since produced a DNS management applet for work in about 6 hours billable time, and a virtual mail account application in about 12 hours, both using Rails. There isn't a hope in hell that I could have performed a similar feat in PHP, especially with the same amount of inherent flexibility that the Rails solutions contain). Overall, my impression of wholesale rewrites as being soul-sucking experiences stands. I suggest they be approached with the greatest of care, and only be permitted after an appropriate period of psychological counselling. There is plenty of code that needs rewriting (but why do I always have to find it?) but replacing it by doing an rm -rf on the source tree and starting again is not the answer.

3 April 2006

Mike Beattie: A small side trip..

So, today, I've just arrived back from Sydney with a few of my fellow LCA 2006 organisers where we'd been attending the annual LCA Ghosts meeting. Next year, as you all know, LCA will be held at UNSW in Sydney, Australia. The venue looks great, and a lot of the ideas the Seven team have in the pipeline sound fantastic. If they pull a couple of them off, then this is going to be a fairly significant turning point in LCA growth. All things considered, this will make LCA 2007 even better than LCA 2006.. if that's even possible :). Raewyn also came along on this little trip, so that she could have a little holiday, and go shopping - also to add some stamps to her passport, she'd never been outside of New Zealand before.. One of her memorable comments was something like "That's really the Sydney Opera House, not just a postcard". She spent some of her time with the wife of one of the other 2006 organisers, who was there just for the shopping. This may not have been a good thing. We didn't get to do a whole lot together, since I was tied up for most of the weekend at Jeff and Pia's place. We did however manage to slip in a visit to see a good friend (bod, for those that know him), a BridgeClimb, a diamond ring, and a wander around the city on Sunday evening. I'd highly recommend the bridge climb, if you can manage to go around dusk, it's fantastic to watch the sunset in the west over the Blue Mountains. We also had a lovely dinner after the climb on Saturday with everyone else at James Squire Brewery down on the King St Wharf. I had the kangaroo - there's something pleasing about eating a national icon :) Yeah, for those of you that read that last paragraph and went "diamond ring?!? Wha?!".. I finally gave in, and proposed to Raewyn on the top of the Sydney harbour bridge. I'm still coming to terms with having a fianc , rather than just a girlfriend :). For those that are wondering, how do you take the ring up on the bridge, when you can't carry loose items? Well, it turns out it's not uncommon for guys to propose on the bridge.. So the BridgeClimb folk have this thing called an ERD - an Engagement Ring Device. Basically an elastic armband with a ribbon attached. The ring is placed over one side of the ribbon, and the two ends are placed through a small plastic toggle - like the one you have on your sleeping bag cover. When you are up on the bridge, you loosen the toggle, and place the ring on the appropriate finger, hold hands together, and slide the elastic from you to your (now) fianc . It's a bit hard to describe, but it works quite well. Anyway, This happened underneath what the Aussies call 'Blinky Bill' - the flashing red light on the top of the bridge used as a bit of a warning/navigation aid to aircraft. Our climb group were on the western arch of the bridge awaiting the descent, and the group behind were on the eastern arch after just arriving. Both erupted into applause, and cheering when I went down on one knee... quite an experience! The amusing anecdote of the whole thing was about 3-4 minutes later, as we were descending, Raewyn said "Oh my god, I'm engaged" - it had just sunk in.. At that dinner afterwards? We walked up to join the others, and they erupted into more applause and cheering, in front of the all the other diners.. Bastards. Right, now back to the real topic... The Seven crew really do have this LCA job all sorted out, and Sydney in January 2007 is the place to be.. Hell, even I'm tempted to put in a paper submission this time around - normally I'd try and avoid it! (I need to get back into this blogging thing again, it's so easy to just fall out of the habit when you get busy with other things.. I promise to try harder from now on!)

Erich Schubert: Skype incompatible with Gnome?

Skype (that shady VoIP application which may eventually turn your computer into a "supernode" and use it for forwarding dozens of calls, that is packed with tons of anti-debugging techiques and tries to be very very shifty) seems to be incompatible with my Gnome. With the gnome session-manager, to be precise. Because I can run skype, if I launch it using
SESSION_MANAGER= /usr/bin/skype
Anyway, if you want to use VoIP, please use a standard protocol such as SIP. German DSL providers will currently give you DSL modems for free when you sign up with them that have SIP built-in, and where you can attach your regular phone (even ISDN) and do least-cost-routing. Some even give you a flatrate to landlines with their DSL service. And Freemail providers such as Web.de, Freenet.de and SIP specialists such as SipGate offer you a true phone number for use with SIP for free. There is tons of SIP software available. Linux users might want to try kphone (for KDE), linphone (GTK) or ekiga (former GnomeMeeting, Gnome). All of which should be included in your favourite Linux distribution (okay, maybe except for ekiga which has licensing issues with the OPAL library) Windows users might want to check out (I havn't tried it myself) Gizmo. I bet there is OSX software, too. Tons.

2 April 2006

Erich Schubert: Read Feeders

... or feed readers, whatever. I'm currently using Liferea, and I've previously been using Straw for a long time. While both are okay, I consider liferea a bit more polished than straw (and it definitely has some functions like Extensions (aka filters) I really like. For example Heise only has a rather crippled feed (which doesn't even contain the teaser part of the article), so I grab the front page and convert it to a feed myself. And liferea allows you to group feeds together into one folder and read them like they were one feed. Very nice if you have a couple of comic strips which are each updated once a day, saves a couple of clicks. Straw also didn't have proper threading IMHO, so every now and then it was unresponsive while updating the feeds, especially at startup. However, straw at least did some caching of "attachments", which is very nice when you're using it to e.g. read some comic strips via RSS. Liferea doesn't cache any images, and this totally sucks. For example the Technorati icon it has for each entry is loaded again and again (or at least it always takes a second to be drawn... Oh, and depending on the rendering engine you use in liferea (gtkhtml or mozilla, I'd recommend the first) some keys may or may not function. Oh, and please don't suggest I try "blam". From what I've read it's rather minimalistic so far, and I don't like C#/Mono stuff.

1 April 2006

Florian Ragwitz: aircrack-ng hacking

Aircrack, one my favourite wifi tools, was quite dead for a while. Bad enough, but after I switched to the madwifi-ng driver recently I discovered that I can't do injection anymore, which is quite bad. I searched for a workaround and found aircrack-ng, a fork of aircrack, which has been made recently. There weren't much changes to the aircrack codebase yet, but at least everything works well with madwifi-ng now. Now, as aircrack seems to be moving again I mplemented some changes I always wanted to have, such as attack names (documentation patch) instead of attack numbers I could never remember and tried to get them submitted to upstream. What I normally do that situation is to check out the latest development version from the projects version control system, prepare a patch against it and send it to the development mailing-list afterwards. That's hardly possible with aircrack-ng. Not only that one or two persons are having a master copy of the code instead of using a nice, public accessibly version control system, but also the total lack of mailing-lists or any other possibility to coordinate development besides an IRC channel and a wiki, which is only partially editable, makes contributing quite hard. After announcing some of my patches on IRC several times one of the upstream developers finally took a look at it and said he applied it so it'll be released in the near future. I'm happy about that, but the deficits in the development process still exist. Therefor I offered to sponsor hosting, including mailing-lists, a version control system, a bug-tracking system and whatnot. It was thankfully declined as they already seem to have a hosting plan. Great! Unfortunately they don't have the money for that currently, but they at least have plan. Hooray for aircrack-ng.. Debian packages for the latest release already exist and should be upload in the next days, btw.

29 March 2006

James Morrison: Jelena

I'm an uncle again. This time Cheryl had a baby girl named Jelena. As for my life, I went for a run today with Ben. We figured a 4 mile run would be good. Well, that didn't work. We did 5.5 miles. That's the longest run I've ever done. It would not have been so bad if for two-thirds of it the soles of my shoes didn't have 2cm of mud attached to them. Now parts of my legs hurt as they should after some good exercise.

22 March 2006

Uwe Hermann: Debian on a Sun Sparc Ultra 10 - Lessons Learned

I recently had trouble installing/running Debian on my Sun Sparc Ultra 10. Lessons learned:
  1. There seems to be a huge crowd of people out there who own SPARCs (lots more than I would have expected)! I received tons of helpful comments, thanks everyone!
  2. Booting into single-user mode with "boot -s" requires you to enter the root password. However, you can use "boot -b", an undocumented feature, to do the equivalent of "init=/bin/sh". It doesn't quite work for me, I get "Cannot write to /foo/bar" errors (and I'm then asked to provide the root password, very funny), but that might be an unrelated problem...
  3. The problems I experienced (screen turns black, nothing happens) had a simple reason: there are two video cards in the box, but I only had a monitor attached to one of them. As things go, the bootloader used exactly the one where the screen was attached, but as soon as Debian started to boot, it would use the other video card. Which had no monitor attached. Hence I would not see anything. The installer was waiting for me to choose a keyboard layout and I was waiting for the installer to do just something... I suck. Solution: attach second monitor. Smarter solution: use some boot parameters to choose the video card I want to use (todo).
  4. None of the Debian boot images come with cfdisk or just plain fdisk (I tested businesscard, netinst, and the full install CD). Why? Do you use some other tool on SPARCs? Which?
  5. I cannot seem to mount my disks. There's no /dev/hda* (should I create them with mknod?) and trying to mount /dev/ide/* fails with some strange errors. I guess I need to read more docs, both SPARC-related as well as udev-related.
In related news: Sun has released the design of the OpenSparc T1 under the terms of the GPL. Great news, thanks Sun!

19 March 2006

Clint Adams: This report is flawed, but it sure is fun

91D63469DFdnusinow1243
63DEB0EC31eloy
55A965818Fvela1243
4658510B5Amyon2143
399B7C328Dluk31-2
391880283Canibal2134
370FE53DD9opal4213
322B0920C0lool1342
29788A3F4Cjoeyh
270F932C9Cdoko
258768B1D2sjoerd
23F1BCDB73aurel3213-2
19E02FEF11jordens1243
18AB963370schizo1243
186E74A7D1jdassen(Ks)1243
1868FD549Ftbm3142
186783ED5Efpeters1--2
1791B0D3B7edd-213
16E07F1CF9rousseau321-
16248AEB73rene1243
158E635A5Erafl
14C0143D2Dbubulle4123
13D87C6781krooger(P)4213
13A436AD25jfs(P)
133D08B612msp
131E880A84fjp4213
130F7A8D01nobse
12F1968D1Bdecklin1234
12E7075A54mhatta
12D75F8533joss1342
12BF24424Csrivasta1342
12B8C1FA69sto
127F961564kobold
122A30D729pere4213
1216D970C6eric12--
115E0577F2mpitt
11307D56EDnoel3241
112BE16D01moray1342
10BC7D020Aformorer-1--
10A7D91602apollock4213
10A51A4FDDgcs
10917A225Ejordi
104B729625pvaneynd3123
10497A176Dloic
962F1A57Fpa3aba
954FD2A58glandium1342
94A5D72FErafael
913FEFC40fenio-1--
90AFC7476rra1243
890267086duck31-2
886A118E6ch321-
8801EA932joey1243
87F4E0E11waldi-123
8514B3E7Cflorian21--
841954920fs12--
82A385C57mckinstry21-3
825BFB848rleigh1243
7BC70A6FFpape1---
7B70E403Bari1243
78E2D213Ajochen(Ks)
785FEC17Fkilian
784FB46D6lwall1342
7800969EFsmimram-1--
779CC6586haas
75BFA90ECkohda
752B7487Esesse2341
729499F61sho1342
71E161AFBbarbier12--
6FC05DA69wildfire(P)
6EEB6B4C2avdyk-12-
6EDF008C5blade1243
6E25F2102mejo1342
6D1C41882adeodato(Ks)3142
6D0B433DFross12-3
6B0EBC777piman1233
69D309C3Brobert4213
6882A6C4Bkov
66BBA3C84zugschlus4213
65662C734mvo
6554FB4C6petere-1-2
637155778stratus
62D9ACC8Elars1243
62809E61Ajosem
62252FA1Afrank2143
61CF2D62Amicah
610FA4CD1cjwatson2143
5EE6DC66Ajaldhar2143
5EA59038Esgran4123
5E1EE3FB1md4312
5E0B8B2DEjaybonci
5C9A5B54Esesse(Ps,Gs) 2341
5C4CF8EC3twerner
5C2FEE5CDacid213-
5C09FD35Atille
5C03C56DFrfrancoise---1
5B7CDA2DCxam213-
5A20EBC50cavok4214
5808D0FD0don1342
5797EBFABenrico1243
55230514Asjackman
549A5F855otavio-123
53DC29B41pdm
529982E5Avorlon1243
52763483Bmkoch213-
521DB31C5smr2143
51BF8DE0Fstigge312-
512CADFA5csmall3214
50A0AC927lamont
4F2CF01A8bdale
4F095E5E4mnencia
4E9F2C747frankie
4E9ABFCD2devin2143
4E81E55C1dancer2143
4E38E7ACFhmh(Gs)1243
4E298966Djrv(P)
4DF5CE2B4huggie12-3
4DD982A75speedblue
4C671257Ddamog-1-2
4C4A3823Ekmr4213
4C0B10A5Bdexter
4C02440B8js1342
4BE9F70EAtb1342
4B7D2F063varenet-213
4A3F9E30Eschultmc1243
4A3D7B9BClawrencc2143
4A1EE761Cmadcoder21--
49DE1EEB1he3142
49D928C9Bguillem1---
49B726B71racke
490788E11jsogo2143
4864826C3gotom4321
47244970Bkroeckx2143
45B48FFAEmarga2143
454E672DEisaac1243
44B3A135Cerich1243
44597A593agmartin4213
43FCC2A90amaya1243
43F3E6426agx-1-2
43EF23CD6sanvila1342
432C9C8BDwerner(K)
4204DDF1Baquette
400D8CD16tolimar12--
3FEC23FB2bap34-1
3F972BE03tmancill4213
3F801A743nduboc1---
3EBEDB32Bchrsmrtn4123
3EA291785taggart2314
3E4D47EC1tv(P)
3E19F188Etroyh1244
3DF6807BEsrk4213
3D2A913A1psg(P)
3D097A261chrisb
3C6CEA0C9adconrad1243
3C20DF273ondrej
3B5444815ballombe1342
3B1DF9A57cate2143
3AFA44BDDweasel(Ps,Gs) 1342
3AA6541EEbrlink1442
3A824B93Fasac3144
3A71C1E00turbo
3A2D7D292seb128
39ED101BFmbanck3132
3969457F0joostvb2143
389BF7E2Bkobras1--2
386946D69mooch12-3
374886B63nathans
36F222F1Fedelhard
36D67F790foka
360B6B958geiger
3607559E6mako
35C33C1B8dirson
35921B5D8ajmitch
34C1A5BE5sjq
3431B38BApxt312-
33E7B4B73lmamane2143
327572C47ucko1342
320021490schepler1342
31DEB8EAEgoedson
31BF2305Akrala(Gs)3142
319A42D19dannf21-4
3174FEE35wookey3124
3124B26F3mfurr21-3
30A327652tschmidt312-
3090DD8D5ingo3123
30813569Fjeroen1141
30644FAB7bas1332
30123F2F2gareuselesinge1243
300530C24bam1234
2FD6645ABrmurray-1-2
2F95C2F6Dchrism(P)
2F9138496graham(Gs)3142
2F5D65169jblache1332
2F28CD102absurd
2F2597E04samu
2F0B27113patrick
2EFA6B9D5hamish(P)3142
2EE0A35C7risko4213
2E91CD250daigo
2D688E0A7qjb-21-
2D4BE1450prudhomm
2D2A6B810joussen
2CFD42F26dilinger
2CEE44978dburrows1243
2CD4C0D9Dskx4213
2BFB880A3zeevon
2BD8B050Droland3214
2B74952A9alee
2B4D6DE13paul
2B345BDD3neilm1243
2B28C5995bod4213
2B0FA4F49schoepf
2B0DDAF42awoodland
2A8061F32osamu4213
2A21AD4F9tviehmann1342
299E81DA0kaplan
2964199E2fabbe3142
28DBFEC2Fpelle
28B8D7663ametzler1342
28B143975martignlo
288C7C1F793sam2134
283E5110Fovek
2817A996Atfheen
2807CAC25abi4123
2798DD95Cpiefel
278D621B4uwe-1--
26FF0ABF2rcw2143
26E8169D2hertzog3124
26C0084FCchrisvdb
26B79D401filippo-1--
267756F5Dfrn2341
25E2EB5B4nveber123-
25C6153ADbroonie1243
25B713DF0djpig1243
250ECFB98ccontavalli(Gs)
250064181paulvt
24F71955Adajobe21-3
24E2ECA5Ajmm4213
2496A1827srittau
23E8DCCC0maxx1342
23D97C149mstone(P)2143
22DB65596dz321-
229F19BD1meskes
21F41B907marillat1---
21EB2DE66boll
21557BC10kraai1342
2144843F5lolando1243
210656584voc
20D7CA701steinm
205410E97horms
1FC992520tpo-14-
1FB0DFE9Bgildor
1FAEEB4A9neil1342
1F7E8BC63cedric21--
1F2C423BCzack1332
1F0199162kreckel4214
1ECA94FA8ishikawa2143
1EAAC62DFcyb---1
1EA2D2C41malattia-312
1E77AC835bcwhite(P)
1E66C9BB0tach
1E145F334mquinson2143
1E0BA04C1treinen321-
1DFE80FB2tali
1DE054F69azekulic(P)
1DC814B09jfs
1CB467E27kalfa
1C9132DDByoush-21-
1C87FFC2Fstevenk-1--
1C2CE8099knok321-
1BED37FD2henning(Ks)1342
1BA0A7EB5treacy(P)
1B7D86E0Fcmb4213
1B62849B3smarenka2143
1B3C281F4alain2143
1B25A5CF1omote
1ABA0E8B2sasa
1AB474598baruch2143
1AB2A91F5troup1--2
1A827CEDEafayolle(Gs)
1A6C805B9zorglub2134
1A674A359maehara
1A57D8BF7drew2143
1A269D927sharky
1A1696D2Blfousse1232
19BF42B07zinoviev--12
19057B5D3vanicat2143
18E950E00mechanix
18BB527AFgwolf1132
18A1D9A1Fjgoerzen
18807529Bultrotter2134
1872EB4E5rcardenes
185EE3E0Eangdraug12-3
1835EB2FFbossekr
180C83E8Eigloo1243
17B8357E5andreas212-
17B80220Dsjr(Gs)1342
17796A60Bsfllaw1342
175CB1AD2toni1---
1746C51F4klindsay
172D03CB1kmuto4231
171473F66ttroxell13-4
16E76D81Dseanius1243
16C63746Dhector
16C5F196Bmalex4213
16A9F3C38rkrishnan
168021CE4ron---1
166F24521pyro-123
1631B4819anfra
162EEAD8Bfalk1342
161326D40jamessan13-4
1609CD2C0berin--1-
15D8CDA7Bguus1243
15D8C12EArganesan
15D64F870zobel
159EF5DBCbs
157F045DCcamm
1564EE4B6hazelsct
15623FC45moronito4213
1551BE447torsten
154AD21B5warmenhoven
153BBA490sjg
1532005DAseamus
150973B91pjb2143
14F83C751kmccarty12-3
14DB97694khkim
14CD6E3D2wjl4213
14A8854E6weinholt1243
14950EAA6ajkessel
14298C761robertc(Ks)
142955682kamop
13FD29468bengen-213
13FD25C84roktas3142
13B047084madhack
139CCF0C7tagoh3142
139A8CCE2eugen31-2
138015E7Ethb1234
136B861C1bab2143
133FC40A4mennucc13214
12C0FCD1Awdg4312
12B05B73Arjs
1258D8781grisu31-2
1206C5AFDchewie-1-1
1200D1596joy2143
11C74E0B7alfs
119D03486francois4123
118EA3457rvr
1176015EDevo
116BD77C6alfie
112AA1DB8jh
1128287E8daf
109FC015Cgodisch
106468DEBfog--12
105792F34rla-21-
1028AF63Cforcer3142
1004DA6B4bg66
0.zufus-1--
0.zoso-123
0.ykomatsu-123
0.xtifr1243
0.xavier-312
0.wouter2143
0.will-132
0.warp1342
0.voss1342
0.vlm2314
0.vleeuwen4312
0.vince2134
0.ukai4123
0.tytso-12-
0.tjrc14213
0.tats-1-2
0.tao1--2
0.stone2134
0.stevegr1243
0.smig-1-2
0.siggi1-44
0.shaul4213
0.sharpone1243
0.sfrost1342
0.seb-21-
0.salve4213
0.ruoso1243
0.rover--12
0.rmayr-213
0.riku4123
0.rdonald12-3
0.radu-1--
0.pzn112-
0.pronovic1243
0.profeta321-
0.portnoy12-3
0.porridge1342
0.pmhahn4123
0.pmachard1--2
0.pkern3124
0.pik1--2
0.phil4213
0.pfrauenf4213
0.pfaffben2143
0.p21243
0.ossk1243
0.oohara1234
0.ohura-213
0.nwp1342
0.noshiro4312
0.noodles2134
0.nomeata2143
0.noahm3124
0.nils3132
0.nico-213
0.ms3124
0.mpalmer2143
0.moth3241
0.mlang2134
0.mjr1342
0.mjg591342
0.merker2--1
0.mbuck2143
0.mbrubeck1243
0.madduck4123
0.mace-1-2
0.luther1243
0.luigi4213
0.lss-112
0.lightsey1--2
0.ley-1-2
0.ldrolez--1-
0.lange4124
0.kirk1342
0.killer1243
0.kelbert-214
0.juanma2134
0.jtarrio1342
0.jonas4312
0.joerg1342
0.jmintha-21-
0.jimmy1243
0.jerome21--
0.jaqque1342
0.jaq4123
0.jamuraa4123
0.iwj1243
0.ivan2341
0.hsteoh3142
0.hilliard4123
0.helen1243
0.hecker3142
0.hartmans1342
0.guterm312-
0.gniibe4213
0.glaweh4213
0.gemorin4213
0.gaudenz3142
0.fw2134
0.fmw12-3
0.evan1--2
0.ender4213
0.elonen4123
0.eevans13-4
0.ean-1--
0.dwhedon4213
0.duncf2133
0.ds1342
0.dparsons1342
0.dlehn1243
0.dfrey-123
0.deek1--2
0.davidw4132
0.davidc1342
0.dave4113
0.daenzer1243
0.cupis1---
0.cts-213
0.cph4312
0.cmc2143
0.clebars2143
0.chaton-21-
0.cgb-12-
0.calvin-1-2
0.branden1342
0.brad4213
0.bnelson1342
0.blarson1342
0.benj3132
0.bayle-213
0.baran1342
0.az2134
0.awm3124
0.atterer4132
0.andressh1---
0.amu1--2
0.akumria-312
0.ajt1144
0.ajk1342
0.agi2143
0.adric2143
0.adejong1243
0.adamm12--
0.aba1143

18 March 2006

Daniel Burrows: Windows stupidities

As I've had to use Windows on a daily basis, I've found that I am no longer able to maintain my air of detached tolerance for the foibles of the system. In fact, I'm starting to get really infuriated with the utter boneheadedness of so many facets of it. Not so much things that are broken, as things that are done badly, and done so in the face of widespread examples of how to do it right.

Here are two simple examples that are emblematic of what Windows users have to suffer through.

(a) Mandatory file locks.

On Windows, every access to a file, by default, acquires a mandatory lock on it. Want to recompile the program you're working on? Sorry, you have to track down and kill all its running instances. Want to read that file on the network server? Sorry, you'll have to run around the office and ask all the people using it to close it.

Last week I got an email asking me to unlock a directory on our local fileserver so it could be renamed. It turned out that I was running an acroread process to view a PDF file...and that locked the directory from being renamed. Because, of course, the universe would implode if someone were to rename a file I had already loaded into memory. This is, however, better than how shared libraries are treated; trying to register a new version of a shared library with the system (the Windows version of ldconfig) will silently fail if programs have the old version mapped into memory. WTF? No, really, WTF?

Windows users get around this by having tools to find out which processes have a file open so they can terminate them with extreme prejudice. This is considered normal and acceptable behavior for a computer in the Windows universe. After all, in the real world two people can't use the same document at once, so why should they be able to do so on a computer?

(b) C# events.

They've been invented many times. Signals, events, hooks, whatever you want to call them, they're collections of function objects that are invoked when some particular condition occurs. It's a great way to make it easy to connect together objects that don't know about each other, they're simple enough that your average CS sophomore could implement them in a half hour, and the concept is so obvious (besides having dozens of examples of working and deployed implementations) that there's no way to screw it up, right?

Wrong.

Now, C# is generally a somewhat clunky language, but this is nothing to do with that (I am not, for instance, surprised that it's cumbersome to bind extra parameters to an event in a language that has little support for higher-order programming anyway). No, this is one of those utter idiocies that just make you scratch your head and go what the *@&# were they on when they did that? You see, when you call an event with no attached listeners, C# throws an exception. Just, you know, as a friendly way of letting you know that you didn't connect to that event.

But wait! It gets better! In order to test whether the event has any connected delegates (the Microsoft term for a function object), you ... compare it to the null pointer. Yes, that's right. Every time you call an event, you have to do this:

if(Event != null)
    Event();


...because, of course, an empty collection of events is clearly the same thing as a nonexistant object.

I really wish I could be a fly on the wall at the meeting where this was decided. My imagination supplies a scene along these lines:


Scene: A smoke-free office somewhere deep in the sterile labyrinth of the Microsoft campus

Programmer 1: "...and we call this bold new innovation 'events'! It's a way for you to perform method calls without knowing which method you're calling. We've found that it's amazingly useful when doing UI programming. I'm sure that introducing this new idea to the world will be yet another chapter in the Microsoft story of advancing technology!"

Programmer 2: "Have you checked the corner cases? What happens if there is no method available to call?"

Programmer 1: "Oh, of course! In that case, the list of methods is null, so we throw a NullPointerException. We thought about adding an IsEmpty property, but who would want to look up properties on the null pointer? Besides, hardly anyone will ever want to create an event that might not get connected to."

Programmer 2: "Uhhh, sure, that makes sense to me."


...!!!?!?!?!

Christian Perrier: DADVSI law: the infamous VU amendment voted

Sad day for Free Software. The so-called VU/SACEM/BSA (for Vivendi-Universal/French Artists Societey/Bullshit Software Alliance) amendment to the DADVSI law presented by the French government has been voted. For details about DADVSI, see EUCD.info web site. This amendment says (bad English translation of course): "(Est) puni de trois ans d'emprisonnement et de 300.000 euros d'amende le fait de mettre sciemment la disposition du public ou de communiquer au public, sous quelque forme que ce soit, un logiciel manifestement destin la mise disposition du publ (une copie?) non autoris e d'oeuvres ou d'objets prot g s." "The fact of voluntarily make available to the public or communicate to the public, in any possible way, software obviously intended for making available to the public an unauthorized copy of protected work shal be punished by 3 years jail and 300.000 euros fine". (again sorry for the bad legalese English...). People interested may read this very complete analysis (in English) from the EUCD.info site. In short, as it has been written for instance by Sun France Head Security Officer, Gilles Gravier, this bans a vast majority of free software such as BitTorrent, Apache, FTP servers and the like. I think you get the point. It seems time for Debian to think about dropping French mirrors....and for French free software authors to emigrate (which I'll never do....I have too much attachment for this country anyway).

Next.

Previous.