September 17, 2004

  • I hate Microsoft.


    It's really hard to believe that a multi-billion-dollar software corporation would implement things in very stupid ways. This morning, I was trying to copy whole CDs of MP3s to my laptop hard disk, then there was a CRC error in one of the files. What happened next? Windows Explorer tells me there's a CRC error and the whole fucking copying stopped!!! I mean, c'mon, Microsoft can do better than that. Why don't you keep on trying to copy the other files and just give me a list of files with CRC error at the end of the whole copying process? It's not hard to implement and I don't see why copying was not implemented like this in the first place. It's so much more logical than to let the user drag-and-drop tens of time to try to copy tens of folders or even each file individually when CRC errors occur.


    Another thing that pissed me off involves my MP3 collection again. At the beginning of the summer, I had to go back to Hong Kong to work, so I burned my whole MP3 collection onto CDs to bring with me. What happened was that, in order to look at just the folders that were left, I simply pressed Delete with the burned folders selected. Windows, being extremely smart and user friendly, sent them to the Recycle Bin. And guess what, after burning several CDs, the Recycle Bin filled up to 2 GB and started to purge my deleted folders without fucking warning me!!! God damn you, Microsoft, if you're gonna limit Recycle Bin to 2 GB, at least fucking warn me before purging stuff.

    I hate Microsoft.

    - SwordAngel

September 16, 2004

  • Busy Days and the Big Slack-Off


    Life is getting busy over here as school started again. I gotta read those course outlines and textbook chapters of the classes I skipped and level up my new dark elf too. In other words: less blogging.


    Don't be disappointed so fast though because I already have 3 new topics to blog about and I'll elaborate on them as soon as I have enough time and the Di-hard-slackoffene in my brain wears off. Here are the 3 new topics (exact blog entry titles may be different):



    • What's wrong with JavaScript?
    • Consumer virus scanners: why they are evil and why they should not be as important in 10 years.
    • Gundam Seed and the Future of Software Development.

    So there, this will leave you guys time to think a bit about the topics before reading my visions about them.


    - SwordAngel

September 4, 2004

  • Odyssey


    Travelling has this unspeakable, yet refreshing and wonderful effect of defrag... I mean, juggling parts of the mind around, putting some where they belong and others where they don't belong. If you don't understand what I mean, don't worry; it's just me being lunatic and stuff. Let's just say that travelling made me think a whole lot more than idling at home in Canada.


    My 3-month trip to Hong Kong and Mainland China proved to be quite beneficial. It's one thing to sight-see your hometown during highschool and a totally different thing to rediscover the places, the people, and the stories behind it through the eyes of a more mature man, a 21-year-old university undergraduate.


    Dad, the power drill, and Superman


    When you were little boys and gals, have you ever had that feeling that your dad is the strongest and most ingenious man on Earth. Guess what? That feeling doesn't last quite as long enough as you wish it to. When I was still a naïve little toddler, I often saw my dad working and doing incredible stuff both in the grand-family-owned factory and at home. He knew all the machines - their names, their functions, and at least roughly how to use them - and he was a great repairman and a pretty skilled carpenter. Whatever is broken at home, if you can name it, he can fix it - at least that's how things looked to me back then.


    So there was this one time where dad was doing his magic again, drilling holes into the cement walls of our little 700' flat in Hong Kong. It looked like a real feat: the sofas were pushed aside to make a clearing where we needed to drill holes, the broom was brought hanby, and precise crosshairs were drawn onto the wall. My dad double-checked the drill and inserted the drill bit. It was a kind of drill bit that I have never seen before, one used to drill hard material like cement and bricks, with a metallic beak instead of a cone tip. Dad firmly fixed the mesh onto the drill, and triggered it a few times to check for proper axle alignment then, with a confident grip, started to drill the holes on the wall, 1... 2... Then dad saw my awed expression and said "Why don't you try?" I was reluctant at first because the power drill looked so big and heavy; my hand could not cover the handle well. Anyway, I took the drill in my hands and triggered it, but it rev'ed up too rapidly for me. The high-pitched grinding sound and the vibration on my hand was unbearable. So I handed the drill back to dad as soon as possible. Dad took it back with a little smirk and continued with his work, still with a firm grip and a confident stare. So for the rest of the exercise, I was just sitting there with my jaws open, looking at the drill mesh hammering on the wall, sending bits of cement and dust flying off. The noise of the drill, the cracking of the wall, and the tickling sound of the cement morsels as they collide with the floor... The whole scenery was so exciting to the eyes of the child that it certainly was no less inspiring than the furious Niagara falls. I only wish that I could make a record of drilling exercise with slow motion shots "à la John Woo" and Dolby Digital 6.1 surround. Anyway, when the little renovation work was done, I was convinced that dad is invincible, like Superman, and said "Wow, dad, you're incredible." And dad's simple answer was "Silly son, when you're grown up, you'll look at things differently. Dad will only seem to you weak and helpless." I, being impressed and all that, did not believe him; and I told myself that Dad will always be my Superman.


    And so flew past some 60 joyful and peaceful springs, summers, falls, and winters. I'm now 21 and I travelled back to Hong Kong for a summer job. Dad's hair has turned whiter, almost silver now. His skin has hardened and his beer belly from the prime years has shrunk. And most of all, he now has bursitis in the right shoulder, a natural alarm that tells any Superman of age 50 and over, that retirement is just around the corner. Now my dad can't properly enjoy a game of tennis because his shoulder hurts too much to serve a ball. He already had bursitis in the left shoulder 2 years ago, so this time it's really the second alarm. Dad now has to take pills and rely on some physio-therapy to relieve the pain. And then, there is this other factor from schooling; it just so happens that I realize I know more English, more math, more about anything academic, and more about computers than he does. Does it make him useless? Not quite, he still cooks way better than I do, and when it comes to renovation, he's still the man of the house, plus he knows how to do business. However, he certainly no longer look as invincible as he did 15 years ago. A Superman who cannot serve a ball at tennis, much less stop a meteor from crashing into Manhattan... This is when I wonder, if I ever have children, what would I tell them about my apparent invincibility, and then about the tall building that their grandpa stopped from tilting over.


    - SwordAngel

July 23, 2004

  • Happy Birthday, Timmy!!!

    First, I would like to wish Timmy, another member of the Power SOEN Rangers, who swings the .NET Saber to defeat binary evils, a very very happy birthday, with lots of great presents and hopefully a LAN party of some sort tonight. He should be, erm... 22 today... right, Timmy?

    Lotus Domino Stupidities Reloaded

    In this second settlement about Lotus Domino, I'll talk about more frustrations I encountered while developing a Lotus Domino application (actually the same application as during the last post; this is how unproductive Lotus Domino gets).

    Maintenance Hell

    Lotus Domino is probably one of the hardest development platforms when it comes to maintenance and prolonged development. An important contributing factor is the way it hides chunks of code away from the developer while NOT providing appropriate facility to trace variables and functions.

    On most other development platforms, things are source code based, with plain-text ASCII files that are so easy to edit that most developers can stay away from the original IDEs. Even in the case of Visual Basic, where widgets can be dragged and dropped to create the GUI of an application, you can still go back to the source code to edit the widgets directly. With Lotus Domino, you can't do the same. The developer is stuck with the Domino GUI because there is no source code file. To develop Domino applications, you point and click on toolbars and the workspace in order to create widgets. Once you have widgets in the workspace, you click on each widget (e.g. a button, a checkbox, etc) to display the code that governs the widget's behavior and actions. In other words, pieces of code are hidden "within" widgets. Now, "what's wrong with that?", you may ask. Nothing, really. The problem arises with the Domino Designer IDE itself, which provides no way to thoroughly search a Domino application for a variable or a function. This, combined with Domino's way of hiding pieces of source code makes it hell for developers to do maintenance or any development that is of any meaningful size. Picture this: you're taking over an existing project for maintenance, but you still don't understand what specific functions do, yet there are bugs involving those functions, how do you find the function declaration? Even worse, if you try to clean up code and remove declaration and definition of obsolete variables and functions, you'll be wasting hours to find exactly where, if at all, a variable or a form field is referenced throughout the Domino application.

    WYSIWYG??? You gotta be kidding.

    Another thing about Lotus Domino Designer that irritates me is the unholy combination of HTML code with graphical development. On the one hand, ordinarily, when writing web pages, any experienced web author writes well structured HTML code to make things clear. On the other hand, when writing traditional Lotus Domino applications for use with the Lotus Notes client, developers carefully place widgets, subforms, etc, and format accompanying text neatly. However, when developing Lotus Domino web applications, the developer inevitably needs to add DHTML among the Domino widgets for two reasons:

    1. somehow, the Lotus Notes server is too dumb to automatically translate some Notes layout to HTML;
    2. JavaScript is not part of traditional Lotus Domino applications' standard arsenal.

    When both HTML and Lotus Notes elements appear on the design workspace, the HTML portion doesn't look structured anymore and the Notes portion doesn't look neat anymore. So the whole point of Lotus Domino Designer's WYSIWYG interface is pretty much defeated.

    More?

    Anyway that's all for now. There are 4 more weeks to go before my job term is done. You may expect some more bashing in the future about Lotus Domino's interoperability with ODBC databases. I heard from my supervisor that we may be starting a new project next week and trying to stick the ODBC/Lotus Notes chimaera into our own ass...

    - SwordAngel

June 28, 2004

  • Lotus Notes/Domino 6

    Writing Lotus Notes/Domino 6 applications is kinda frustrating. The whole development platform is supposed to simplify the development of corporate management applications, but I don't think so. After playing/working with it for a month now, all I find are stupidities, bad design, and bugs that hinder productivity.

    Counteractive Designs

    Lotus Notes/Domino applications are heavily database related. However, Lotus Notes/Domino uses a document-driven database instead of a relational model. There is no concept of tables, projections, etc as in the relational model. Forms and documents are the main components of a database in Lotus Notes/Domino. Documents are like records of data in Lotus Notes/Domino and forms are for reading and editing the documents.

    At first, this design may seem to make the Lotus Notes/Domino database more flexible than relational ones as records of data are no longer tightly tied in tables. It is now possible to view records with fields (variables) of the same name but different datatype, all under the same page (called a "view" in Lotus Notes/Domino; do not confuse this "view" with the one in the relational model). However, this flexibility is made close to useless due to the constraints in performing searches in Lotus Notes/Domino:

    1. Datatypes in Lotus Notes/Domino lack flexibility. For example, pull-down menus (like the <select> element in HTML) are always considered to be text, even when all the choices are numeric strings. So when you try to perform a relative comparison (the kind like <=, >=, etc), the Notes server tells you that a relative operation is not allowed on a field of text type.
    2. There is no way to dynamically typecast fields when doing searches.

    The above two constraints make searches kill the flexibility that Notes/Domino's database model is supposed to offer the user. In order to overcome these constraints, one has to create two fields - one of type number, another of type combobox - then use JavaScript in the combobox's onclick() event to change the value of the number field. This is more like a hack and makes the layout look more messy - as though the inevitable mixing of HTML code does not make the workspace messy enough - for the developer (although the number field can be hidden from the sight of the end user using HTML). This is only the tip of an iceberg. I will post more about Lotus Notes stupidities in future posts.

    BTW, until Timmy and Chris start transfering our domain name to the hosting account, I'm gonna keep blogging here and mirror at www.frustratedcoders.net/k. I don't remember the account number to the domain name.

    - SwordAngel

June 20, 2004

  • NadiaChaouch.Net


    Congrats to Munchkin, who finally transformed into the GQueen and set up her blog. She is one of the female members of the Power SOEN Rangers and, like the rest of us, she likes to fight evil alien software designs and bugs. Another of her interests is to bash teachers, btw. :P


    I might update with a longer posting about Lotus Notes/Domino this week, so stay tuned.


    BTW, I bought a Master Grade 1/100 Mobile Suit Gundam GP-03S Stamen. Not the plated version that costs like 600HKD (about 110 CND$), but the much cheaper normal version at 200 HKD$ (about 35-40 CND$). The initial assembly is done, and I successfully hurt myself in the process too (I cut my thumb). This week, I'm going to shop for paints and brushes to liven up the whole model. It's going to be the first time I paint a model, so I gotta be extra careful.


    I hope Bandai comes up with Master Grade 1/100 Gundam GP-03D Dendrobium (yes, the monstruous mobile armor in 0083). They already had a 1/144 High Grade a few years ago, but I read reviews and it wasn't so good. The 1/144 is 1 meter long, so imagine the 1/100!! I'm really looking forward to it.


    - SwordAngel

June 6, 2004

  • Hi guys,
    Long time no see.
    I'm in Hong Kong now, working as a summer trainee at the IT Operations
    department of a big company. I'm having fun developing stuff for Lotus
    Notes 6. Although the salary may not look spectacular (about 22$ CND
    per
    day, it's actually quite good for an undergraduate in Hong Kong now), I
    think it's a great experience. After all, that company owns
    over half of the world's market for hard disk drive read/write heads,
    keke.

    Talk to you later.

    -SwordAngel

April 24, 2004

  • Laptop DVD drive certified dead.


    I guess my 3-and-1/2-year-old laptop has reached its retirement age. It's a Toshiba Satellite 2800 and it has been doing fine until I furiously kicked its floppy drive to death last year, after a very frustrating Differential Equations exam. But that was not a serious issue since floppy disks are always unreliable and I have been using a USB memory key for storing school work and such anyway.


    Sadly, this morning, the computer's DVD drive stopped working. It won't read any disk at all and even seems to have a hard time to spin up. I guess the DVD drive has been suffering from some chronic mechanical arthritis ever since the day I kicked the laptop.


    Anyway, the extended warranty period is almost over. I doubt Future Shop would agree to repair my laptop anyway since the damage to the floppy drive is very apparent. Compare the two pictures (the top one is of my own laptop, the bottom one is of my sister's, same model) and you'll see what I mean. :P




    I almost forgot to mention that the battery of my laptop is also dead; It won't recharge at all so I'm stuck with using it plugged into the wall all the time.


    There goes some 3400+ CND$... >_<


    I guess this means I really must get a job this summer... *sigh*


    - SwordAngel

April 21, 2004

  • More .NET Stupidities: Enum::Parse()

    Today I got totally pissed off by M$'s brilliant software
    engineering again, while working with enum objects in C++ .NET. If you
    are a C++ programmer, one of the things you must have encountered is
    the conversion/casting of a string to an enumerated type. In .NET, M$
    implements an absolutely stupid way of string-to-enum conversion,
    through the Enum::Parse() function. Basically, you expect to just pass
    the function a string and the custom enum type as parameters then get
    back an enum value in return. WRONG!!!

    3 Major Stupidities:

    1. You need to make sure your enum type is a garbage collected
    object, by specifying "__value" when you declared the enum type (e.g.
    "__value enum fruits {apple, orange, banana, 1337fruit};"

    2. You need to specify "__typeof" for your enum type in the argument
    list of Enum::Parse() because .NET is stupid and doesn't realize that
    you're trying to give it an enumerated type though you are using a
    function in the Enum namespace (duh!).

    3. Worst of all: the returned value of the Enum::Parse() function is
    not even going to be in your custom enum type, it's the generic garbage
    collected Object*!!! You have to do "*dynamic_cast" like this:

    some_enum_type enum_var = *dynamic_cast<__box(some_enum_type)>(Enum::Parse(__typeof(some_enum_type), some_string));

    Now, if that is not retarded, I don't know what is.

    - SwordAngel

April 7, 2004

  • Hello everyone,
    I haven't updated in a long time because I've been busy doing 2 school
    projects, besides catching up on the readings. The projects are still
    not finished and I am quite tired and frustrated after two weeks of
    work.

    One of the things that made me laugh and pissed me off at the same time
    is the installation of Visual Studio .NET 2003. M$ is known for making
    stupid mistakes but this one is the cream of the crop. Here goes the
    story: I had .NET Framework 1.1 and 1.0.xxx, Frontpage 2000 extension,
    and MSDN for Visual Studio .NET 2003 installed on my laptop, but just
    not Visual Studio .NET 2003 itself. When I popped in the first
    installation disc of Visual Studio .NET 2003, the installer tells me
    that I have an earlier version of .NET Framework installed and that I
    should uninstall it before continuing; same thing for MSDN for Visual
    Studio .NET 2003. You would expect that these components have been
    designed to work together and thus you don't need to uninstall them.
    But AHA! It's M$!!! So what I had to do is to fucking uninstall ALL
    that crap, let the VS .NET 2003 install the fucking prerequesites, THEN
    REINSTALL all the fucking .NET Framework and shit. That took me
    valuable time that I could have used on the project. Thanks for the
    fucking delay, M$. You have yet again proven that you excel in software
    engineering. And I am really happy to hear you getting shit from the EU.

    I've been using PHP in the database project and it's really quite fun.
    A good thing about PHP is it's relax syntax. You don't really need to
    worry about return types, and bla bla bla. The design of the language
    and the huge amount of public libraries allows you to write really
    clean code to dynamically generate HTML pages. BTW, there's a PHP
    coding marathon on April 24, 2004. Check out the dotgeek website for more details. Too bad it's in my exams session so I can't do it.

    On other news, SwordAngel got married to ZRuleZ, a handsome dark elf.
    However, I've been also level'ing my dark elf lately because my friend
    took back all the 1337 mage equipment that I borrowed. However, he lent
    me DE equipment instead, lol. So whatever...

    - SwordAngel