20050226

Consumption frenzy

Got the books! Yay!

Quickly read Money 201 and managed to be uplifted and depressed at the same time. Looks like I've been doing many things right, but a few wrong. Unfortunately, to do those things right, I'll require more money. Or slack off on pre-paying parts of the mortgage. But I hate paying interest, regardless of what finance books say. I should write my own book, maybe.

Read Exceptional C++ style rather quickly. I feel relatively good about it--it's a good book, and it looks like I'm not too rusty. But, to my dismay, I'm also not that interested in all those dark corners anymore (something I've alluded to in previous posts). Still, I wish the "smaller language screaming to get out" Bjarne Stroustrup mentioned when talking about C++ would come to light. The closest I've found so far is Python, and its library is growing a bit messy.

Speaking of libraries, I've had the opportunity to look in the Java libraries for a few things. I was trying to get some substring appends to be efficient. Unfortunately, StringBuffer does not have an append(String, int, int) operation--only an append(char[], int, int) operation. So I had to call substring() (which is bad, but better from a garbage generation point of view than toCharArray() or whatever it's called). Man, I wish for the nth time I could get access to the internal array. Actually, StringBuffer could, if the String's array were package-private, and in my view, this would be a very sensible design.

Anyhow, I look around for a solution, and it looks like Writer has a substring write operation. So, I think, maybe I can change my code to work through a writer instead. But, being curious, I wonder if they just go through the whole array char-by-char, or maybe chunk stuff in a pooled buffer.

The answer is: none of the above. They call substring().

Also annoying, they don't let you create a StringWriter on an existing StringBuffer, but you have access to the underlying StringBuffer anyhow. This is incredibly non-symmetrical and quite stupid.

Coming from the C++ world, I find myself constantly annoyed by the sheer lack of rigor in the design of the core parts of the Java libraries. Newer parts (such as the Collections system) show more care, but some very fundamental classes (such as java.lang and java.io classes) show sloppiness. So, you get new classes that have better concepts, such as java.nio and Collections. But what can they do about String? It's such a fundamental type, and yet they give no way to easily extend it. You can't even access the internal array. Of course, that's done for safety reasons (so nobody can modify the string in place, since the string is supposed to be immutable), but you can still access it anyhow with reflection and a custom class loader. Worse, as far as I can tell from the StringBuffer code, it's not as efficient as it could be, because it goes through the public interface of the string object.

This may sound like a nit, but efficient string manipulation is extremely important. You want to have a language that lets you do as much as you can with as few temporary buffers as possible. Especially when object allocation and garbage collection are as slow as in many JVMs. I've had many sites run out of memory because they did extra copies of incoming requests and outgoing responses. Granted, they shouldn't do that, but given the API provided, it's the most natural way. I mean, I keep seeing (and writing!) code that does such things as "string("+s+")" even though it's inefficient. If it's inefficient, why is it the most natural way of doing things? At least, in C++, the compiler has a chance to collapse the temporaries! The specifications of the Java language prevent any sort of optimization for this construct. Bad.


Rant aside, I got one other thing--Xenosaga II. So far, I like it, although I couldn't fully believe it when they asked me to switch disks (I was a mere 8 hours in the game...). I hope the second disk is a bit longer. A lot of online reviews have complained how it's tedious and so on, but if they had a bit of a longer memory, they'd recall that Xenogears was pretty much the same. This new game feels more like the original Xenogears, with its long dungeons and somewhat higher level of difficulty. There's very few boss fights I finished in a singly try; I usually get killed at least once. This is a refreshing change from most modern RPGs, like Final Fantasy X-2 (which never felt very difficult--you have so much flexibility with jobs, and changeover is so fast, that it's hard to get stuck in an attrition battle with your enemy).

A couple of things are somewhat suboptimal with the game, though. First, I don't know why they messed with KOS-MOS' voice acting. It was excellent in the first Xenosaga, perfectly neutral and emotionless, except for a few (intentional) occasions. The new acting varies, going between somewhat neutral and somewhat whining. It just doesn't work; KOS-MOS is supposed to kick ass, not whine.

I'm also annoyed by the poor treatement they gave Yuki Kajiura's soundtrack. It's an awesome soundtrack, but in the game, the tracks are often cut before they finish (unforgiveable in a game that uses voice acting! The player does not control the rate of delivery, so efforts should be made to time the script to the music; Xenosaga I pulled it off much better), cover them with too much sound effects (disminishing their impact), and sometimes use them in strange contexts. How dare they make Kajiura's work sound so bland!

Load time in combat isn't that wonderful either. However, it's possible to level up relatively quickly, which puts a lot of tedium out of it. I prefer to have less more-difficult fights than to have to fight weak enemies 100 times to level up (like I've done often in FF VII). I might as well put a rubber band on the "O" button if I'm going to do that. I prefer games to treat me like a thinking being than like an automaton who just presses "O".

On the plus side, the fact that there's almost no segments with no BGM helps me enjoy the game quite a bit. The non-movie soundtrack is nothing really earth-shattering, but some tracks are very, very solid. Unlike many reviewers, I don't think it was a mistake to move from a symphonic soundtrack to a synthetic one. Symphonic soundtracks are popular in SF themes, mostly due to Star Wars and Star Trek. But synthetic soundtracks can work well, too--witness early Babylon 5. It's a matter of balance. Strong melodies should accent strong points, and trance-like tracks should be used for BGM in more repetitive parts.

And you gotta love the new character models. Too bad the hands are done with a thumb, index and block containing the three remaining fingers, all the time. That trick is used in Final Fantasy X and X-2 when there's too many characters in the scene, but Xenosaga II uses it all the time. It's a bit sloppy. But the nice face models and expressions make up for it.

I'll post a full review when I've finished the game. Which, at the rate I'm playing, will probably be next week-end or so.

20050217

Not so humbling after all, to humanity's great sorrow

OK, so I was really tired yesterday. Turns out I had good reasons to abstract file lookup: I needed to do easy unit tests. Granted, I could have mocked a ServletContext, but I think it's cleaner this way. So, much to everyone's chagrin, I'm not really humbled by my experience.

I have, however, discovered the benefit of a good night's sleep, yet again. Something I won't get next Tuesday because I have to go to the dentist. How this is interesting to you I have no idea, but you never know!

In other news, the guys at work are making fun of my work habits and love of mechanical keyboards1. They are mean to me. But then again, I complain all the time, so I suppose I deserve it.


1 The text in the picture is in french, and reads "Directly from the Espace Logient/Benoit Goudreault Emond/Concerto in Mechanical Keyboard/And Bouts of Anger". This is a loose translation, but it's probably accurate enough. "Espace Logient" is a pun on a show room in Montreal known as "l'Espace Go" (which is, by the way, quite a nice show room).

20050216

Humbling Experience

You know how it becomes customary for all software developers to whine about everyone else's code. Too complex. Too convoluted. Ad nauseam.

Well, read your own code.

Today, I was trying to retrofit some local file-reading capabilities in a system that was mostly meant to read stuff off of a network request. Since the network request bits are semi-auto-configured, I wanted the same capabilities for the local file-reading stuff. So, made an interface. This removed some bindings between the system and the application framework. Made it cleaner, more standalone, etc etc.

Then, in the bus, it hit me: bad idea. The system is completely dependent on the application framework anyways, because database tables/file names/etc. are all done according to an implicit convention that cannot be found outside said framework. So, all this wonderful isolation just made things more complex for no reason whatsoever. At worse, I should ask callers to supply the appropriate framework object and use it directly; if I need abstraction later, I can always put it there--later. Given that it's code for more junior programmers, why make it more complex than it needs to be? It's already a bit complex with a singleton spawning a query engine, which spawns a stateful query and a result.

In my defence, I got very little sleep yesterday :-)

In other news, I just ordered bunch of books from Amazon.ca. If you want some software-engineering-related or C++-related books, they have killer rebates right now (50% off selected books). Some of the books on sale are not that great (if I see one more "Enterprise Java with xyz" book, I'm going to hurl), but some others are the Herb Sutter classics, and some rather new books on working with legacy code and configuration management. I got myself the Sutter classic I didn't have, and "Working with Legacy Code", which is something I really need to read RFN. Especially since today, I was writing, effectively, legacy code, and it was my fault.

Also ordered a personal finance book, because it's tax season right now, and my new financial adviser seems to be determined in making me feel inferior. But looking back with a cool head, my gut feeling is that, besides a little bit of neglect (mostly money stuck in an ING account instead of invested in, say, a dividends fund), I've done pretty well. Probably the advisor's tactic was merely to try to sell me a credit line, something which I'm not really open to.

Finally, I realized, to my disappointment, that cool template tricks don't really do it for me anymore. I had the chance to get the Template Metaprogramming book 50% off, and I passed. It looks cool, but I have very dim hopes that I'll get to use it, because:

  1. It tortures compilers, including G++, and
  2. I don't think I'll ever be allowed to use this stuff except in a few toy or hobby projects, because it'll be very hard for any company I ever work for to find people able to understand this stuff.

In many companies, there's a "language guru" and a number of journey(wo)men. I've seen few places where there are many gurus (though Silanis was one of them at a time), and even then, they're hampered by management's fears that nobody will be able to figure out the code. A very sane fear in some ways, but not as much as one would think when you realize that code written by non-gurus tends to be as obscure as guru-code, except it's not because of mere technical proficiency reasons!

I also realized today that what I'd really like would be to rewrite my current company's codebase all in Python. But then, I'm sure nobody would want it, even though Python is easy, because we hired Java programmers, of course. Everyone's so damn specialized.

Well, that was today's rant. I need sleep. Especially since re-reading my previous lines makes me realize that the experience is having less and less of a humbling effect as I get riled up...

20050208

Whither Moore's law's application to everyday computing?

An interesting article: Where have my cycles gone?.

This article asks the question I've asked myself for the longest time.

Nowadays, it's not as bad, because I run Linux on my home computer. I have, therefore, a good idea where my cycles have gone. The computer is pretty snappy at this time (well, it is an AMD Athlon XP 2000+, but there's a mere 256 MB of RAM), despite how much resolution I drive it with, how much anti-aliasing I've added, and how many background services I run.

But whenever I use a Windows XP computer, a Java application, or even some Linux desktops (those with GNOME or KDE come to mind... I use XFce which avoids much of the madness), I really wonder: given Moore's law, how come many tasks appear to be slower than they ever have been?

The author cites some understandable reasons. Here's my take on reasons I do not understand.

  1. Incorrect algorithms: somewhere, programmers have gotten really sloppy. Trying to sort linked lists with a classical quicksort (hint: don't!), running through data structures many times in an effort to work on the data where a single pass would work, doing all sort of really stupid things to help performance (such as adding cache to an O(n2) algorithm that could really be done in O(nlog2n)), and so on and so forth. I'm always suprised (in a bad way) at how many things are done with such sloppy algorithms. If the programmer would just think for a few seconds, it would avoid such problems. Complexity problems like this are usually trivial on small data sets, but what if your small data set is the set of pixels in the GUI blit routines that get used all the time, hmmm?
  2. Wrongheaded ideas: some OSs and applications have patently bad ideas at their core. Like searching stuff frequently that is not indexed. Like putting files all over the disk and expecting the filesystem to have an efficient lookup algorithm tailored to your application. Like opening multiple database transactions where everything should be done in one (this is bad for performance, but also for data integrity). The list goes on. I see this in commercial software all the time. I can think of no fundamental reason why system applications would be in a better state, given that they are marketed nearly the same way as user applications (which, IMHO, is really wrongheaded!). User applications, of course, have all those problems. Yuck.
  3. Speed/memory tradeoffs: for some reason, everybody got drilled into them that you should always save cycles in priority to memory. So people read the whole file in memory and cursor through it with pointer operations. So they put stuff in sparse hash tables where a sorted array would do and give significantly similar performance characteristics. So they introduce lots of caches to gain a small 5% increase in performance. It doesn't work, and here's why. Today's systems are usually starved for IO time or for memory; CPU is rarely running at 100% while you work (take a look at a system monitor or at the Windows Task Manager during the day; you may be very surprised at what your computer is doing). As people try to run several programs at once and get them resident, the problem worsens. Once physical memory is exhausted, the system becomes starved for IO time as the OS needs to swap stuff. If you get in this situation, it will always be much slower than the "slower" algorithm that uses almost no memory. There's also an interesting effect I've seen in some cases: due to CPU cache effects and the importance of keeping a working set small so it's most effective, larger uses of memory may be detrimental for performance in many situations, even if the OS isn't starved for RAM.
  4. Memory/resource leaks: they're everywhere. Garbage collected languages are great, but they shouldn't be taught as the first language. People who learned on garbage collected languages tend to think that the garbage collector takes care of all resource allocation. Hate to break it to you, kids: it only takes care of memory allocation, and on top of that, if you keep references to an object too long (like in caches...that thing again!), it never gets collected. Garbage collection is no excuse to be sloppy about object ownership. See previous point on why resource leaks eat up time.
  5. Freakin' objects everywhere and the lack of stack allocation: this is mostly a problem for language like Java, which couples an asinine lack of stack allocation for simple objects with a really slow allocator and garbage collector. Mix in a really high per-object allocation overhead (all object get a condition variable and a vtable, whether they need it or not!) and you've got a recipe for high temporary memory usage. That would be OK if the Java VM contracted its memory use once in a while. But NOOO! I sometimes think those who wrote the JVM have disregarded 30 years of computing, both in VM design and in garbage collection algorithms. I can think of no other reason that would explain how they could deliver such a ridiculous JVM 1.0. And I still don't understand how many of my Python scripts have more predictable performance than many of my Java programs, despite the JIT and the fact that the Python programming model does not lend itself to much optimization.
  6. Buzzword mania: why is it that we need EJB? Do you do transactions across multiple databases? Do you really need to distribute your objects (remember the first law of distributed computing: don't distribute your objects)? Replace EJB and related questions with buzzword of the month. Many products are built with technologies that don't really fit the problem, increase complexity, memory use, and decrease performance, for no visible gain in capabilities. This is really dumb. See my earlier article on why software projects fail.

Is that it? Probably not. But I think it covers a lot of things. If you're studying in CS or Comp. Eng., I really recommend that you do the following:

  1. Study algorithms. Know the main ones. Know which data structures have what complexity guarantees. This will help you choose the right structure and algorithm for the right job.
  2. Pay attention to the more low-level classes. Assembly looks like pre-history, but the principles of how machines work will always remain useful. C and C++ feel like nailing your toes to the desk in an awkward position, but you'll learn to be careful about resource ownership, and that's a valuable skill regardless of the language.
  3. Remain skeptical of those who claim your designs aren't "elegant" enough. There's always a sweet spot; but in any case, a design with less code will almost always be more elegant from a maintainability, understandability, and from a performance point of view as well. In my experience, university "elegant" means "complicated". It's cool looking, full of design patterns and objects and inheritance. But when 60% of what you typed is syntactic and semantic sugar, you'll end up with a mess sooner or later. And that will make it harder to figure out whether you picked the right algorithm. Don't misunderstand: elegant design does exist. But you'll have to develop your own sense of it. The understanding of elegant design in academic circles varies widely. Be especially wary of teachers who don't code, or instructors who never had to maintain any of their projects. Design sense mostly comes from learning what not to do by having done it and being stuck maintaining it.
  4. Remain humble when you're about to do some task. You may be smart enough to implement the equivalent of a database by hand; but why take the chance? And even if you're smart enough, keep in mind you don't really have the time anyhow. Solved problems may be fun to solve again, but good commercial-grade code is always developed with time pressure. Time you spend on your fun problem will be taken away from time you should spend making the overall system design maintainable.
  5. Try to understand what you're doing. Try to understand the libraries you're using, at least in a general way. Otherwise, it's going to be very hard to pick a given routine (or even a given method overload!) over another.

Well, that's my advice, for what it's worth. I just realized that a lot of it applies to people who already program professionally, and I can think of a few people who don't follow this advice. I know I try to follow it carefully, and it served me well so far. I've been programming commercially for nearly 5 years, and as a hobbyist since I'm 14, so I like to think that I've learned a few things at this point. I'm sure there are other things programmers should be careful of, but those I've noted in this post are supposedly 'obvious' and people still don't do it.

Hence this rant.

Hopefully, if people apply those, Moore's law's application to everyday computing, in the form of faster, more capable computers with the ability to do more for their users, will become reality.

20050129

Bela Lugosi Night

For christmas, I got a pair of DVDs from the "classic horror movies collection". Given by none other than my very cool parents, who know how to humour my strange tastes.

Today, I was feeling sort of lousy, so after the grocery run (well, I went to the mall, but nothing really inspired me, except a miniature plunger for my bathroom sink... how exciting), I curled on the sofa and listened to a couple of movies, both starring Bela Lugosi.

For those not knowing Bela Lugosi, he's an actor who played in many 40's horror movies. But his main claim to fame in modern cinematography is probably his partial participation in one of the worse movies ever made, Plan 9 From Outer Space by director Ed Wood. Lugosi was slated to play the head vampire, but he died early in the making of the movie. Ed Wood, ever the optimist, replaced him with a much taller man who had a different face and had the replacement cover his face with a cape for the whole movie. If you haven't seen Plan 9, you should; it's quite bad, but so bad it's sort of good. Ed Wood by Tim Burton is worth seeing as well; it's a not-quite-documentary on the making of Plan 9

Anyhow, for those reasons, Bela Lugosi is known to me. But the only movie I've seen him in was Plan 9, which doesn't count.

Hence: The Devil Bat. Nutty doctor bitter about some rich man making a fortune on his discoveries (the doctor cashed out instead of getting a stake in the company) invents a way to make bats gigantic using electric current (???). He conditions the bats to hate the smell of a particular aftershave he's developing. He then distributes the aftershave freely to members of the rich man's family and sics the bat on them.

It's a harmless movie. Special effects are especially laughable, but it was made in 1949. Though they could have been more careful about some things, like the bat-flying-out-the-window shot where the window is obviously NOT the window we saw open (the bricks don't have same texture, etc). There's some priceless Lugosi acting (meaning, quite exaggerated) like replying to "goodnights" from his intended victims with "goodbye Mr. insert name here". A rather silly subplot of the hero's assistant trying to woo the rich man's daughter's French maid. And the rather unnatural switch of the female lead's affections from her murdered intended to the hero (man--it's like it's the most natural thing in the world!)

That said, it's too bad such movies don't really have a soundtrack, because some parts run a bit long and dry.

Then, I listened to The Human Monster. Unfortunately, sound quality was somewhat poor, as it's a really old movie. Lugosi exaggerates his expressions even more than in the other movie, and his face just screams "villain!" all over the place. I found that movie a bit less enjoyable, although it's definitely more serious and more care was put into it. I guess it's just too serious--old horror movies should be cheesy. But as far as it goes, it's not that bad a movie, with a pretty predictable plot, but some relatively well-scripted moments. Keep in mind I'm no movie expert. Unfortunately for me, who wanted to look at a Lugosi flick, he gets less face time here. I must admit, though, that I found the scene where he puts the female lead in a straightjacket and drowns a man in front of her quite tense and effective.

Looking at old movies like this is an interesting experience. You realize that modern movies have more technical means, but their plots stink--they're as predictable as those old things, and often play on the same themes (there are exceptions, but there were exceptions then as well). You realize that while attitudes towards women have changed on the surface, they are basically the same in modern movies; they were simply quite a bit more open at the time, and they weren't as bad as many people make it in comparison to those of modern movies. The female lead in The Human Monster is a damsel in distress, but she's also incredibly stubborn about wanting to find out who killed her father. Surprising after seeing The Devil Bat, where the female lead is a human carpet in many ways. As now, scripts vary widely.

Well, I'll probably listen to other movies from those disks in the near future and let people know what I think about them.

20050127

Dumb questions for Java heads

At work, we came across a really annoying problem upgrading some machines from Tomcat 4.1 to Tomcat 5.0

We have some servlet mapped on the servlet-mapping "/". It's supposed to handle an URL known as /en/blah. Now, due to some rather odd customer requirements, we're also required to have a physical file /en/blah/index.jsp, which, even more oddly, contains a redirect to /en/blah/natter (instead of /en/blah).

When the user browses to /en/blah/, Tomcat 4.1 calls the servlet. So does Resin 2.1.x. But Tomcat 5.0 opens up the welcome file /en/blah/index.jsp.

OK, I know it's not such a good idea to have two potential targets for a given URL that yield different results. But, I'm curious whether either behaviour is mandated by the Servlet specs? Or is it simply undefined?

My reading of the 2.4 specs says that the "/" servlet is the default servlet, and welcome files have higher priority. However, this may not have been the case in earlier specs. But looking at the changes in the back of the 2.4 specs, they don't seem to mention anything like that. Or maybe I'm missing something.

Just curious...

20050123

Star Wars Revisited

Well, not really revisited, but I can't think of a more interesting title.

Three friends and I decided we needed to watch the original Star Wars again (not the one that was "remastered"--the real deal, with nothing more than slight picture clean-ups; unfortunately pan-and-scan). Of course, having seen it many times, it's a great occasion to poke fun at it.

OK, so there's the usual corny lines, botched special effects, and so on... but it's still quite good for the time.

However, something unusual happened this time. I noticed something new. In "A New Hope", in the scene where the imperials break in the room on the death star where the droids have been hiding, watch the rightmost stormtrooper carefully. He's taller than the others, and he appears to bang his head on the door frame!

Isn't that cool? It's not? Oh, just shut up.

Weather update

In case anyone cares, or even if nobody does, it's frickin' cold today. It was also frickin' cold yesterday, the day before, and the day before the day before. I wouldn't mind so much, except that the days before that, it was a very warm -5 centigrade.

And there's no snow. Which is a moot point, I guess, because it's way too cold to cross-country ski; I'd probably be drained after a mere kilometer, all my calories going into my body's central heating system.

I take hope in the fact that January is the coldest month in Montreal, and that it can only get warmer from here. But maybe I shouldn't even think that, as nature always has some nasty surprise for us in February.

I normally wouldn't mind the cold, but I now pay the heating bills directly (they used to be part of my rent). My heaters are electric, which means it's less polluting (Montreal power mostly comes from insanely huge hydroelectric dams), but it's also more expensive per Joule presently. I think the last two months have been more expensive than the previous six months, even when taking the A/C into account. And I've been really cheap on heating, keeping ambient around 15 centigrade, five degrees below the "comfort temperature".

Bleah. And municipal taxes are going to hit me on the head soon, too. Joy.

Ah, well, that's what I get for not moving to California when I had the chance. Then again, I'm not sure I'd still be employed if I had moved down there, with the .com bubble and all. In any case, I'd have less liquid assets because property prices are insane down there. I suppose all those temperature shifts have their compensation--nobody wants to live there, so prices are still somewhat affordable.

20050122

About the A-25 bridge

OK, this post is going to be of little use to those who don't live in eastern Montreal, unless you are somehow interested to get some idea how life there is.

It is, uninterestingly enough, about a highway.

Montreal is oriented in the southwest-to-northeast orientation. However, northeast is usually called the "east" of the island, because streets run parallel to the island's axis. Same goes for the "north" of the island--it's actually northwest, perpendicular to river St-Laurent's current.

In the middle of the island, there's St-Laurent street, which cuts the island in two parts: the west and the east. The west has traditionally been Anglophone, multicultural, rich, dense, commercial and well-served by major infrastructures (roads, commuter trains, and so on). The east has traditionally been Francophone, mostly white, poor, full of strange empty spaces in the middle of nowhere, industrial and somewhat isolated by poor transport infrastructure.

In recent years, the industries of the east, mostly related to manufacturing jobs, have closed down or moved back to the States. The east of the island turned somewhat commercial with a rather large complex centered on a huge shopping mall, Les Galeries d'Anjou. Around that area, high density building were built. The east became attractive to immigrants, provided they could figure out French reasonably well (Haitians and Vietnamese are a natural fit and a common sight), because property value was much lower and yet the new constructions were reasonably well-built. The trans-canadian highway, known as A-40 in those parts, was prolonged to the end of the island, and the A-25, a north-south highway, was built, linking east of Montreal with the south shore cities of Boucherville and Longueuil.

Actually, it's probably easier to see a map (apologies to the SIA for linking to theirs). Note that the map has an area known as "Centre-Est", which I'll refer to as Hochelaga because it's the "traditional" name.

Other parts of the east became attractive as well, still because of low property costs and reasonable building quality. The formerly half-destroyed Plateau Mont-Royal became so trendy that prices there have become unaffordable, and since west of it is downtown, people are moving east to Rosemont or Hochelaga. Hochelaga is still half-destroyed, but it's slowly becoming more interesting, as young couples move in and renovate the heck out of old duplexes.

Other parts of eastern Montreal are doing OK as well. Anjou is mostly doing well, thanks to north-east Anjou being an industrial park, and thanks to a reasonably efficient town administration. St-Leonard is doing well. Rosemont is doing reasonably well. Some parts of Mercier west are doing quite well, being brought into the orbit of Rosemont. East of A-25 is not doing that great, but services aren't all that bad and property price is ridiculously low.

Overall, eastern Montreal is more affluent than it used to be when compared to western Montreal. The price of properties is still somewhat on the low side. And yet, people fail to flock there. New home-owners consider Longueuil (south shore) or (shudder!) Laval (northwest of Montreal). Why, exactly, is that the case?

I think the equation is very simple. I live in Anjou. East of St-Leonard, it's the best-served burrough in terms of public transportation and road infrastructures (I consider the road infrastructure in the immediate neighborhood to be better designed than that in St-Laurent, which is in western Montreal). I work downtown. It takes me 50 minutes to work with public transportation, roughly 45 without. In St-Laurent, where I was geographically further from downtown, commuter train would take 30 minutes, and driving would take 25 provided there was no traffic (which never happened, but never mind). Times to go downtown from Laval are roughly the same (ok, maybe 40 minutes by bus/metro, but Laval people are way farther from downtown than I am!), and Longueuil residents can make it even faster.

Why?

Answer: north Anjou does not have a metro, which it was supposed to have 15 years ago. South Anjou sort of has a metro, provided you don't live too far from A-25. No commuter train at all. Roads? A-40 does not take you downtown; it takes you north of Mt-Royal, and then you have to go down some crowded, busy streets like Parc. Or you can drive all the way to A-15, find yourself in ridiculous traffic, and double back. Or you can take A-25 down to Souligny, cross the Armed Forces base, take Dickson to Notre-Dame, dodge potholes and huge 12-wheelers to A-720, and then finally reach downtown.

Oddly enough, despite sounding way more complicated, that's the fastest way to get downtown. Seriously. Even if there's no traffic on the A-15. This, as they say, sucks.

In the case of a western resident of the island, it's much less annoyance. Take the A-15 to downtown (and you can take it from A-40, A-20 or even A-520, depending which has no traffic that morning). Sure, you get a lot of traffic, but at least there are no traffic lights, so what you lose in traffic you gain in continuously moving. Not a option on Notre-Dame. Laval people just take the A-15 further away. Longueuil residents take the bridge (which does get jammed, to be fair) directly to A-720 and zip downtown.

If you factor in public transportation, the difference is even more marked. Western Montreal has plenty of commuter trains, even if you go geographically farther from downtown than Point-Aux-Trembles is. Laval has commuter trains and is getting a Metro before eastern Montreal, even though that damn Metro station is costing three times more than was expected (and costs are still rising). Longueuil has had the Metro for a long time, and has commuter trains as well. Granted, though, east Laval and east south-shore aren't well served by trains (see this map, and weep). But they have their own east-west highway (Laval has the A-440, south shore has A-20 and A-30) which east Montreal does not have south of A-40. In fact, if you look at the commuter train map, it's painfully obvious that there is no service for the east.

OK, so some of those parts don't have that much population density. But neither did Longueuil when it got the Metro, and Laval, while dense in some parts, has a very sparse population. In any case, they are off the island, and contribute largely to urban sprawl. They are also far.

It is becoming clear to everybody involved at various levels of the government that this is somewhat unfair for denizens of the east. The A-25 already exists in Laval and north of the A-40, but the two sections are not linked. The provincial government has finally decided to build the bridge to link those two sections. Hopefully, it will allow traffic to the Anjou industrial park to possibly take the A-440, thus freeing the A-25/A-40 junction during rush hours (it should be known at this point that the Galeries d'Anjou complex is smack in the middle of the A-25/A-40 junction; it's quite interesting during rush hours, especially since the closest bridge to Laval is all the way west in St-Leonard, clogging the A-40 with huge trucks). Of course, this does not solve the problem of going west from south of the A-40, so the project also implies some rather large changes to Notre-Dame. It was originally planned as a highway, but nobody can make up their minds what to do about it.

This bridge would be a toll bridge. It would probably relieve some pressure to the A-15 and the A-40 (which is already not managing traffic well at all). Less idle engines and all that.

And of course, the first reaction of every environmental group is to decry it as an enemy of substainable development.

OK. Fine. I understand people don't like having huge highways carved into what used to be idyllic fields of grass.1

But, I mean, come on! The frickin' A-25 is already pushing north all the way to Henri Bourassa (north of A-40), there's a huge boulevard north of that where people have a really heavy foot on the acceleration pedal, and nothing was built around it for years because it was known that there would be a highway there someday! On the Laval side, the highway is already there and pathetically waits for a bridge to show up! There's huge concrete blocks in the water already, only awaiting for funding to build a full bridge!

Critics then point out that the new A-25 bridge will require changes to Notre-Dame, cutting the south of Notre-Dame off from the rest of the island. This is utterly ridiculous. South of Notre Dame, between Dickson (close to A-25) and the A-720, is the Montreal Harbor. It's a fenced area where only 12-wheelers can get in. Because Notre-Dame is a street instead of a real highway, it's full of potholes from those 12-wheelers and I'm sure a lot of pollution is generated just by the efforts to fix it year after year. You may hate A-720 for cutting off downtown from Old Montreal, but it's not going away, and we might as well do something with it. Turning Notre-Dame into a highway would probably not make noise or pollution much worse for residents immediately north of Notre-Dame, since traffic there is already very bad and full of huge trucks. It may actually improve things, since the highway would be either in a tunnel like A-720 or walled off like A-25 in the Anjou and Mercier areas.

Critics finally point out that we should build a commuter rail to the east instead. I agree that we should build a commuter rail; it's sorely needed. Actually, we should prolong the metro (preferably with at least one station north of A-40), but with the Laval metro costing so much, the AMT has no money for that. The rail is needed anyhow, because the metro won't help Pointe-aux-Trembles or Rivière des Prairies. But the rail also won't cost that much--maybe 20 million or so--because the track is already there, all that's needed is to build train stations. So it's not as if the A-25 bridge is competing, in terms of financing, with the commuter train.

Finally, I'd like to point out that all critics of the A-25 bridge live in Outremont, the Plateau or some other central area of the island. They have no idea how ridiculously isolated eastern Montreal is. From Pointe-aux-Trembles, it takes 1 hour 20 minutes to get downtown! From east Laval, don't even think about it--not only you'll waste time and gas driving to the A-15, but then you'll be stuck there for at least an hour in traffic, and you'll then have to double back on the A-720! At this point, any development is welcome. Eastern Montrealers hope that starting to build any of these projects will probably get the others built as well.

I'd also like to point out that although the bridge will be expensive, so was renovating the Acadie circle, and so are the repairs to the A-40 brought by ridiculous amounts of traffic. But nobody yelled when those were done. Of course not--those were needed. The fact that many of those people who don't want Notre-Dame to become a real highway nor the A-25 bridge to exist at all live in Outremont is surely a coincidence.2

What really pisses me off about all this, though, is that such concerns were never raised when Laval or Longueuil was to get its infrastructures. The metro eventually followed, because the roads were too congested. But now that eastern Montreal would finally get decent infrastructures, which would probably help develop it (there's a lot of mis-used space there--much more than in dense, crowded western Montreal), all of the sudden, those concerns show up. OK, fine, some of them have some validity to them--why don't you lobby for a damn commuter train and for a damn Metro line, instead of against a bridge?

Deep within myself, I believe that nobody really cares about eastern Montreal. Nobody has cared about it for the longest time.3 I hope that will change. It's easy to yell about new infrastructure being non eco-friendly when you have your infrastructure already built. Sort of like industrialized countries going all sanctimonious on developing countries about pollution, but not being willing to share more efficient technology with them, or to sell it at a lower price. It's also really idiotic to yell like this before the whole project is known; for all we know, the government may be planning a light rail line on that bridge! I don't always agree with the Charest government, but I hope that in this case, it will not back down. We've been waiting for that bridge for 30 years. It's high time eastern Montreal and eastern Laval got the chance to show off their potential.4


1 I'm being sarcastic here. The only fields above A-40 in the A-25 axis is full of weeds, power lines, and is crossed by a railroad. It's not idyllic at all, and if it's not contaminated by idiots dumping stuff there, it certainly is by the PCBs that were used at a time to isolate power lines.

2 I'm not trying to single out people living in Outremont here. But one of the people who utterly destroyed the Notre-Dame project is the current mayor of the city, Gerald Tremblay. He lives in Outremont. He feels Notre-Dame would cut off part of the island. He's obviously never been east of Papineau; there's nothing south of Notre-Dame there, except a harbour and lots of contaminated soil. I suspect those writing editorials against the bridge live west or close to St-Laurent. They obviously don't know that a) the highway is already there, we're only talking about a bridge; b) the Anjou industrial park is not developing as well as it could because of this silly highway configuration; c) east Montreal is not going to get a metro because Laval got theirs and it was too expensive.

3 I suppose a sensible question to ask me at this point would be, "why did you move to eastern Montreal if it's so isolated?" The answer is, I'm not really that annoyed by long transit. But those living in Rivière des Prairies or Pointe-aux-Trembles are not amused. Also, I wanted to find a place I could afford. Finally, I grew up in eastern Montreal, and it's an area I really like. I realize that I wouldn't have had such a good deal if the area had full infrastructure; but now that I'm there, I'd selfishly like it to show up.

4 Especially since east Montreal and east Laval are being neglected in favor of much farther places like Deux-Montagnes or northwest Laval, since those have good highway access. Having cars travel 45 KM instead of 20 is certainly not an improvement in terms of pollution. I'd much rather have east Montreal settled than those places, and it's not happening because of lack of access. Perversely, I think the lack of bridge, rail and decent Notre-Dame highway encourages urban sprawl; critics say the opposite, that keeping the east of the island isolated will counter urban sprawl. Well, people don't care about theories; they just go to St-Eustache or Deux-Montagne, or they go to Longueuil and emit thousands of tons of carbon waiting on Jacques-Cartier or Champlain bridge.

20050111

Fanfiction redux

After a seemingly interminable funk, I finally feel the writer's itch again. I'm giving yet another shot at the conclusion of my FF7 trilogy.

This time, I'm not even planning out the whole plot until I've got some more material written. I'll try to write "as it goes". At worse, I'll revise later. I feel that many decisions I'd taken in the previous installment really painted me in a corner if I kept the old plot structure I had in mind, so I'm killing it.

This post is mostly to force me to actually finish the damn thing.

Actually, I may have a better chance than last times I tried. Those long public transit trips help a lot. The fact I ran out of stuff to read until I get my ass to the library helps as well. Finally, I really feel the itch. Before, I was trying to write as an obligation, that is, I hated the fact the trilogy was incomplete. This time, I was cooking last week-end and, as I was waiting for the pressure cooker to finish whatever it is pressure cookers do (ok, ok, I know they cook stuff; it's a pressure cooker, duh!), I just got the editor out and started writing on a whim.

I can't promise anything, but I feel good about this time.

It's just too bad that I have to scrap all the stuff I had already written for this. Maybe I'll recycle it some day. But I'll definitely not use it now; that stuff is poison and has "painted in corners" all over it.

Hmmm, maybe I should have a "failed fanfics corner" if I ever get over my embarassement...