DigitallyCreated
Blog

PSD 2006 Semester 2

Time flies when you're having fun; its already almost half-way through 2007 and I haven't reviewed Year 1 Semester 2 of my university course, Professional Software Development. I will use the Atomic method of rating: a real 0-10 score where 0 is absolutely shocking, 5 is average, and 10 is brilliant. This rating is opposed to the typical ratings you see on the internet, ranging from 5 at the lowest to mostly 7s and 8s and maximums of 10.

Computer Systems

Computer Systems was supposed to be a lead on from Computer and Logic Essentials and it started out that way, but then deviated. This subject was a bit of a mess this semester, starting out with some theory about operating systems (quite interesting stuff), moving quickly into a little Linux and a lot of Bash scripting, sliding into a tiny bit of boolean algebra and logic gates, then diving into writing assembler (not x86 assembler).

Although, I came out of this subject unscathed and with good marks, a lot of people had a lot of trouble with this subject. The first assignment was writing four or five scripts in Bash. This doesn't sound too bad until you realise that the subject doesn't actually teach any Bash. We were referenced the quite terrible Advanced Bash Guide and given a lab or two and that's it. With Bash and Linux being quite different to Windows and Pascal (the language we learnt last semester), and almost no help from the subject itself, it was no surprise that many people had a lot of trouble with this assignment.

The other main assignment was a rather complex program written entirely in assembler. Again, a lot of people had a lot of trouble with this assignment. Assembler is particular complex (even for the simple chip that we were writing it for) and very different from normal programming (no branching, loops have to be written manually, etc). It also didn't help that the subject moved too quickly through the assembler and left everyone behind once they got lost at the beginning. A review meeting was held with the staff and the PSDs present and it was agreed that the assignment was to be made easier and the subject slowed a little. Once we had gone back over the basics and got them grounded better, most people started getting a grip on assembler. However, it was too little too late. I had a good grip on assembler from right at the beginning (I was able to follow the lectures better than most), but even I had to do the cut down assignment because there simply wasn't enough time to do the original assignment (this meant I lost marks automatically, which was nasty).

The subject was mostly taught by Rob Allen, with Raj Vasa jumping in at the beginning for some operating systems and Linux stuff. Although Rob is a really nice guy, his explanations were often hard to understand, and he moved too quickly through the subject without making sure people actually understood what he was talking about. Once he realised that people were failing the subject, he went back to the basics and taught them more slowly and most people responded well to that.

All-in-all, I quite enjoyed most of Computer Systems, although I'd probably be the only one in the course who'd say that. I found all the topics facinating, except for boolean algebra and Bash scripting which almost weren't taught at all, and subsequently were a pain in the arse.

Rating: 6/10

Internet Technologies

Internet Technologies was like a crash course in all things internet. It basically ran through lots of topics very quickly, ranging from TCP/IP to HTML/CSS, to Javascript, to accessibility, and to PHP. If there is one thing that this subject bashed into your head repeatedly with a large hammer, it would be to validate your HTML against the W3C standards.

The lectures were taken by Clinton Woodward and were mostly good. If anything, I sometimes found them boring because I already knew the stuff he was talking about, but whenever some new stuff came up, like some advanced Javascript or a good explanation for the CSS box model, I regained interest. So my boredom wasn't the subject's fault.

I found the labs entirely pointless because they were so ridiculously easy. I basically never needed to ask the tutor anything because I already knew it all. All the labs really did was further bash in the "validate, validate, validate" message deep into my skull.

The assignments were better. In the first assignment I had to group up with some friends and create a standard set of XHTML that each of us individually would style with CSS. We then had to present our work to the lab group in a presentation. Again, I found this easy, so I spent some time creating a dynamic stylesheet switcher in Javascript as an extra feature.

Although I knew most of this subject already, there was one main valuable thing it taught me: good standards. I taught myself HTML and CSS by hacking and Internet technologies showed me the way it should be done: standards compliant, don't use IDs more than once, etc. I look at DigitallyCreated's HTML now and cringe. I should update it someday, because its really shocking.

Rating: 8/10

Object-Oriented Programming

Object-Oriented Programming continued from where Algorithmic Problem Solving left off. It handled the transition from procedural programming to object-oriented programming. The subject was taught in C#, which was a new language for the PSDs to learn.

The subject was taken by Andrew Cain, and was presented in his typical Beyond Bulletpoints style that we found very effective when used in Algorithmic Problem Solving last semester. The lectures taught broad concepts which were honed and developed in the labs and assignments. Apart from one lecture, C# was taught only in the labs, which was very effective since the best way to learn a language is to practice it, not to hear about it in a lecture.

A lot of the OO design theory wasn't taught in the lectures in detail, and was left for reading tasks. This was rather boring, but Andrew had created reading questions to answer after reading the text book. They were a pain in the arse, but did their job well: forcing you to remember what you read. A much better approach than just straight reading.

Although, some OO design was taught in lectures, I found I learnt the most doing the assignments. The second assignment was the one that taught me OO. The assignment was to create a Zork style text-based adventure game. The actual design was already done by Andrew and we had to read his notes and implement it in C#. This was a really good way for us to look at how OO is done, without going in too deep initially by having to create our own design. Creating your own design was handled by assignments three and four.

Object-Oriented Programming was structured differently to other subjects. The third and fourth assignments were optional but required if you wanted to get a distinction or high-distinction respectively. There was one test and no exam (unless you failed the test). This was a good structure and meant that people who wanted high marks had to work for them, which is fair enough. Having a test instead of an exam meant that we could use computers during the test and write code on a computer (fancy that!). This was a good way of doing it, since it tested actual real skills, instead of the useless skill of programming on paper.

OOP was the best subject of the lot. It was challenging and interesting and taught me many valuable programming skills. I loved C# so much that I now count it as my main programming language.

Rating: 10/10

Usability

The content of Usability promised to be good: how to create applications that are easily usable by the end-user, however, the subject's implementation left a fair bit to be desired. My first disappointment with this subject was that Usability taught the theory behind creating usable applications, not actually how to create usable applications. Sure, it showed how to follow a process to research how to create a usable program, but there were no guidelines like "all popup dialogs must have an OK button".

The main problem with Usability wasn't what it was trying to teach, since what it was teaching was sensible and useful. The problem was how the information was presented. As you can image, theory on creating usable programs is dry, dull, obvious stuff that feels like its being overcomplicated and theorised for theory's sake. So how this content is presented is very important. Unfortunately, Usability's lectures had boring bullet-point slides with little information, no notes, and a textbook with too much information.

On the plus-side for Usability was its approach to assignments. There was one big assignment which was due in pieces throughout the semester. Although this was a good approach, I felt that sometimes each piece was due too soon, because the assignment was a team project, and team projects are difficult to get organised within short times such as a single week.

The assignment itself was mostly good. It took a practical approach to the theory and asked us to work through the process of designing a kiosk software interface. We started by collecting information like existing solution problems and users' needs. Then we designed prototypes and eventually performed a 'scientific' test on real human subjects by using a lab. This test involved having users sit down and use the system while we watched them through one-way glass and recorded their every movement and comment using cameras and microphones. That was fun.

All in all, Usability wasn't a bad subject, it was just a boring one. With a bit of work, this subject could be made a lot more interesting. You can tell the subject convenors tried to make it interesting by the way they made the assignment (thumbs up), but their approach to the lectures needs a rethink.

Rating: 5/10

Summer Scholarship 2006

The Summer Scholarship (SS) was a program that was offered to all PSD students through a voluntary application process. Only six PSDs were selected to participate, and I was lucky enough to be one of them. The SS was a four week program that was run a week after the exams finished. It ran 9 to 5 for three days a week and paid us a $1200 stipend at the end. The purpose of the program was for us to do some programming projects and learn things as we did it.

The six of us were split into three groups. Three of us worked together using PHP to create a web application based on the Werewolf game. Two of us worked on a C# minesweeper clone (to learn Windows Forms), and then rewrote it in Java using Swing (to see the difference). I worked on my own, creating a side-scrolling game called Escape from Swinburne.

I won't detail much more about the SS since I've talked about it before here and you can read the SS blog here. Basically, the Summer Scholarship was brilliantly fun.

Rating: 10/10

The second semester of PSD, while not as refined as the first semester, was still enjoyable. If the rough edges are smoothed, this semester could have been awesome.

Trivia: I actually started writing this blog in January, got three-quarters through, then got distracted by commitments to my web development business and University. Apologies for the drought.

Working Hard

Even though its the holidays, I have been working harder than ever. Currently, I'm working two days a week at my part-time job and the other three days at the Summer Scholarship at my university. Unfortunately, my preferred living style (going to bed really late and waking up as late as possible) doesn't work well with 5 days a week of full time work, so I've been tired as hell.

Luckily the work is mostly good: in my part-time job I have starting to be elevated from a mere software tester to a software developer. I wrote my first bit of code (in ColdFusion) for them on Monday! The Summer Scholarship is also great. I've been assigned a task where I have to create a simple API for creating games in the Pascal programming language, and to demonstrate that API with a side-scrolling game. The API will be used by next year's PSDs in their Algorithmic Problem Solving subject.

Writing the API in Pascal sucks, because I love real IDEs with code suggesting (Intellisense), and I'm using Crimson Editor (simple as hell text editor) to write my Pascal. Also, Pascal isn't exactly a language that is widespread, so learning it hardcore is (almost) wasted. I can't even use the object oriented features of the language since the APS students won't know OOP yet! The other guys get to write in C#, Java and PHP! But knowing that next year's APS students will use what I write makes it worthwhile and mollifies me.

Most of my blogging over the next three weeks will probably be on the Summer Scholarship's PictBlog at Blogspot, so keep an eye on that. As a side note, Blogspot's blog editor sucks. I had to edit my post there at least six times before it was correct. The worst problem was, for some reason, my text didn't word wrap and it poked out over the right-side navigation menu (overlapping it) and stretched the page. Hopeless.

Outside of work, I have also been busy writing the PHP for Aurora, the CMS that will power web solutions created by Pulse Development (my cousin and I's web design business). Aurora is written in PHP and I was happy to find that PHP 5 has almost all the OOP features that C# has: interfaces, inheritance, polymorphism, etc.

Aurora will power this website once its done (in fact I'll use DigitallyCreated as a kind of test bed for Aurora), so you'll get a nicer blog and news interface, and it'll be a hell of a lot easier for me to update it (hopefully increasing my blog count). Also, you've probably noticed this page getting stupidly long; Aurora will split it automatically over multiple pages. It will also do automatic generation of the RSS feeds for this blog (thank god, I do it manually at the moment!).

Finishing up, I'll leave you with a warning: I read an article over at the INQ about one of their reporters who got RSI (yes, that thing you ignore the warnings about). The afflicted hack wrote an article about his experiences with RSI and it sounds entirely nasty. He ended up with arms that didn't work. Normally, I don't really read this sort of stuff, let alone get worried about it, but this hits close to home since I do a lot of typing and I really don't want to break my livelihood (you can't code C# with speech recognition when your arms are stuffed). I would suggest you read it, so as to avoid it yourself. Find the article here.

Just a Little Wibble

Bah, I seem to be attracting hardware failures of late. The new stick of RAM I bought for my laptop in June decided to up and die, corrupting my Windows installation along with it. Luckily it has lifetime warranty, so I didn't lose anything, except my patience with the sluggish remaining 512MB of "not enough" RAM and having to reinstall everything which sucks when you're a developer (it takes ages).

But let's move onto the more interesting things. What I've begun doing is having a folder in my bookmarks in Opera, and when I get a particularly interesting article I stick it in there to write about later. This should mean I will blog more frequently*.
* Terms and Conditions Apply. :)

So. The first item: Windows PowerShell has gone 1.0! As we all know, the standard command prompt and scripting offered in Windows blows when compared to Bash in Linux. PowerShell is here to rectify that. However, don't go jumping into it thinking that you can just run all of Windows from the shell. Windows is still a strongly GUI-centred operating system and you can't just run the OS from the command-line like you can in Linux. Certainly it has been touted to make Windows Server administrators' lives easier, but unlike Linux, most apps for Windows aren't written with command-line functionality or COM interfaces.

The PowerShell syntax is a weird amalgam of C# syntax with a little Bash and some weirdness thrown in there for good measure. I almost wish it was more C#ish; just some things like the equality operator being -eq, as opposed to the more C-style ==, seem strange when you are doing C# style foreach loops.

Where Bash is often centered around plain text hacking, PowerShell does it differently. When you "pipe" things around you are piping objects. Yes, PowerShell is weirdly object oriented. Kind of. PowerShell is built on top of the .NET Framework, and it shows through. Passing objects around instead of plain strings is better since different cmdlets (pronounced "command-lets", these are the commands in PowerShell) can act on the objects differently without the need of string hacking ala Bash. For example, instead of (in Bash) getting a list of files, using awk to rip out the filenames then throwing them into file, PowerShell does it by getting objects that represent the files and passing those objects to some other command which will extract the filename object property and write them to a file. Its a crappy example, I know, but I haven't spent a lot of time in PowerShell yet. :)

If you're interested, you can download PowerShell here, and read a rather good starter tutorial here. In my summer holidays I'm looking forward to fiddling around more in PowerShell.

The next item on today's agenda: threading in the Source Engine! If you don't know what the Source Engine is you either live under the "I don't play computer games" rock or you play way too much Starcraft. For you people, the Source Engine is the game engine that powers the bestselling Half-Life 2 game and has been licenced for other good games like Dark Messiah - Might and Magic, and Sin Episodes.

Most game engines these days don't properly take use of dual/quad core CPUs because they are not "multithreaded". A program that is multithreaded has multiple lines of execution all running concurrently. This means, on a multi-core computer, more than one thing is happening at once. If your game isn't threaded it pretty much means a whole half (or three-quarters or whatever) of your CPU is going to waste. So its an important thing for games to become multithreaded.

Valve (the makers of the Source Engine, oh uneducated ones :P) have started work on making the Source Engine multithreaded. This is difficult since threading can be a real pain in the butt and will require a large amount of the engine to be rewritten. There are three main ways that multithreading can be done in a game engine: in a coarse fashion, in a fine fashion, and in a hybrid fashion that uses elements from both coarse and fine.

The coarse fashion is where different game subsystems are put on different threads. Valve found this to be ineffective in utilising the entire CPU fulltime. The fine fashion is where low level tasks are split across cores. This method was also unsatisfactory since not all tasks are well suited to being split in this fashion. Valve settled on the hybrid method which pretty much means it uses the coarse fashion where it suits the problem and the fine fashion where it suits the problem. This way is the most complex but it scales well and maxes out the CPU.

What Valve has done is to create N-1 threads (for N cores on the CPU) with the other thread being the master controller thread. Valve uses lock-free algorithms to help remove the problem of threads sitting around blocking (doing nothing) while they wait for access to data (two threads cannot write to the same piece of data at the same time, that would be bad).

Multithreading in Source can only bring benefits to Source-based games. I know that currently half of my CPU (1 core of 2) sits around doing nothing when I play games, and last time I checked I didn't fork out good cash for it to be slacking! There is a full on article about multithreaded Source which goes into more detail and has a good focus on the technical side of the threading, which a lot of the other articles about this didn't.

A nice thing to hear is that Valve uses iterative development on the Source Engine (building and improving it piece by piece over time, rather than writing it and then rewriting it from scratch for upgrades) because my course at University likes to rave about iterative development. Wonder whether they do unit tests :).

And finally on today's show is a little something to back up my rant on Apple a few blogs ago. I will now degrade into IM-speak: LOFL, ROFLMAO, LOL.

Rebutting Rednecks

Its been a while since the last blog as I am ridiculously busy with university work. Anyway, just to keep the raving masses at bay, I'll chuck in something that I found very funny and very, well, right.

Here's the story: The Inquirer published a story that took a jab at Dubya and the Americans. They got this reply from an angry redneck reader:

The folks in Europe should be damn happy that the U.S. is willing to protect your asses from the many rogue nations who can reach your country with missiles. When the time comes to prove our mettle - and it will, the U.S. will stand and fight to protect the world as we have done for centuries, unlike the rest of the western nations who pander to political agendas.

A European reader (I assume he's British) replies:

I wonder idly, just which are those "rogue nations" that "can reach your country with missiles"? Most of the "rogue nations" denounced by the US administration are conspicuous by their lack of missiles. The "Axis of Evil" - from memory, Iran, Libya, and North Korea - don't have a single ICBM between them. Nor, AFAIK, a single functioning nuclear "device". On the other hand Russia, China, India, Pakistan, Israel, and France have nuclear weapons and missiles. Which of them is a "rogue nation" in the eyes of Americans? Oh, and which is the only nation that has ever used nuclear weapons on another country's civilians?

I wonder, if push came to shove and someone decided to turn these isles of ours into smoking ruins, if the Americans would really lift a finger to stop them? Especially if that involved risking any of their own tender pink skin.

They certainly didn't lift a finger to help us fight Hitler and Mussolini, until those blokes declared war on them... two years, three months, and a few days after the real war got under way. They looked on calmly (and safely) through Dunkirk, the Battle of Britain, the Blitz, the evacuation of Greece and Crete, and the invasion of the USSR.

I wonder how many Americans nowadays know that:

1. The USA remained neutral for the first 27 months of the great war against Fascism.

2. The USA did not enter the war until the Japanese sank its fleet at Pearl Harbor, and Hitler personally declared war on it. After those events, they were at war whether they liked it or not.

3. Britain paid in full for everything the USA sent to support the war effort - even the retired WW1 destroyers that the US Navy didn't think were good enough to send its own sailors to sea in. Actually, we finished paying either last year or this year, depending on which government department you believe.

It was interesting to hear Randy tell us how the USA has protected the world "for centuries". Hmmm, that would be all two and a quarter centuries, since it came into existence. In the 20th century, the USA protected about 25 nations - for instance by killing 3 million people in South-East Asia, and bombing more countries than the Luftwaffe did in 1939-45. It also protected the Philippines, where its forces killed only about a quarter of a million people while liberating them from the Spanish (who had actually left some time before).

How about the 19th century? There was the protection of the Native Americans, which reduced their numbers by over 99 percent and caused them generously to hand over all their land to the USA. There was the protection of Texas, California, and what are now several other states of the USA, which were forcibly stolen from Mexico against the wishes of their Mexican inhabitants. Then there was the invasion of Mexico itself, which led General Grant to say: "The Southern rebellion was largely the outgrowth of the Mexican war. Nations, like individuals, are punished for their transgressions. We got our punishment in the most sanguinary and expensive war of modern times".

All this was admirably summed up by H. L. Mencken (himself an American):

"All [of the Americans’] foreign wars have been fought with foes either too weak to resist them or too heavily engaged elsewhere to make more than a half-hearted attempt. The combats with Mexico and Spain were not wars; they were simply lynchings".

Source: http://www.theinquirer.net/default.aspx?article=35261

Bad Apple

Apple really gets my goat sometimes. I'm not going to turn this into an Apple bashing session, because I honestly like what they make. They make a good operating system that is, in many ways, superior to Windows. Their computers are really nice looking with some nice features, especially now that they are x86 based. Their software, for example iMovie, is very nice.

But it really gets my goat when Apple acts like a spoilt brat. I only follow Apple based activities with a cursory eye, and get major overloading updates from my Mac man friend even now and again. But when I see Apple making ads like their "Mac Guy, PC Guy" ones, that really pisses me off. For an example, go watch this.

I'm going to drop an expletive here, so if you don't like that then skip a couple of words. Fuck you, Apple. Fuck you. Okay, I've got that out now. I find those ads rather offensive. Kind of like if Apple came and spat in my face. They are incredibly derogatory and worse, condescending. They completely disrespect any person who uses a PC over a Mac. In fact, it reminds me of a child who screams at their parents trying to get their attention. I'm sorry, Apple, but face the facts. You own, what?, two percent of the market? Consumers vote with their wallets and you lost 98 to 2.

Their TV ads are nothing less than straight propaganda. For example, their viruses ad. They quite correctly state that PC's have lots of viruses and Macs don't. Okay, known fact. What they fail to tell the average consumer who knows nothing of this type of thing is that the only reason Mac OS X doesn't have viruses is because no one uses it. If anyone used it, say 98% of people (*cough* like Windows *cough*), then it would have viruses.

Plus the whole PC guy, Mac guy stereotype thing. Apparently, all PC guys wear boring business suits, wear glasses, are overweight, and have bad hair. Mac users are the "cool, hip" guys. Again, I find this offensive. I'm sure there are PC users out there that look like that PC guy, but I can guarantee you that there are Mac users like that guy too. I can also guarantee you that I know lots of "cool" people who use PCs. That would be, ahh, most of the population. And really, judging people by their looks is incredibly childish. Remember the saying "Don't judge a book by its cover"?

Another thing that annoys me about the Apple ads it that they openly piss on Microsoft. Okay, Microsoft has screwed up a bit. But standing back, pointing and laughing really is a particularly childish thing to do. And that fact that Microsoft just takes it, not a word said in return. That, that simple act of not getting involved, and of not lowering themselves to Apple's name-calling level instils great respect for Microsoft in me. It draws parallels with the things you were told as a child: "If someone is being nasty, simply ignore them. Don't lower yourself to their level."

All this crap was brought to my attention by Paul Thurrott who wrote a brilliant article article about Apple's new upcoming OS X version versus Vista. I heartily recommend you read it, it really sums up my feelings about Apple. Paul doesn't support Microsoft, per se, but he sure shows that he does not approve of the propaganda that Apple generates daily and their pathetic childish attention seeking.

And the worst part is, people lap it up. People lap it up. Especially Mac fans. Have you noticed that for an Apple fan, Apple can do no wrong? A slight exaggeration would be if Steve Jobs told a Mac fan to run off a cliff, the guy would do it. Anything Apple makes is instantly legendary in the eyes of their fans. An example:
Jobs: "Hey Mac users! We want to completely change the operating system from Mac OS (OS 9) to Unix (OS X). This means none of your applications will work anymore (unless you emulate, which will be discontinued shortly)! We also are not letting you install OS X on older hardware. That's right, you have to buy our expensive upgrades! How do you like that?"
Mac fans: "Yay Steve, I'll buy a new computer just for you. You are so right in doing this!"
They are almost religious in their fanaticism.

Also notice the constant upgrades in Mac OS X. Steveo sees this as a good thing. No Steve, its not. Not when new apps are locked from running on the old OS X versions (eg iLife), forcing you to upgrade Mac OS X for a fee. If that happened in Windows, Microsoft would be shot. Notice Windows' massive backwards compatability? Christ, if Jobs started sending empty cases to users instead of computers, the fans would just go "What an innovation! Look how light it is! And it doesn't need cooling! Suck on that PC users!"

What also annoys me is the claims that Microsoft has been sitting on its butt twidling its thumbs since XP. Okay, so it screwed up Vista big time, but what about all the other stuff. For example, .NET Framework 1, 1.1, 2.0. Visual Studio 2002/3/5. C#. Just because Microsoft stuffed up making its operating system for a couple of years doesn't mean its completely useless and makes nothing good. On the contrary. .NET Framework and C# brings a whole new dimension to easy development of stable systems.

People don't realise how good they've got it with Windows. And how hard it is to make an OS like Windows in comparison to Mac OS X. Windows has massive hardware support. Mac OS X has Mac hardware only. Windows is massively backwards compatible, Mac OS X is not. Windows can run everyone's software and makes software development a breeze. Mac OS X has little software in comparison.
Windows' backwards compatibility is the thing that really limits Windows' development compared to Mac OS. Microsoft doesn't have the luxury of a rabid fan base that won't mind upgrading completely to run applications. Jeez, enough people are bitching that Halo 2 is only for Vista, and that Vista won't run well on crappy hardware. If Microsoft could throw away their current code base and redesign like Apple did with Mac OS 9 to Mac OS X, I think Windows would be freaking awesome.

Some of Apple's claims of "stolen features" also annoy me. Paul Thurrott in his article expressed that especially well. For example, Spotlight, Mac OS X's instant searching utility that they stole off Microsoft. Ok, so they got it to market first, but it was Microsoft's idea originally.

Damn, I guess this did turn into an Apple bashing session. My main point is not that Apple makes bad products, on the contrary, their stuff is excellent. But the fact that they behave like goddamn schoolchildren with their (white)lying and name-calling. I could put up with their selective information advertisements/propaganda where they don't tell the whole story. But the derogatory PC guy vs. Mac guy ads really piss me off. It just shows how insecure they are if they feel the need to drag others down around them. Their vying for attention like a short kid jumping up and down in a crowd of tall kids is nothing short of pathetic.

If you haven't yet read Paul Thurrott's article, go read it now. Its a must-read eye-opener.

Review of PSD 2006 Semester 1

Ah yes, I have been putting this off since I am lazy, but now with Semester 2 in full swing, I thought I’d better get to it before I forget it.
I do the Professional Software Development (PSD) course at Swinburne and this is my first year. I had four subjects in Semester 1, so I will review each of them, one at a time.

Algorithmic Problem Solving

This subject involved learning the very basics of programming: how to write code, and how to solve problems using standard coding structures eg if, while, for etc. The subject used Pascal as a syntax simply because Pascal is a good teaching language. One of the advantages of this subject is that it doesn't throw the student straight into object oriented programming from the get go and gets them used to procedures and functions etc first.

It was very easy for me since I have done lots of programming before, but that didn't stop it from being the best subject of the semester. It was taught by Andrew Cain, a very good lecturer who brings his enthusiasm for programming to every class. He also does away with bullet-points in lecture slides, and uses more graphics and animations to convey his concepts, which helps alleviate the boredom that most lectures entail.

The exam for the subject was very easy but it did, however, cover all the work that we had done that semester so I think it was justified in being easy. The fact was, if you could do what was on the exam, then you had done the work during the semester and that’s what counts.

Rating: 10/10

Database Analysis and Design

This subject was a simple introduction to databases. It taught the student how to properly design a good database in third normal form, and also how to program databases using SQL. The lecture slides were incredibly detailed, which made this subject very easy to learn since you could just look at the slides if you needed answers.

The tutorials, however, were not so flash. The guy who took our tutorial obviously spoke English as a second language so it was clear that he often had trouble answering questions not because he wasn’t good at databases, but because when questions were shot at him in English he got easily confused. The result normally ended up with a “chasing your own tail” situation where your question didn’t get answers. That said, the guy was extremely helpful when I needed my assignments to be remarked.

Which brings me to my pet bitch about this particular subject. I had to have two out of three assignments remarked because they had been marked incorrectly. This really annoyed me because is showed lack of care on the part of the markers and/or incompetence. I really should not have to teach the subject to them.

The labs for this subject were particularly useless, again not because of the work material, but because of the lab tutor. She was pretty useless. All she did was sit there until someone asked a question and when they did (at least whenever I did) she invariably either didn’t understand the question, or got the answer wrong.

However, the subject on the whole was good and I learnt some very useful database design techniques which I will be putting into use soon.

Rating: 8/10

Computer Logic and Essentials

This subject strove to give a shallow understanding of the mathematics behind computers. So it taught things like binary, hexadecimal and normal base 10 number conversions, encoding schemes, predicate logic, set theory, relations and functions and graph theory. The way the subject skimmed over these topics was ultimately the thing that made it hard for me. In mathematics you need a full understanding of how things work to be able to get things right. Because we only skimmed the surface of topics in this subject, we often didn’t know whether something was right or wrong. This was especially evident in the predicate logic section where we were taught a loose notation that resulted in a lot of different correct answers. This made learning a little difficult. That said, we did need to skim over the subject materials because otherwise there would not have been enough time to learn it all. So this really was more of an awareness subject.

CLE was taught by Raj Vasa, another good lecturer who has a great style where he can talk about a subject in a very casual and informal way, dropping in funny comments and opinions all the time. This meant, even though the subject material could be a little dry, the lectures were never boring.

What annoyed me most about this subject was that it didn’t give us many exercises to practise on. You should take that statement with a grain of salt, since I am not your average student and in maths subjects I like to have lots of exercises to learn from. The exercises that we were given did not come with answers, which is my pet bitch about this subject. This made it very hard to verify your work because you had to manually go and see Raj to get answers instead of just checking an answer sheet.
Raj said this was because he didn’t want people just looking at the answers rather than doing the questions. However, I feel that since this is university and supposed to be a self-learning environment, anyone who scuppers themselves doing that can deal with it themselves. Their stupidity should not limit others.

Rating: 8/10

Introduction to Business Information Systems

There always has to be one crappy subject, it seems, and this is it. Introduction to Business Information Systems (IBIS) attempted to teach you how IT integrates and is used in business. Sounds good, but it wasn’t.

To start with, the lecture content was a mish-mash of topics, which would switch around in a lecture making it very hard to figure out what was going on. The lecture slides were bad, barely explaining the content of the lecture and full of diagrams that meant absolutely nothing. One of my friends only turned up to four or so lectures and still got a good mark for IBIS. That’s how useless the lectures were.

The tutorials were also bad. I didn’t get a single thing out of the tutorials. There were no exercises to be answered, nothing. Just discussions on seemingly irrelevant topics. The labs were also useless, teaching us how to use Excel and Access. Things like: to open Excel go Start menu -> Microsoft Excel. I’m sorry but this sort of thing is taught in school, we don’t need it again. I finished all the lab work for the semester within scant weeks and didn’t turn up to any subsequent labs.

The textbook was bad. It was boring, full of diagrams that made absolutely no sense, and seemingly expected us to know what the world had been like before computers so that we could see the impact. I’m sorry, but I wasn’t alive when that time passed into obscurity, so how am I supposed to relate to that. It made a big deal about things like portals and transaction processing systems etc things that people my age take for granted. Trying to look at those from the eyes of someone who never had that stuff is impossible for me, because I don’t know what it was like to not have it.

Luckily, for those PSDs taking the course next year, our bitching about how bad this subject is has caused this subject to be removed from the course, which is brilliant.

Rating: 3/10

So all in all, Semester 1 was pretty good, with the exception of IBIS.

Guilty Confessions

I know, I haven’t blogged much lately, and I’m sorry. Ironically, I have less time to blog in the holidays than during the semester. “What?!” you say. In the holidays I am doing things that I like, for example writing my Command Console C++ program, and thus I am less likely to spend time on things I like less than coding eg blogging. But during the semester, procrastinating from working means that I “make” time to blog (so that I don’t work).

Anyway, the last blog I wrote (Smackdown for Conroe) you can pretty much forget, since apparently, reverse hyperthreading is not real. So the Conroes are kicking the crap out of the AMD AM2 CPUs. Ah well, such is life in IT. You buy some tech and it gets outdated straight away.

I also have another guilty confession. I have started to use Windows Live Messenger (WLM). I normally use Skype, but unfortunately I need WLM to talk to people at university, so I’ve had to install it.

It really is an inferior piece of software compared to Skype. The instant messaging experience is crap. For example, Skype manages somehow to remember when a conversation gets broken across a 6 hour gap and brings up the previous messages sent, so I can remember what we were talking about. WLM just erases it and starts afresh.

Skype also doesn’t have advertising crap shoved in your face, like WLM does. However, I have ripped that crap out of the software with a patch called A-Patch. It also lets you remove other annoying things like “Buy a Webcam” links and other useless teeny-bopper buttons and rubbish.

Skype also, in instant messaging, shows the difference between who’s message is who’s by putting a colour background behind the “Daniel says:” part and different colour background behind the “Daniel’s friend says:” part. In comparison, WLM relies on you to change your text colour. Too bad if yours is the same as someone else’s.

However, I will give some kudos to the WLM development team. It has come a long way since I used to use it years ago. The fact that voice chat works now, the shared folders feature, etc are all good new things that WLM has.

Smackdown for Conroe

I always feared the upcoming Conroe cored Core 2 Duo CPU from Intel because it was promised to kick the crap out of AMD's Socket AM2 processors, one of which I currently own. The reason I didn't wait to get a Conroe rather than the Socket AM2 CPU I now have was because I didn't want to wait until August to get one. August is too late because I wanted my new computer for my University holidays (July).

I figured that the long lifespan of the AM2 socket would allow me to easily upgrade the CPU if it got too weak in the future. Also, the Conroe only really kicked the crap out of the Socket AM2 where games became CPU dependant (eg at a massive framerate). And in that circumstance I thought that it didn't matter whether my new computer got 170 frames per second rather than 200.

However, according to The Inquirer, AMD has had a wildcard in their sleeve just waiting for Intel. Socket AM2 CPUs have the capability to do "Reverse Hyperthreading". For those who don't know, Hyperthreading (or HT) is a process that Intel pioneered that allowed two threads to run consecutively on a single CPU core. I had this technology in my last Pentium 4 computer and I can vouch for its usefulness: multitasking was improved. However, with the advent of dual core processors, HT was no longer necessary so Intel stopped using it.

Reverse HT, as the name states, is a process that AMD is pioneering that allows a single thread to run across multiple cores. This technology has the potential to solve all the problems with dual core technology.

The problem with dual core technology, as I see it, can be summed up with this saying: "you can't make a baby in one month with nine wives". Basically, before Reverse HT you couldn't run a single thread across more than one core. Most applications are single threaded and a lot of them cannot be ported to be multithreaded programs (not to mention multithreaded programming is reportedly a pain in the proverbial). Therefore, most applications run slower on dual core CPUs because each core on the CPU is actually slower than a core on a normal single core CPU. Therefore, dual core CPUs aren't actually faster than single core ones for single threaded applications.

Reverse HT can turn all this around. With the ability to run a single thread across two cores, the speed bonus that multithreaded applications have enjoyed from dual core CPUs can now be realised with single threaded applications.

According to the INQ article, Reverse HT on Socket AM2 CPUs has the potential to kick the crap out of the Intel Conroe CPUs, or at the very least, bring them back in the running, out of Conroe's dust. And the best part: this technology is already on current Socket AM2 CPUs eg mine! This means shortly my new computer will kick more arse than it currently does (which will be a lot of arse! :D ).

This is just perfect timing for AMD, hiding away the news of Reverse HT, letting Intel get everyone hyped about Conroe and how good it is, then at the last moment before Conroe is to be released, after Intel can do anything about it, smacking down Conroe with Reverse HT Socket AM2s.

Score 2-1 for AMD and therefore myself.

Phoenix Reborn

Since my last computer (Phoenix-II) sizzled and burned, I have bought an entirely new rig. This time I was not stupid and I did not buy parts at the end of their lifetime; I got Socket AM2 parts which are all new and AMD has promised to continue using the socket for at least two years. I ordered the parts and within 3 days Scorptec had got them all, which was amazingly fast. I can highly recommend Scorptec to anyone wanting computer parts. They don't have the best prices but their service is very good and their warrantees are long. The parts I got were:

  • AMD Athlon 64 X2 4200+ (Socket AM2) CPU
  • ASUS M2N32-SLI Deluxe motherboard
  • 2 x Corsair 1GB PC-6400 DDR2 RAM, 4-4-4-12 timings, with EPP
  • XFX 256MB Geforce 7900GT "Overclocked"
  • Silverstone ST60F 600W PSU
  • 3 x Seagate 250GB 7200rpm SATAII 16MB Cache with NCQ HDDs to be RAID5ed
  • Lian-Li PC-V1000B Plus case
  • Creative Audigy4 sound card

Here's a picture of them all still in their boxes. Lovely.

First things first, I had a nice look inside the case. It turned out the power supply was too big for the case in its current format. This meant I had to remove the second hard drive enclosure to make space for it.

So I then started installing parts into the box. As you can see the whole operation made a big mess of my room. First up, the hard drives and optical drives. Then I installed the motherboard, but when I got to the CPU I hit my first bump.

The instructions for installing the heatsink on the CPU were to first hook one side of the heatsink clip and then the other side of the clip onto the retention bracket then turn the securing handle which pushes the heatsink firmly down onto the CPU to ensure a good thermal contact and to make sure it is secure.

So I clipped on the heatsink but it needed a fairly large amount of pushing to make it go on. Then, when I tried to turn the securing handle, it refused to move. Obviously, the clip had gone on wrong or something. Unfortunately, now the heatsink was on tight and wouldn't come off. So I had to unscrew and remove the entire retention bracket to remove the heatsink. Once off I could dismantle it and then clip it back on properly. This time the securing handle turned fine. So I screwed the retention clip back onto the motherboard and this time the heatsink secured fine. Phew.

Next up, the memory and graphics card and then the rest of the components. In this picture you can see the back side of the case where I routed some of the wires. And in this picture you can see everything inside the computer. You can see the funnel that directs air from the back 120mm directly over the CPU and the specialised extraction fan that juts out over the graphics card to blow its heat out the back of the case.

Overall I was a little dissatisfied with the Lian-Li case. Lian-Li is supposed to be a very high quality case manufacturer, but I was underwhelmed by their offering. The case was not entirely toolless which is what I would have expected. I had to use a screwdriver numerous times, especially since the 5.25 inch drive bays needed screws to hold the drives in. This is normal for most cases, but the last case I worked on (the Cooler Master Ammo) cost a third of the price and was completely toolless. Also, getting the back side door off requires nothing less than a pair of scissors for a lever since it is so stiff; fingers are simply too weak (and painful). A bit of WD40 might fix it up, but I'm sorry, Lian-Li is supposed to be engineered to perfection (especially considering the price). Also, this case does not have a removable motherboard tray, a feature, I am told, is extremely useful and was included in Lian-Li's last case design (the PC-60). Although all the internal case edges are supposed to be rounded, I can say by experience that there are still enough edges to cut yourself on. I had my fair share by the end of the build.

That said, the Lian-Li is very effective at cooling the computer. As you can see in that last picture, the redesigned interior, the 120mm fans and the GPU heat extraction fan are very good at removing heat. The fact that the case is also full of holes also contributes to greater airflow. The Lian-Li is very quiet which is beautiful after my last PC (a scorchingly hot Pentium 4 because of Intel's terrible NetBurst architecture) which was irritatingly loud.
Overall, I'd probably give the Lian-Li a 8/10.

The next bump on the road was trying to install Windows. I had downloaded a free, but legit, copy of Windows XP thanks to my university, to save me the trouble of ringing Microsoft and trying to get them to reactivate my old XP copy on my new machine. It turned out I needed to supply the XP install with supplementary drivers for the RAID array. But the XP install just crashed whenever it tried to read them from the floppy disk. So I was forced to create a custom XP install disc that had the drivers already included. nLite is a beautiful program that allows you to do that as well as slipstream in SP2 and hotfixes.

I've since installed all my games and programs and I am happy to say that Phoenix-III is a roaring success. Here are the benchmark score it has earned:

  • 3DMark03 (Default Settings): 18031
  • 3DMark05 (Default Settings): 8813

The Digital Book

I was chatting to my uncle and we were discussing the idea of a digital book. We are both avid readers and with bookshelves overflowing and a growing tendency to read books on the computer screen we were fantasizing about the idea of a digital book that would allow us to store all our books in a digital format and read them on a screen that is completely portable.

So I had a think about how this could work. Firstly you'd need a screen that was only a bit larger the size of one paperback book page. I decided against two pages side-by-side since that would make the screen too wide. Keep in mind I am trying to design this thing to be operable in all conditions that a normal book is, eg in bed. A computer currently doesn't have the luxury of a bendable screen (yes I know they have make LCD paper style stuff but its too expensive for this project) and two pages would make it too wide to be practical while lying on your side in bed.

This screen would have to be of reasonable resolution because there is nothing worse than trying to read small text on a screen whose resolution sucks more than a vacuum cleaner on steroids. People normally hate reading off a screen so it needs to feel natural or people won't use it. The backlight needs to be decent and its brightness adjustable, so in the dark the screen won't become too glarey.

On either side of the screen, just about where the average thumbs would rest if the "digital book" was held from the bottom corners would sit, there would be back and forward buttons. Obviously, these would be used to turn the pages. You get back and forward buttons on both sides of the device to take into account which hand the person is holding the book with (so you end up with four buttons).

"Books" would be saved on a small flash memory stick like a Sony MemoryStick or an SD Card or CompactFlash or some such. That way its easy to buy books: you jump online, go to a book selling website (eg Amazon) buy the book and download it onto your flash card. Smack the flash card into your digital book and, bang, there are all your books. Perhaps real physical book stores would have terminals you could take and plug your flash card into and buy books which are transferred onto your flash card after payment.

Powering the Digital Book can be a piss weak CPU. Obviously a big beefy CPU is not needed to simply display text and perhaps a few JPGs, and the slower the CPU the better. A slower CPU would use less power and in this case battery life is paramount.

The Digital Book needs awesome battery life. I think that a Digital Book needs at least 8 hours of battery life. At LEAST. Why? Because the longest time you are ever going be reading away from an emergency power point is either on a car trip to somewhere distant like Melbourne -> Sydney or a plane flight. And those activities often take around 8 hours. Perhaps longer, but I doubt people read the whole flight from Melbourne to Los Angeles (its 15 hours off the top of my head).

On to the Digital Book's software. Ahh, my personal speciality, software. The Digital Book will need to be able to display its books in an easy to read way on the screen. Text size should be adjustable, so for me I'd have it as small as possible and for the more ocularly challenged the text could be bigger. This means that, unlike PDFs, the amount of text displayed on each page needs to be able to change. I'm not talking zooming. I'm talking about a book being 400 pages with small text, and 600 pages with larger text. The text is not saved on a particular page number but it instead flows. Pages are dynamic.

Well that throws PDFs out for the file format of choice. That sucks since you can already buy books online in eBook format. So a new format is needed for this Digital Book. I think an XML format would be easiest. A schema something along the lines of this could be used:

<book name="Souls in a Great Machine">
    <chapter number="1" title="Champions">
        <paragraph>The girl moved with the calm confidence ...</paragraph>
        <paragraph>The lunar surface was the familiar...</paragraph>
    </chapter>
</book>

That way, the displaying of the text is completely separated from the way the text is saved, unlike PDFs where text is on a specific page and cannot move. The Digital Book would display the text the way it needed to. In that manner, different types and sizes of Digital Books could be made, each displaying the text in a way that best suits it.

You would need to be able to save bookmarks. Perhaps the bookmark would even be saved in the XML book file itself although I think a separate file would make processing easier and smaller in amount (remember the less the CPU is used the longer the battery life). A bookmark cannot be saved as a specific page, since pages are dynamic. Paragraph number seems to be the best bet here. I haven't experimented with XML enough to know whether the schema above would work with that, so the end schema might have to be different.

The Digital Book would also be able to show the list of books stored on the flash card. The user would need be able to open the book of his/her choice and resume a bookmark. A touch screen seems to be the best method of implementing user input here, but I am not sure of the power requirements of such screens and whether they would damage the battery too much.

Fonts are an interesting problem. Different people seem to find reading different fonts easier. So a dynamic font system seems important. Perhaps the flash card could also hold TrueType fonts which the user can select from through the touch screen. Again, the dynamic page layout helps implement this since no font is the same.

Here is a really crappy picture that I made to kind of show what it might look like. Obviously someone who knows art and design would make it look nice, and someone who does usability and ergonomics would place buttons in the right place, but you can get the idea.