So much for holding an engineering degree.

August 14th, 2007


A short story of my life so far as a complete failure.

Here I am, sitting on a futon, in a 6-tatami (i.e. 9.72 m2) room, with my back to a wood column of the wall, in Hibarigaoka, a suburb in West Tokyo. Why am I sitting like this? It’s because I can’t afford to buy a desk and a chair. The room already cost me 112000 yen for the first month, and 56000 yen per month thereafter. I don’t get my own apartment; this is a house share; we are currently 7 people in the house, although 3 will have left before September. This is not even central Tokyo. The room smells pretty bad because we are both guys and neither of us seems to know how to keep things tidy. Right now, we have a couple of dirty socks, a bunch of grocery receipts, magazines, and a plastic water bottle scattered across the floor. As of this writing, I have a grand total of 86330 yen with me. This means I blew 213670 yen out of the 300000 yen that dad gave me, in less than 1 month. I still don’t have a job because 1) I don’t have presentable work experience, 2) there is no entry level job other than for native Japanese speakers, 3) there is no PHP job.

How did all of this happen? I don’t know. And I’m trying to get a clearer idea by writing. I suppose I have been showing signs of gullibility and eventual failure since I was in elementary school. You know how I agreed to immigrate to Canada? My parents told me there are no compulsory home assignments for school in Canada. “Oh really?”

Then it was time to get into high school. I ended up in the same private high school as my sister, because the school had good reputations and had turned into co-ed just a few years before. There were lots of attractive girls and I had an easy time getting decent grades. I enjoyed all 5 years there. Or did I? Puberty hit me and I have always wanted a girlfriend since then, but I never got one. Mom always told me “She won’t be your wife.” So I never bothered doing anything more than glancing from time to time at the girls I liked. What was I thinking? The day of graduation, I cried like there was no tomorrow, not with my friends, but at home instead. My instinct was probably sensing what was waiting for me in life.

Then came time for pre-university prep school, something that we call the cégep in Québec. As fate would have it, I ended up in the same prep school as my sister was, and got into the IB programme, just like she did. I should have learned earlier. What was I thinking? I came out with an IB score that seemed too high to be what I deserved. I didn’t really learn anything useful from the programme except the question “how do you know?” from theory of knowledge, which I use now and then while trolling Digg.com.

I made some good friends in the IB programme, and a few of us decided to study software engineering in the same university. I liked computer games and I’ve been sitting in front my computer all day in my free time anyway, so why not? What was I thinking? Unlike my friends, I failed to enter the co-op programme. I graduated, with decent grades, but just below the threshold for Distinction. To this day, I still get the chills thinking about artificial intelligence, compiler design, and database implementation. My uncle asked me for opinions about an ERP system that the family business was going to implement. I gave him very vague answers that amount to “I don’t know”, if anybody were to examine closely enough. Sometime towards the end of my bachelor studies, dad started an aluminium extrusion business. I’m leaving out all the details about the nice girls that liked in prep school and in university; I never do anything about them, remember?

Right after graduation from university, my father suggested that I take a summer break and travel around China instead of taking a job immediately. His reasoning is that I would not have a better chance to witness all the change that has gone through China after I start working. I agreed with him at that time, and took a roadtrip with one of my uncles through about 1/3 of China. I even took another business trip with another uncle to the US. What was I thinking? I missed the peak hiring season, and I had already started forgetting everything about design patterns, Rational Unified Process, and so on. Heck, even if I had not started forgetting, those little pieces of knowledge would have fallen out of fashion in the quickly evolving IT sector anyway.

Once summer was over, I returned to Canada with my family to finalise our retreat back to Hong Kong. We had to sell our house and our car, and close our bank accounts, among other things. Then one day, something broke in my head and I decided that I didn’t like Hong Kong and Mainland, and that I wanted to stay away from the mess that was my greater family. I told my family that I wanted to stay in Montreal. They didn’t stop me in my selfish fit of the moment. They left me with the car and my sister left me with her savings. They even helped me find an apartment where I can live after we sell the house, and the washing machine and stove to go with it. Mom and my sister were crying as they entered the boarding zone of the airport. Mom thought she wouldn’t see me again in her life. I was also crying as I drove “home”. WHAT THE FUCK WAS I THINKING?!?!?!

The next morning I woke up to realise that there is nobody to eat breakfast with me anymore. I cried like a maniac. I opened the refrigerator and I found the curry that mom had prepared for me; I cried even harder. It was absolutely heartbreaking. Even now I’m sobbing as I recall my experience. I could hardly call that home because I lived there alone the whole time. It was more like a big prison into which I banished myself. I didn’t even get in touch with my friends after university anymore. Some of them have gone to work in Seattle, another went on a tour in Afghanistan. I didn’t look for a job because my friend (my current roommate) invited me to do freelance web design and web application development. What a great way to mess up my career. Since we were doing freelance stuff, the chances of us properly learning new tools was a big, incredible, zero. The whole time we were using only PHP5, HTML 4.01, CSS, and JavaScript. And I suck at web design, I can’t even do Flash, ShockWave, or Director. I don’t even know how to use Photoshop. Who was I trying to kid, trying to be a web designer? The whole experience gave me another big, incredible, nothing to buff my resume with. At that point, I still didn’t have to try shrinking my resume to 2 pages because I actually had no valid, presentable working experience.

Soon, my friend decided that business wasn’t good enough in Montreal. He told me that we can make more money working in the financial sector in Japan. I agreed to come to Japan with him, partly because Japan is closer to home, partly because I had fallen for a Japanese girl that I met in Montreal and that I wanted to do something about it, namely, learning her language first. I couldn’t properly liquidate everything because I was busy finishing off existing projects. The only thing I managed to sell at a decent price was the car. Pretty much everything else were given away. I tried to sell the sofa at $100 and even took the trouble to deliver it. The truck rental wasn’t cheap, but I thought money from the sofa and the other furnitures I was selling would have covered it. Guess what? The buyer gave me cheque instead of cash like I had said in the ad and it bounced.

Closing the bank account was another disaster. I decided to leave the bank account open because I had to wait for the refund from the car insurance company. Turns out that the cheque never got into my proxy’s hand. So now I have the option to fly back to Canada just to close a bank account that has no money in it or leave it and remain a resident (which means I have to pay income taxes even if I don’t live in Canada anymore). I also emptied the safety deposit box without discontinuing it. Out of the stuff from the safety deposit box, I deposited the few $1000 CAD bills into the bank account before wiring everything back to Hong Kong, following the advice of another friend that it’s too dangerous to carry a couple thousand dollars in cash at the airport. I completely forgot that those $1000 CAD bills were in the safety deposit box was because they were out-of-print collectibles.

And now I’m in Tokyo, trying to miraculously reboot my life. It’s not happening. Dad and his business partner have intentions for me to succeed them in the aluminium extrusion business. What am I doing here getting an IT job for? What Japanese company is going to hire somebody who has graduated for over a year and who still does not have job experience?

I’m so stupid I don’t deserve to live. I’m a failure.

引越しました

August 1st, 2007


今日新大久保からひばりヶ丘に引っ越しました。すごく暑い日でした。さらに荷物が沢山すぎるので、二回往復しました。シャッツは完全に汗に浸っていった。

新しい家はハウスシェアです。今部屋が足りないから、この三週間は友達と同じ部屋に住んでいる。後ドイツルームメートは故郷へ帰るので、そのときもう一つの部屋がある。

Today I moved from Shin-Ookubo to Hibarigaoka. It was really hot today. Furthermore, because we had too much stuff to move, we had to do another round trip. My shirt got all soaked in sweat.

The new home is a house share. Since there is not enough rooms right now, I’ll be sharing a room with my friend for 3 weeks. After that, the German roommate is moving back to her hometown and we will have another room.

東京に到着!

July 21st, 2007


四日前に東京に着いた。ここは本当にでかい都市です。東京の市区だけでは全香港と同じぐらい大きさかも知れない。まあ、その感じです。

そして。。。昨日の朝は鼻血が出た。少し吃驚した。「大丈夫かなー。まだ三日でしたぞ」っとおもった。

もし文法が間違えば、私を改めて下さい。

I arrived in Tokyo 4 days ago. This is a really huge city. Perhaps just the urban area of Tokyo is about the same size as all of Hong Kong. Well, that’s the feeling I get anyway.

And then… yesterday morning I had a nosebleed. I was a bit surprised. I thought “Woh, am I ok? It’s only been 3 days!”

The Real Origin of the Canadian “eh?”

July 3rd, 2007


Here is my take on the origin of the Canadian “eh?”

The French keyboard layout.

When you want to type in French, the easiest way is to switch to the French keyboard layout, instead of using the Alt + 0XXX codes for the accented vowels and the c-cédille. However, once you switch to the French keyboard layout, some other keys, such as the forward slash (/), become harder to find, so we Canadians in the French speaking provinces often switch back and forth between the English and the French layouts. Sometimes, though, we forget to switch back from the French layout to the English layout. And this is what happens when you ask a question in English, while typing with the French keyboard layout:

“So you want to go to China Town tonightÉ”

You see that “É” at the end of the sentence? That’s what happens when you try to type out the question mark (Shift + /). In the French keyboard layout, that key combination gives you the e accent aigu instead of the question mark.

The sentence ends up being read as “So you want to go to China Town tonight, eh?”

And that’s how the Canadian “eh?” was born. :)

Moving

June 23rd, 2007


It’s been decided. I’m leaving Montréal and getting a job in Japan.

Update: the sale is over. Thanks for all of the inquiries.

PopupGallery, now pageable

April 9th, 2007


Some of you may have used the PopupGallery available at Yellow Swordfish. In the last few days I made changes to it so that the hover gallery automatically becomes pageable if there are too many pictures to be fitted on the page. You can see an example at my test site. The modified plugin package is available here.

Facebookers Against Irrelevant Facebook Groups

March 26th, 2007


Yesterday I finally caved in to peer pressure and joined Facebook. Immediately, I find myself disappointed by its Groups feature. Frankly, it’s nothing more than a huge mess, with a really bad signal-to-noise ratio. Many irresponsible kiddies create groups that are irrelevant and off-topic with respect to the group types. Why shall anybody suffer browsing through 300+ irrelevant groups just to find the proper ones about Ajax and Ruby on Rails? Stop the injustice!

If you feel the same as I do, you are welcome to take part in the protest and join the Facebook group I have created: Facebookers Against Irrelevant Facebook Groups.

How you can help the cause immediately:

  • Right now the group is missing a proper logo. When you join, feel free to use your creative talent and contribute by uploading a logo of your own creation.
  • Digg this story, or submit it to your favourite community news/bookmarking site. Please pay attention to proper categorisation.
  • Invite your Facebook friends.

Hopefully the group can grow into a large enough number to get the attention of the Facebook administrators.

Date and Time in PHP 5 and MySQL 5

March 13th, 2007


Time for a little technical post.

Date and time manipulation are one of the most common components in web applications. This is true for a few reasons:

  1. Web applications can have users coming from anywhere around the globe, under many different timezones.
  2. Chances are that you receive date and time information when the user does something. For instance, a user sends an e-mail and there is a timestamp in the message header.
  3. Chances are that you want to do something about the timestamp. For instance, sorting e-mails according to the timestamp before showing them to the user.

Unfortunately, the PHP date and time manipulation functions are anything but properly documented by the PHP documentation team. This causes a lot of grief and frustration among novice PHP programmers. Here, I will talk about how to handle dates and times in a PHP 5 + MySQL 5 setup.

Always store dates and times in the UTC timezone.

This is a good idea for 3 reasons:

  1. The UTC time reference is the most precise and least debatable there is on Earth because it is based on atomic time and takes the Earth’s rotation speed into account for compensation. Furthermore, it has never been, is not, and will never be subject to the daylight saving rule.
  2. The UTC is already the preferred reference timezone among application developers. The Unix Epoch, for instance, starts on midnight of January 1st, 1970, UTC time. Therefore, storing dates and times in UTC will allow easier interoperability with other applications right off the bat.
    1. A consequence of the above is that robust conversion routines to and from UTC is likely to be available in any programming language you pick (including PHP).
  3. You never know when you may need to move or deploy your web application to a host on a different timezone, therefore you don’t want to rely on the server’s timezone for storing and converting dates and times.

Dealing with date and time in PHP 5

Let’s face it, the php.net documentation sucks. One of the issues I see in it is that it fails to adapt to the OOP paradigm. It’s a shame that OOP has been introduced to PHP 4 and 5, and yet the documentation is still largely function-oriented. PHP 5 comes with a class library, but most people whom I have talked with do not know how to use it because the classes are not well documented. As such, most PHP 5 projects are still largely procedural. My goal here is to bring you a little bit of enlightenment by explaining how to use those classes.

  1. First, you need to create an object to represent the timezone. This step is not strictly necessary, but is recommended because in a globally connected world, a time value by itself is meaningless. The DateTime constructor can optionally take it as an argument, which is the way I recommend you to use it.
    $timezonename = 'America/Montreal';
    $mytimezone = new DateTimeZone($timezonename);

    Note that $timezonename can be any timezone name supported in the Olson timezone database (a.k.a. zoneinfo) or any of the few extra ones. You can see the full list in Appendix I of the php.net documentation.

  2. Only then do you create the DateTime object.
    $datetimestring = '2007-03-13 23:10:00';
    $mydatetime =
      new DateTime('2007-03-13 23:10:00', $mytimezone);

    The exact acceptable format of $datetimestring is the same as the GNU Date Input Formats, in case you have not found out from the php.net documentation already.

  3. Now, let’s try outputting it as a string. The bad news is that you should not do echo $mydatetime; The good news is that you can decide what string representation to take by using the DateTime::format() method.
    $mydatetimeformat = 'Y-m-d H:i:s e';
    /**
     * 'Y' for year, 'm' for month, 'd' for date,
     * 'H' for hours, 'i' for minutes, 's' for seconds,
     * and 'e' for the timezone name
     */
    echo $mydatetime->format($mydatetimeformat),
      $mydatetime->format('I')?' DST':'';
  4. Perhaps you would like to see the date and time in another timezone? No problem, PHP has that covered.
    $mytimezone2 = new DateTimeZone('Asia/Tokyo');
    $mydatetime->setTimezone($mytimezone2);
    echo $mydatetime->format($mydatetimeformat),
      $mydatetime->format('I')?' DST':''; 

Word of caution

The constructor method of DateTime is supposed to return false on failure, so you may be under the impression that you can rely on it to validate date and time strings. For instance:

$montrealtimezone = new DateTimeZone('America/Montreal');
$bogustime =
  new DateTime('2007-03-11 02:30:00', $montrealtimezone);

The above snippet is supposed to result in $bogustime holding the value false because ‘02:30:00′ is not a valid time on that date due to Daylight Saving Time entering into effect. Unfortunately, the constructor does not catch the mistake and will return you a DateTime object representing March 11th, 2007, two-thirty in the morning, Montreal Daylight Saving Time. It is a bug that I recently discovered in PHP 5.2.0 and submitted to the php bug database. It does not seem to be fixed as of this writing, where the latest stable released version of PHP is 5.2.1. You can check the status of the bug here: http://bugs.php.net/?id=40340.

Edit:
A comment by Eric has prompted me to clarify that the above bug is NOT caused by an outdated zoneinfo database. You can test it by trying to instantiate a similarly bogus date of a past year, while having the most up-to-date zoneinfo database installed.

A Little Bit of Update (Hong Kong/Macau/China)

January 25th, 2007


Hello everybody, I know I haven’t posted in the longest time. I have been lazy/busy/travelling in the past months. Anyway, here it goes …

My long vacation started off with a trip to Hong Kong and China. In fact, it was pretty much the main theme of the whole vacation. This time, I visited many companies and manufacturing plants around Dongguan, Guangdong Province. I got to see the assembly of high-end speakers and audio components at GPE and that was really cool. I couldn’t get any picture because obviously GPE has NDAs with their clients and because my camera decided to break down under the heat right in my first week in China. So basically that also means no picture for the rest of the vacation. I saw the site for the new plants of our metalware die-casting business and a new branch office Macau. The most memorable part of my stan in China was a business/sight-seeing roadtrip with one of my uncles and his friends through the Eastern part of China (Dongguan –> Jiujiang –> Nanjing –> Yantai -(ferry)-> Dalian –> Dandong –> Qinhuangdao/Beidaihe –> Beijing –> Wuhan –> back to Dongguan). There are some pictures from that roadtrip but I have yet to get them from my uncle and his friends.

Jiujiang city is pretty well off, considering how inland it is. The best part of the city is built around a lake, where there are plenty of lightworks at night. You can find great food at low prices there, if you know where to look.

Nanjing used to be a national capital in ancient China. It hosts many attractions, including the Dr. Sun Yat-sen Mausoleum, the Ming Xiaoling Mausoleum, the Presidential Palace, and the now disused Purple Mountain Observatory; and is one of the best jade sculpture centres of China. There is also the first five-star hotel of China, the Jinling Hotel, at which we stayed.

Yantai isn’t very special. We only went there to catch the ferry anyway. So I’ll just skip ahead.

The area around Dalian has fresh air and decent sunshine because it is one of the least industrialised areas of China. We went to visit a weaponry history museum, which displays some of the least honorable facets of Chinese society. It’s not the warfare or propaganda aspects of it; after all, what country doesn’t wage war or use propaganda at some point in history? What ticked me off is the utter laziness and lack of sense for civil duty of some Chinese people. We came across some retired war planes and war vessels, which can be visited onboard at 5 RMB per person (which is not exactly cheap in the context of Chinese economy). I went onboard two of those and felt completely ripped off; the vessels are unmaintained and full of litter. Those museum keepers really should be ashamed of themselves. They charge 5 RMB per person yet didn’t do anything to keep these historical artifacts presentable. Fortunately the area had great seafood (particularly the abalones) to make the day less frustrating. There was also a museum of reptiles where they teach you many things about crocodiles and snakes. They have a huge indoor lake/river system where you can watch hundreds of snakes live. Of course, the less friendly, dangerous, or endangered species, like cobras, are isolated. Somehow in the middle of the large, beautiful park surrounding the museum, there is a gigantic cage with many different kinds of big and small birds, including peacocks and cranes. I joked with my new-made friend (the son of my uncle’s friend) that that must be the secret laboratory where they research new species of cross-infecting avian flu to use as biological weapon. =P

Dandong is a small city on the Chinese-North-Korean border. In fact, it is only separated from North Korea by the Yalu (a.k.a. Amrok) river, which is much narrower than the part of our Saint-Laurent river lying between the Montreal island and the South Shore. Yet, in summer, it can get so foggy that you can’t see through to the other side of the river, unless you take a walk onto one of the bridges and past the middle of it. One of the historical landmarks of Dandong is the broken bridge. It used to be a rather advanced bridge in the old days because the middle section of it could be rotated to leave an opening for large ships. The Eastern part of it was destroyed in a bombardment by American warplanes during the Korean War, and the rest is full of holes, either made by shrapnel or by armour-piercing rounds. Apparently the Chinese government left the broken bridge there on purpose to commemorate the war. I took a sight-seeing boat to see the shore of North Korea upclose. The contrast in landscape between the two shores of the river is quite interesting. On the side of Dandong, you would see many buildings that are over ten storeys high (some more colourful than others), big advertisement panels, lots of lightworks in the evening, and generally a great deal of business going on at the shore. On the North Korean side, you would see buildings that are at most three storeys high (generally unpainted and grey/yellowish due to weathering), no advertisement panel, no lightwork, and no business on the shore; instead, you would see a bunch of kids playing on the beach and soldiers elsewhere on the beach, with rifles in their hands, some of which smoking or slacking off. According to rumours, the kids and soldiers only come from “good families”, families deemed unlikely to defect from North Korea. Due to the multitude of ethnic groups there (Han Chinese, Manchu, and Korean), food variety is abundant in Dandong. Seafood is served raw and cooked; raw shrimps accompanied with kimchi is especially exotic and tongue-tingling. At night, some people roast corn ears and beef above open coal fire and the flavour is carried across the whole street. Because of this very diversity of food I had my share of misadventure (albeit funny) in Dandong, and that’s called acute gastroenteritis. I was sharing a room with my uncle the whole trip. That night in Dandong, my stomach decide to play really not nice. After my uncle had gone to bed, I was stuck in the washroom for over half an hour and I felt more and more sick. I managed to get out and tried to sleep again but couldn’t. My uncle woke up and asked me what’s the matter. I told him my stomach wasn’t feeling very well. My uncle didn’t think it was very serious so he went to sleep again. Then my stomach hurt so much that I decided to call the frontdesk to get a taxi to the nearest clinic or hospital. So I left the hotel room alone, while my uncle was still sleeping. I didn’t wake him up because I thought it would be quick. I left a message with the frontdesk anyway just in case. So I got to the hospital and everybody on nightshift at the emergency was sleeping because apparently no real emergency ever happens around the place. After about 10 minutes of waiting and paperwork, I finally got to see the doctor, who woke up with her hair and lab coat in a mess. She actually looked kinda cute like that. Then she said three times in Mandarin that I was wrong, with an interrogative look. I thought “what the heck? Does she mean I should have come to the hospital sooner?” After not getting an answer from me for a while, she finally asked me if I was a soldier and I bursted out laughing because at that point I finally understood what she meant earlier: she was asking if I were in the troops. The confusion was due to the fact that “不對的” (wrong) and “部隊的” (belonging to the troops) are both pronounced “bu dui de” in Mandarin. It was a military hospital so maybe soldiers get a discount. Anyway, 10 minutes later my uncle arrived in taxi and had an “lol” all over his face. He told me that he woke up in the hotel room and couldn’t find me, so he thought “oh shit. I lost my nephew.” and finally learned my whereabouts from the frontdesk.

We then started our trip back on a different route. The first checkpoint was Qinhuangdao (literally the Island of the Qin Emperor), which is apparently where the Qin Emperor sent off an expedition to the seas for the elixir of eternal life. There was also the Old Dragon Head, the Eastern end of the Ming Great Wall. The place features many tablets with poems by past emperors and political figures. The view on the open sea from high grounds is fantastic.

Then we stayed a night in Beijing. Unfortunately that’s when my uncle got a phonecall and had to hurry back to Dongguan to take care of some urgent business. So I didn’t have the chance to visit the Forbidden City, the Residence of Ji Xiao Lan, or the Old Summer Palace; but I did take a walk around the famous Tiananmen Square and the Wangfujing boulevard (”the boulevard with the well for the lords’ residences”), a shopping street that really shows off the lifestyle and prosperity of a great capital.

There is nothing of interest to write about the rest of the trip back to Dongguan.

Coming next: Trip to the U.S.

Solving grade 8 algebra… the Enterprise way

June 1st, 2006


I have been tutoring grade 8 math for some time. And let me tell you that it is not easy. Doing grade 8 math is one thing, but tutoring/teaching it is a completely different story. The trouble is that, by dint of having done a lot of much harder math problems as a university graduate, high school math just seems to be second nature and it has become hard to recall or even explain the thinking process behind solving simple problems.

As someone who reads The Daily WTF religiously everyday, I thought I would be less likely to fall prey to Enterprise-hype. How wrong I am! Anyway, last week I pulled a Daily WTF while tutoring math to a girl. It turns out that I showed an Enterprise solution to a grade 8 algebra problem. Here it is:

Tommy’s father is 5 times as old as he is. His mother is 2 years younger than his father. Together, the sum of their ages is 75. How old is each of them?

Having dealt with multi-variable systems of linear equations for so long, my approach was “naturally” to identify the unknown variables and then to translate the sentences into equations:

T: Tommy;s age
F: the father’s age
M: the mother’s age

F = 5T
M = F - 2
T + F + M = 75

Now we do some substitutions:

M = 5T - 2
T + 5T + (5T - 2) = 75

Finally, we solve for T, F, and M:

11T - 2 = 75
11T = 77
T = 7
F = 5T = 5 * 7 = 35
M = F - 2 = 35 - 2 = 33

I thought that this method was already pretty dirty because I haven’t even put the equations into matrix form and used the more formal linear algebra methods that I learned in college (or even the Gauss-Seidel method).

Yesterday I was tutoring the girl again. This is the first thing she said as I took out my pencil, eraser, etc: “I asked my teacher about it and she said your method is completely wrong. She said that you are teaching me stuff that I am supposed to learn only next year so she doesn’t understand why you’re trying to confuse me.” I was pretty shocked and “pwned” was written all over my face. As it turns out, what the girl’s teacher has taught (and was thus expecting) was actually even dirtier:

Father’s age = 5x
Mother’s age = 5x - 2 (since we already know the father’s age is 5x)
Sum of the ages = 5x + (5x - 2) + x = 75 (since we already know the father’s age is 5x and the mother’s age is (5x - 2)
Therefore…
11x = 77 –> x = 7
Father’s age = 5 * 7 = 35
Mother’s age = 35 - 2 = 33

Notice that they don’t bother with things such as identifying variables or substitutions. The whole problem was solved pretty much using only 1 variable from start to end. The reduction in complexity and in number of steps is pretty amusing. I think it was a good lesson (for me).


Bad Behavior has blocked 122 access attempts in the last 7 days.