ByteClub

RajIs the web ruining everything? I do not think so.


"When printed books first became popular, thanks to Gutenberg's press, you saw this great expansion of eloquence and experimentation.

All of which came out of the fact that here was a technology that encouraged people to read deeply, with great concentration and focus.

And as we move to the new technology of the screen ... it has a very different effect, an almost opposite effect, and you will see a retreat from the sophistication and eloquence that characterized the printed page."

-- Nicholas Carr http://www.theatlantic.com/doc/200807/google (Is Google Making us Stupid?).

Well written quote -- almost convincing. But wrong!

My own feelings are that there is a clear and perceptible change in how we access, use and process information. Over time, good communicators will learn the use (and abuse) the new medium of web to ensure that the message gets across.

Sadly, I keep hearing far too many people rant that younger generation are being ruined by the web, multi-tasking, mobile phones, [[insert random item here]] far too often, especially in the ivory tower where I currently work.

If anything, we are still evolving and learning to make effective use the web. There is still a lot of experimentation that is taking place -- new ideas are being generated -- tried -- some live, some die. Overtime, some level of stability will emerge and we will learn to make effective use of the technology.

The web and Google are not going to make us stupid. The human-kind is capable of stupidity without any external inputs. The real stupidity is in the assumption that the web generation is going to be permanently distracted and be ruined by the web. Making statements like the web is going to make us stupid or is ineffective communication medium is like watching a baby learning to walk and conclude that the baby has no hope of ever running.

It is far more likely that the generation that grew up with the web and mobile technology will adapt to the new environment and figure out the most efficient and effective way to use it.


RajA decade of technology ...

I just wanted to sum up the decade that has just passed by in terms of technology. The list is from my own perspective and in no particular order....


  • Hardware: USB Memory Sticks, Multi-core, LCD panels, DDRx memory, iPhone, iPod, Digital Cameras
  • Comms: ADSL2, Wi-Fi, Bittorrent, Digital TV
  • Web: Google search, Blogging, RSS feeds, GMail, Reddit, Firefox
  • Social web: Facebook & Twitter
  • Apple - Amazon - eBay - Salesforce
  • Op.Sys: OSX, Ubuntu, Windows XP
  • Wikipedia
  • Slashdot still survives to serve the geeks (briefly distracted by Reddit/Digg)
  • Adobe Flash (I hope this one does not make it on the list for next decade)
  • Dev: Java, C#, AJAX, Web apps.
Winners: ADSL2, WiFi and AJAX

Andrew CainLocking a Mac

Leaving your mac sitting logged in on your desk is not very secure... is there an easy way to lock access to your machine when you step away? Unfortunately there is no ctrl-L style key combination built in, but you can get the same effect using the Screen Saver and hot corners.
  1. Open System Preferences, and move into the Desktop & Screen Saver preference pane.

  2. Click the Hot Corners button and have the screen saver start when you move the mouse to one of the four corners of your screen. I use the top left corner. Then click OK, and Show All to return back to the System Preferences window.
  3. Now open the Security preference pane.
  4. Finally set the Require password n seconds after sleep or screen saver. I use the 5 seconds setting as this gives you a few of seconds to move the mouse when the screen saver kicks in when you are reading a document or similar.
  5. Now when its coffee time just move your mouse to the appropriate hot corner and your screen saver will lock your computer.


RajSomething scary from USA

I was playing around with Google Insight to see if there are any interesting trends regarding an improving economy etc.

If you select the link below, it will take you to the search trend for "unemployment benefits". Watch the animation of the search volume over time (the controls are under the map of USA).

See: http://www.google.com/insights/search/#geo=US&q=unemployment+benefits&cmpt=q

I also tried: "food for free"
http://www.google.com/insights/search/#geo=US&q=food+for+free&cmpt=q

Sadly, both of these are trending upwards. If you want to see the scary 'unemployment trend' (the video below is really quite sad and scary, especially since behind the abstractions are 'real people' that are not in a happy place.

------

Just in case you are wondering if there is anything that actually is stable -- it is "insurance"
http://www.google.com/insights/search/overviewReport?cat=&q=insurance&geo=US&cmpt=q#



-- rv

Andrew CainRegex for Tracing

I've been working on SwinGame, and one of the tasks has been to add tracing code to the core to make it easier to debug problems. This involves adding TraceEnter and Trace exit calls to each procedure in the code.

To avoid having to do this by hand I am using a Regular Expression in TextMate to find procedures in the code, and replace them with a version that includes the injected trace enter and exit code. The regex I am using is shown below. It will work with a maximum depth of four begin/end groups... so its not completely automatic, but is a good start.
(function |procedure )(.*?)(;(\n|.)*?begin)((\n|(begin(\n|(begin(\n|(begin(\n|(begin(\n|.)*?end)|.)*?end)|.)*?end)|.)*?end)|.)*?)(\n end;)
This is then replaced using the following replace text. The $1 values are the groups that are matched in the regular expression. This enables me to place the procedure name, parameters and return type in the traced output ($2). It also ensures that all of the code from the program is output in the right spot.
$1$2$3
{$IFDEF TRACE}
TraceEnter('sgCamera', '$2', '');
{$ENDIF}
$5
{$IFDEF TRACE}
TraceExit('sgCamera', '$2', '');
{$ENDIF}
$15
This regular expression converts the following code...
function VectorFrom(x, y: Single): Vector; overload;
begin
result := VectorFrom(x, y, false);
end;
into this code which now has the tracing details added.
function VectorFrom(x, y: Single): Vector; overload;
begin
{$IFDEF TRACE}
TraceEnter('sgCamera', 'VectorFrom(x, y: Single): Vector', '');
{$ENDIF}

result := VectorFrom(x, y, false);

{$IFDEF TRACE}
TraceExit('sgCamera', 'VectorFrom(x, y: Single): Vector', '');
{$ENDIF}
end;
This should save me some time... though a real parser trace injector would be great!

RajEvidence based software engineering....

This is my personal pet interests. Most software engineering today is based on 'hear-say', 'guess work', 'poor mathematics' and 'statements from so called gurus'.

But, how much of it is actually correct? Is there any evidence to back up most of what passes for software engineering?

See the article at:

RajGoogle Wave ... used it and .....

Just played around with Google Wave. Currently, I don't quite know what to do with it. It is a communication tool and at this point in time I do not know if anyone else will use it if I do.

Wave is one of those tools where I really have a gut feel that it will get used fin ways that the creators have never imagined. It is one of these creative adventures that I feel will eventually help it.

Either way, the Javascript that powers it is impressive. Kudos to the engineering team that built something like this with HTML5/CSS and Javascript (on the client side anyway). Even if this does not take off, the tooling and knowledge gained by this exercise will help us build richer web applications.

-- rv
PS: It really does need a Google Wave notifier -- I for one will not log in every day till there is some level of critical mass.

Andrew CainFinding Menu Options

Another small feature of MacOS that I use often is the help search feature. This searches for the text you type in the program's menu options. The image here shows searching for "Picture" in Word. Selecting one of the found options opens the menu and a pointer indicates where the option is. You can then either click the menu or just execute it directly from the help itself.

This has actually changed the way I use the menu itself. I no longer try to remember where a menu option is. Instead I use the help to search and execute the option.

RajFeeling guilty about testing .....

Software testing is one of those fuzzy things where the theory in the books completely differs from how testing is done in practice. Unfortunately, the poor practitioners all too often end up feeling guilty for not testing their products properly. Compounding this problem is the fact that there is a whole lot of techniques that are positioned as 'best practice', 'will find the most bugs' etc. -- unfortunately they do no such thing expect adding to the guilt that the testing is poor.

How why is it so messy? Do we really need to test software as per the books?

The key observation from my experience is "normal developers test (execute) code to discover behaviour" -- so, they explore the program to check if it broadly matches the expected behaviour. Further, developers also work with requirements that are incomplete, potentially inconsistent and most of the time vague.

Developers to some extent guess what is expected. They will use fill in the gaps based on similar software systems (or) their common-sense (or) gut-feel as reference points. This guess work is unavoidable, unless the person providing the requirements, and the developer implementing the requirements both are 'perfect beings' [as in they are gods].

Back to the question at hand -- So how does one go about testing properly? Rather than directly answering it I would like to take one short detour to make my point.

Lets say you downloaded some new 'browser' software. Your intention is to browse the web, check e-mail, Facebook, Twitter etc. How do you go about testing the viability of this product for your needs? Do you start by writing down all their tasks, define expected behaviour and then proceed to validate? One can easily say that no sane/normal person does this. People explore tools and system -- and if they are not too painful, they get used.

So, what is the most effective way to test a product? The simplest and easiest method is 'use it like the end-user would' -- and do not feel guilty that you are not doing enough.

I must add some limitations/variations:
1. If you have a well defined set of mathematical functions -- these can be tested formally and quite rigorously.

2. If you have a workflow (or) set of rules that are available as a mathematical expression (some graph, logic rules) again a testing approach that matches inputs to outputs will work.

3. Safety critical systems -- typically quite a lot of effort goes into the requirements to make sure that the fuzzy aspects are completely reduced.

In cases like the above, test coverage also comes in very handy. Effort can be put into automation and formal testing since it is actually likely to work. Things like compilers, parsers, business rule engines, workflow engines, chess playing software, data structures, well defined algorithms etc. will all fall into the above two categories. Rest of the time ... "use it to test it".

-- rv

RajIs Google the next Microsoft?

How does an organisation evolve over time? From start-up to corporate giant. Is Google the next Microsoft?

I want to start off with a broad illustration of the steps first on how a start-up slowly gets into the corporate monolith -- but, taking it purely from the perspective of the Executive/Senior management. We can pretty much see where a company is headed purely by observing the profiles of the top management.

Stage 1: Start-up. The management and leadership is closely involved in the product development. In many cases, they are engineers, designers, developers -- the actual builders have all of the power and set the direction. "Lets create/innovate" is the mantra. The company is in the 'Yes we Can' mode.

Stage 2: Market-Development. In this stage, the sales and marketing people start to run the company. They gain power, they generate the revenue -- they dictate the next minor feature to appease the next new client. The product start to loose some coherence, but overall the company can still maintain the innovation. The Chief's in the company will be the Solution architects, Sales and Marketing people. Growth by adding customers is the mantra -- there is a whole lot of positive energy in the company.

Stage 3: Slash-and-Burn. In this stage, the financial and operational arms take control of the company. The easy growth phase is over. Revenues are fairly stable now. The only way to show profits is by optimising resources, cutting costs, being careful with every penny. The Sales and Marketing people are asked to put in a budget and estimate revenue. MBA's start taking control -- Excel is the tool of management choice. Optimisation is the mantra. The employees start to look back fondly at the old days when they made money solving customer problems. [If a company is considering Outsourcing -- they have entered this phase]

Stage 4: We-are-Borg. In this stage, the only way to keep growing is through acquisitions (or) by being acquired. The other options are via lobbying governments for preferential treatment. Monopoly practices, bullying, playing at the edge of law, re-interpreting ethics, borrowing as much as possible etc. The company is now run by the legal department the Chiefs tend to have a background in Finance, Takeovers and/or Politics. There are many mantra's by this point in time - 'Greed is Good', 'Last man standing', 'Heads I Win, Tails you Lose', 'Stealing is ok, getting caught is bad', 'It is only illegal till we re-write the law' etc.

Stage 5: Implosion / Explosion. The entity dies due to imbalances within itself as it becomes completely paranoid, inconsistent and diseased -- like in nature, the most useful parts are pickup up first by other companies and the rest is left to slowly decay.
---

My contention is that almost all companies (or departments) run by normal humans will go through these phases -- the only question is how long they spend in each phase. If the company is large enough, different departments may be at different stages too. This is not a continuous linear process -- that is, companies can move back stage and then go forward again too.

Why does this happen? Simple -- most companies want to grow and be more profitable over time. In a finite world, there will come a time when growth is only possible by taking resources and profits away from someone else. There is no known example of an entity that has grown continuously forever -- and there probably will not be.

So the question is 'Where is Google?'. I think they are in Stage 2. They claim they have built a culture that slows down the natural forces that compel growth and profit taking ... the answer will be fairly evident in about a decade or so.

-- rv

Andrew CainDictionary Mac Tip

A few people I know have recently switched to using Macs, so I thought I would try to put up Mac related tips for them here on my blog. I'll try to do one each week, but... we'll see :).

One cool feature of Mac OS is the ability to use the dictionary to lookup words in many applications (any that use the basic mac text rendering - so not office for example). I find this useful when reading web sites and when writing documents. Try hovering the mouse over any word and pressing Command + Control + D. You should get a drop down that shows you the words details from the dictionary. The drop down also lets you look the word up in the thesaurus.

RajMicrosoft Launch Party Video = Definition of "cringe"

This is worse than watching Basil Faulty (of the Faulty Towers) in terms of cringe. Leave a comment if you survive past the first 30 seconds. If this how M$ will market Windows 7 -- then it is dooommmeed.

Andrew CainSDL + Objective-C Garbage Collection

Today I had another try at getting a version of SDL 1.2 with support for garbage collection. I got a bit further this time... I managed to get SDL to compile for 10.5 (and 10.6 Snow Leopard) with gc support turned on. My games run with the new framework as long as -fobj-gc isn't supported or required by the application... The games start with garbage collection, but don't it seems that there is an issue loading LiveType.

I'll have to look into it again later... but if you have any ideas let me know! (happy to provide compiled SDL framework for anyone interested in helping)




Andrew CainSetting the title of a slide...

I've been playing around with two different presentation tools and found the different approaches to scripting to be quite interesting. The two scripts are shown below.


tell application "A"

set title of (current slide of first slideshow) to "Hello World"

end tell



tell application "B"

activate

set theIndex to slide index of slide of view of active window

set selectedSlide to slide theIndex of active presentation

set content of text range of text frame of shape 1 of selectedSlide to "Hello World"

end tell


The two scripts both set the title of the current slide to "Hello World". Its interesting to note that while "B" has more features the script is quite brittle, things like selecting the slide in the outline cause it to fail to select the current slide.

and the moral of the story is... "don't over engineer your code... keeping things simple with clean abstractions is always better"

RajInteresting XCode Feature (OSX IDE)

Most modern compilers perform some level of static analysis in order to check for potential issues in the code (typically for bugs like attempting to access variables that have not been properly initialised).

XCode in its latest incarnation now offers a rather interesting 'graphical representation' of how the errors will be caused/triggered.

See the screen shots (courtesy Apple Dev. Doc.) -- with the blue lines generated by XCode in the IDE. These features are great for experienced developers, but absolutely fantastic when one is just starting to learn how to program. I also like the clearer messages that the tool is now showing -- this is a great advance compared to the typical cryptic messages that 'gcc' generates. A list of the improvements in terms of how errors are now reported is available at the following page: http://clang.llvm.org/diagnostics.html . If all goes well for LLVM/CLang -- the days of GCC may be numbered. Who knows ... C language may even be useful for teaching computer programming -- rather than its current purpose, which is to scare half the students out of computer science/IT.




Raj64-bit Operating Systems....

The latest incarnation of the OSX(10.6) now supports a full 64-bit kernel. Is this the future? Should developers jump on the bandwagon and be 64-bit all the way?

The short answer: for 2009 (and very likely till well into 2012) -- 32-bit will be fine. For normal desktop computing use, 32-bit will be sufficient for the next decade or so unless MS-Office and the browsers start gaining a ridiculous amount of volume in the near future and want to be contestants on "The Biggest Loser". My guess is that we are starting to hit certain cognitive limitations (of the human), and new features will be incremental adjustments, rather than massive bloat.

So, why the fuss about 64-bit? The 32-bit kernel is limited to 4Gb of addressable memory -- and we are starting to get machines with a lot more memory now. But, the real issue with needing 64-bit is with how the kernel actually manages memory.

All operating systems break-up available RAM into pages (OSX has 4 kilobyte pages). In order to manage these pages, the operating system actually uses a 64 byte (in OSX) data structure to hold some information about the page. So, if you have 4Gb of RAM -- then the kernel needs 64Mb of space for the memory management data structures.

The issue starts showing up when you have 32Gb of RAM .. you start needing nearly 0.5Gb just for memory management. 64Gb server .. will mean that the kernel now needs 1Gb for memory management data structures. This is the underlying driver for operating systems moving to the 64-bit land -- much more than anything much else. When you bring in virtual memory (the space on say a solid state hard-disk), these newer kernels start to make much more sense.

Will 64-bit applications run faster? The benchmarks on the raw CPU performance say so -- but, for real-world applications (Office, Browser, Photoshop), there will be no discernable difference. Certain types of mathematical computations may run a bit faster -- but then again a 32-bit GPU will perform some mathematical operations a lot faster than any CPU ever will, so not a great comparision.

RajOSX Snow Leopard ... Apple Retail Experience

I upgraded my primary work machine from Leopard to Snow Leopard (see image of the real animal taken in Afghanistan).

So, what has changed? Nothing really observable.

Applications do start up noticably fasters (esp. the Apple software). Apart from that ... as far as I can tell, nothing much else. There are a number of tweaks -- but my personal user experience has not changed. I do however like the incremental changes that Apple makes to their product line -- rather than ground breaking modifiations to the entire user experience -- which would be rather annoying on a machine that I use everyday, esp. if I cannot find stuff that I used to be able to easily.

In terms of the user experience changes, Windows 7 will be a shock to the majority that will move from Windows XP. There are a lot of changes ... enough to cause a lot of frustration -- esp. Windows explorer and the fact that the menu bar seems to be dissapearing from more and more Microsoft applications. Eventually, I feel that Windows will have a single menu bar anchored at the top of the screen exactly like Apple.

I also spent some time yesterday at the Apple Retail Shop ( Doncaster, Australia). My younger son liked it a lot, esp. since they had machines placed on a kids-desk with games. This clever distraction for the kids essentially meant that I had to spend way longer than planned in the shop -- observing everything else. The really interesting part is that the shop was busy -- they seem to be selling a lot of products. I did not notice anyone walking out with computers (in the short duration I was there -- so no reflection on reality), but a lot of iPods seem to be sold and many more accessories. There were a lot of Apple people (in brightly colored t-shirts), so it was easy to get attention, despite the crowd. I could not place anything specific that seems to be so compelling, but the overall retail experience is nice. The real irony is that Telstra attempted to mimick the Apple retail concept -- only the Telstra shops seem to be permanently empty -- with staff in suits glued to their computers at the far end of the shop, as opposed to wandering the store enthusiastically.

The other interesting observation I made was that most of the store employee's were relatively young and male. It certainly has nothing to do with capability of older people or girls -- rather it seems to be a reflection of interest and preference (or Apple has a hiring policy that breaks the law, which is unlikely).

Now that Microsoft has stated they will also be into retail .. lets see how they compare against Apple. I'm sure it will be a great job explaining the differences between the 5 editions of Windows 7 (every day) and working as a MS technical support that helps remove viruses from a machine.

-- rv
PS: The real wierd bit is that the kid wants to go back to the Apple shop again -- no doubt to play games (atleast it is cheaper than a trip to the zoo).

RajCreating a simple cloud ready application..

IBM DeveloperWorks just posted a fantastic article on how to create a simple application for the Google App Engine cloud infrastructure.

See: https://www.ibm.com/developerworks/java/library/j-javadev2-1/index.html
-------

Looking back around 9 years ago when I was fairly new to the Web application land -- the cost of what is currently being offered by Google App Engine for near free easily ran into many thousands of dollars (software/hardware/routers alone were well over $20k). Further, if you setup custom infrastructure you end up needing Network administrators (part-time contractors at a minimum), system administrators (to patch O/S and monitor infrastructure) -- this skilled work added to the underlying costs as well. If you had a good concept and wanted to take it into the Internet land -- you would have spent $200k - $300k just setting up the IT infrastructure and hiring the engineers to look after it. Of course the hardware and software depreciates exponentially. In the early days start-up companies still setup and ran their own e-mail servers (most of the time very badly managed).

I still recall attending an auction a few months after the dot.com collapse -- $25k Sun Servers were being sold for less than $5k (including all the software on it -- but no one realised the legal implications of transfering the software license). The irony at the auction was that the only items that held value were the fancy furniture many of these startup's bought (at least you did not need a $100k engineer to maintain them).

The new cheaper infrastrucutre world (not to mention the reduction in deployment and maintenance costs) will contribute towards a reduction in overall IT costs -- but, the real benefit is that it allows developers with good idea to translate them into software and make it available at a farily low cost.

The side effect of all this is that the developers can come from any part of the world, the infrastructure capital requirements are now sufficiently low that skilled engineers from a lot more countries (I'm thinking India, China, Eastern Europe, Russia, Brazil) can create software and compete for market share. Will this oppertunity be taken up .... I do not know the answer, but we will soon find out.

-- rv

RajThe future of software development is cloudy!

This post was triggered by an article I read recently about Apple Inc's Cloud Ambitions. Apple is building one of the world's largest data centers' -- however they have not officially indicated a purpose or motivation. Microsoft has also embarked on a similar data centre venture (potentially to support their Azure platform). Google has its App Engine, Amazon has EC2. Adobe and Yahoo are wandering on the outer-rim, but with no firm roadmaps. There are a whole stack of other domain specific platforms out there as well (SAP, Oracle, SalesForce to name a few).

Currently, we are still in the pre-beta land for these cloudy ambitions. In another 5-7 years, these platforms will be mature. I'm going to be bold and predict that you will get the following from each vendor:
* A fully integrated IDE (one that will plug into the cloud, potentially running directly on the cloud -- i.e. runs within a web browser)
* A mature API stack (significantly more mature than what we currently have -- potentially domain specific maturity as well)
* A database system (to store/retrieve data -- file systems etc.)
* Language support for: Java, C#/VB.net, C and Python [others maybe -- but will certainly have to target either the JVM or the .NET CLI]. If Apple joins the fray at this level, expect Objective-C as well.
* Legal/deployment terms that will work for a number of different commercial domains (even finance and govt.).
* Services that will allow export of data stored on the cloud (e.g. GMail offers the ability to pull down all email to a local client if you want).

---
Why only a few languages? Cloud architectures rely on a method to distribute execution of code across multiple machines -- currently we have maturish platforms that will execute Java and C# applications. Support for other languages may never get the funding needed (esp. given the current financial climate) and hence will stay within academia or within a small group of enthusiasts. For a new language to take off, it has to offer something much much more. Java has a very large library pool built over the last decade (its core strenght), C# has 20k engineers just at Microsoft, it also has some strong language features.

What does it mean for software development? New projects will start to consider a cloud platform and very likely get locked in (kinda like they do now, if they choose SQL Server, .NET/Java, Oracle etc.). The key difference will be obvious in the Job ads -- companies will want Azure experience or Google App. Engine experience with knowledge of a certain set of API/libraries.

One of the largest change that I expect to see will be in the way we interact with database management systems. Currently, developers still have to be careful with the way they write queries and how they store data (i.e. the data structure). However, my personal experience has been that over the last 10 years -- developers have be able to get sloppy with the way they program because machines are fast and most developers are now able to get away with in-efficient code. This will now extend into the data-structure and query world in the cloud. If you have Google like retreival at your finger-tips, why bother thinking through your database schema at any level of depth? Do queries matter that much -- just throw keywords and guess till it starts to get the rightish data back. There are still going to be a few aspects that need a bit more attention, but nothing like we do now.

Once the clouds start to spread, the biggest change will be to current "PC" industry. In another 5-10 years, many more TVs, iPods, Mobile phones, Automobiles will have a full internet connectivity, quick CPUs, very likely a sizeable hard-disk and ability to hook into the cloud (turned on the default). The question is, will we still need a separate desktop PC at home?, for what purpose? If you thinking gaming ... consoles have already won this battle -- PC only games are no longer a growth market.

Good news: There will be plenty of work as we migrate legacy applications into the cloud. New innovations.

Bad news: More learning (hopefully, this will last our careers)

RajSoftware Engineering: An Idea who's time has come and gone!

An interesting perspective from Tom DeMarco in IEEE Computer (via Reddit) in a 2-page article, where he questions if Software Engineering is past its prime.

See: http://www2.computer.org/cms/Computer.org/ComputingNow/homepage/2009/0709/rW_SO_Viewpoints.pdf
-----

The gist of the article is that software that transforms the world (he cites Wikipedia, Google Earth) were not delivered by a project team that was controled every inch of the way -- that is, they were not engineered as recommended in the text books. The whole article essentially kinda sorta states that Agile methods are fine (in a round about way). Tom is known as the "metrics guy", the "Software engineering guru" etc. -- so, this is quite a big statement for someone like him. Just look at the books Tom has authored.

Interestingly, the hardest part in software development has always been in the 'solution definition' -- that is defining the concept and abstract forms in sufficient detail to allow a group to be able to work together productively and build it. The programming and construction side is comparatively easier, mainly because given the right tools with discipline and focus we can actually get over this aspect.

Is software engineering dead? Tom is possibly right with respect to the management perspective. However, there have been many good ideas from this field that are still very relevant -- though most are still at software construction level. For instance, I still think it is a good idea to comment code (level of detail is determined by context), plan an iteration (with the full knowledge that we plan to prepare and synchronize the team, not to execute precisely against it), measure size and complexity (for feedback to allow reflection, not for control), modular architectures are still good, testing is still critical. Most importantly, the SE field provides a general organisation and scaffolding of various aspects to help us teach software development to the next generation.

-- rv

RajIt costs $30,000 to fill up your iPod (Says Microsoft)

M$ marketing machine has now completely lost their mind (or) we have a space-time rift.

Their new ad, states:
Problem: It costs $30k to fill a 120Gb iPod. (Assuming $1/song and 30k songs)
Solution*: Pay $15/month and get a Zune (+$300 for the Zune)

*You lose all your music the day you stop paying. Then again, in this day and age -- what if M$ gets credit crunched -- this is quite possible given the their current marketing brain.

Two possibilities:
(a) Microsoft does not 'get' that people have friendly contacts* and how they interact and use the internet
(b) This 'ad' was meant for an alternative reality and somehow it leaked into our world -- caused by a space-time rift.

* The definition of a friendly contact on the internet is an entity that will freely share stuff they may or may not have actually purchased/created.


I find that the Internet Radio thing with its large set of channels quite sufficient for my music fix.

PS: If you are worried about the space-time rift, you can learn more about it at this article.

Andrew CainExplore Regex

I've been playing around with the Google Web Toolkit, and it looks very interesting. As a small project I created a Regular Expression testing web site (see http://exploreregex.appspot.com/). This uses a simple regular expression highlighting service that you post sample data and a regex, and it returns HTML formatted data indicating the matched expressions. This all works asynchronously, which the GWT makes easy...

Next will be to add in some of the AppEngine features...

RajCheeseburger in a can?

If you are the wandering type -- and have decided to go on a long trek. Can you get a Cheeseburger in a can? The answer is .. "yes you can". The Germans' (of all people) have come up with the solution for a few Euro.

Well, in case you are saying "I like extra cheese" -- esp. the pre-melted stuff. Fear not for Kraft has a solution for you in their "Easy Cheese" range.


PLUS


I guess, this must be what progress and civilisation is all about.

If you are interested, you should read a more comprehensive review of this product (Gizmodo recently also attempted to consume it).

Fortunately, this nourishment is not available in Australia (yet!).



RajUI Design (or lack of...)

Some designers never think .... these are a couple of links that came up on Reddit.

http://ingoodhands.com (A Financial Company home page)

http://now.sprint.com/widget/ (Sprint Telecommunications)
----

Think about the time a group of people spent on actually creating these sites. There is absolutely no rational explanation ... except, may be, this is the way the geeks and artists are getting back at the Telephone companies (for their plethora of nasty policies) and Financial companies for the current economic mess.

Interestingly, both of these User interfaces would look "so" cool for a 4-5 second shot in a movie. This is possibly how they got User acceptance -- just showed the project sponsors a couple of shot video clips.

--------
If you are into UI design, do read the article from 37 Signals - Learning from Bad UI design.

There is always the classic - UI Hall of Shame on what not to do (it is quite old, but will certainly bring back memories from the past).

My fav. one about tabs from the UI hall of shame is ...









There was a time when MS Word got pretty close to this kind of mess with tabs. Thankfully, these days, the designers heavily use grouping icons and lists on the right hand side to provide drill-downs as needed (Eclipse IDE especially).

-- rv

RajJava in the cloud...

Java is finally available on Google App Engine. The initial developer preview release that Google announced yesterday provides the basic infrastructure needed to build web applications using Java and deploy / run it on the Google infrastructure (their cloud computing infrastructure).

The process is fairly simple - write Java code, bundle it up as a WAR (web archive) and deploy it to Google infrastructure. That is all. They will scale it as needed. The best part is that Google is providing access to their Data store (based on Big Table) via JDO (Java Data Objects).

JDO provides persistence to Java objects, and the retrieval of data is via a set of SQL like queries. The current generation JDO is pretty mature -- it handles all of the standard one-to-one, one-to-many relationships, inheritance etc. The actual persistence is itself configured via simple annotations. Google data store is highly optimised for web application needs -- i.e. reads and queries are super quick and easy to do. Writes are a little bit slower. They have transactions and all of the standard features one would expect to see in any data store.
---

This is fairly ground-breaking in my opinion. There are a large number of people that already know Java -- and given how simple it is now to create and deploy basic applications, we are likely to see Java regain its lost shine. Unless Microsoft starts providing quick access to something like this with .NET (they have it in development but not sure of its current status), many of the newer start-ups will start to closely look at companies like Google for hosting their applications.

In a nut shell developers no longer have to worry about:
1. Server operating system (and patching it)
2. Database server (esp. load balancing, writing code to scale up to multiple database servers)
3. Mail servers (installing it, configuring it, providing it with sufficient space for persistance)
4. Web server (securing it, bandwidth)
5. DoS attacks, network configuation
6. Memory cache (Google App Engine provides access to their own memcache for temporary persistance)
7. Messaging (Google is proving access to their underlying messaging infrastructure)

All this is infrastructure -- do not need to install, deploy, maintain or think about it.

Why is hosting a big deal? Because, most developers know very little about managing networks and infrastructure. The U/G courses in CS and Software development focus heavily on building solutions -- the deployment and management aspects if covered are presented at minimal depth (since this is not the core focus of the course). Most developers do pick this up over time on real projects, but never really enjoy it or care much for it. Most developers I know enjoy building new things, not pouring over log files and worrying about peak loads, upgrading and patching servers, DoS attacks, monitoring email traffic etc.

From the business perspective, it is a lot cheaper to have someone else provide the reliable and scalable computing infrastructure (this is a skill set that very few companies can afford to build and maintain). Not to mention the start-up costs that one needs if they roll out their own infrastructure. Cloud computing infrastructure is cheaper than LAMP, esp. since it takes 10 minutes to sign-up and have the entire infrastructure up and running.

With the emerging cloud computing infrastructure, developers can go back to focusing on solving user domain problems and letting the machines / experts worry about the installation, configuration and administration.

Limitations? As exciting as this all is, we are still in early days -- some applications will still need custom infrastructure (for instance, net banking). But, in another 3-5 years these infrastructures will get better, and compete for developer mind share (Amazon has EC2, Microsoft will have their platform soon enough, IBM has one in the works). Sadly, the only company that has .NET cloud infrastructure for now is Microsoft.

Interestingly -- this is how computing used to be in the hey-day of mainframes. I guess, history does repeat. We are back to just paying for CPU, Disk and Bandwidth while someone else worries about the underlying infrastructure.

-- rv

RajWindows 7 - Will it take off?

Many years ago, I wrote a blog post that pretty much stated that Windows Vista will have a very very slow uptake. I was kinda sorta right.

Windows 7 is about to be released. Will this have a fast uptake in the market place?

Short answer: The uptake will be about as lethargic as for Windows Vista by the business users. New computers will come with it pre-installed, most likely users will keep it (rather than down grading to XP).

What is the basis for this bold assertion?

Reason 1: Corporate Support Staff know Windows XP inside out -- most know the typical issues and resolutions. They can do it in their sleep. When we bring a new O/S into the equation, this is the area that ends up being the bottle neck. Support staff just will not be able to pick it up and have it supportable in anything under 24 months (minimum). Sadly, this will mean that Microsoft will struggle to gain sufficient traction and very likely have Windows 8 ready.

One other reason --- Windows 7 does not have any ground breaking features that most users are dying for and will care to part hard-earned cash for (esp. in a recession). It will be about as exciting as a new Operating System for your mobile phone -- most people do not know nor care. The geeks will go gaga over it, the tech. press will fill pages about the fantastic features, the Apple fans will still be cool -- but, most users will want to know if Facebook will render nicely on it and if they need to still install a virus scanner.

Yet another reason -- IT budgets are getting chopped and trimmed (right-sized is the term these days). Companies will want to know cost savings of an upgrade to Windows 7. Microsoft better have real good answers for this aspect (and people are not just going to believe as facts Gartner reports or claims made in PC World).

Sadly ... we are pretty much at the cusp of a new ear. One where PC Operating Systems are slowly going to disappear into the background, reliably doing their job, just like they do on the mobile phones, game consoles and a billion other devices.

-- rv

RajCredit Crisis Visualized...

The following videos explain quite a lot of things in a nice visualization. Tad simplified, but correct. Both Part 1 and Part 2 are embedded below (together they run for approx. 10 min.). If you want a more detailed explanation Chris Martenson has a Crash Course (a few hours). If you want a rigorous and academic version, Prof. Steve Keen's blog (of Uni. Western Sydney) is well worth reading and his research is also worth supporting.

Part 1:



Part 2:

RajMobile phones will have a Universal Charger...

Most mobile phone companies have signed up to have a Universal charger by 2012 (ZDNet article). Seems to be a mini-USB jack.

The question is - will plug-in type chargers be the preference in 3 years time? There is a company called Powermat that offers a mat that will charge a phone (or mobile device) without any wires. You simply place it on the mat, and it gives it the juice (see their site for details on the technology).

There are a number of companies that are also experimenting with mini fuel cells and other newer batteries that will work on cigarette lighter fuel for about 1 month with no top-up (a very small quantity is used -- so it should not ignite and blow up, unless it is a used in a Hollywood movie in which case it will be used to level a small city).

The most interesting aspect of this new is that Apple and Palm did not sign up. My bet is that they are planning a charger with no wires soon. And in 3 years time, most others will just follow down this path. The Palm Pre which is out soon has a wireless dock (called the Palm Touchstone). Apple most likely is close to having their version out soon.

So what will happen? We are likely to have many different wire-free charging stations, and a Universal cellphone charger that is DOA. Lets hope they standardize the wire-free technology a little faster.

-- rv

RajChompr - Hamburger grasper....


My mind just cannot compute this. More at - Gizmodo. See the comments for some serious entertainment.

I wonder if they have conducted any Usability trials on this device?

So does this have any practical use?

These are in the class of devices that once can consider "cool". Kinda like those fancy user interfaces in Sci-fi movies, where the objective is to design a user interface that looks nice on a super large screen [ridiculously large fonts, insanely rich colors, useless animation effects, excotic sound effects, animated backgrounds etc. etc.]. It would be hell if one were forced to actually use these user interfaces everyday. Personally, I classify the animation effects of Windows Vista (screen flipping) and the new UI themes in Linux into the same bucket. They look fantastic in the demo's, but have no real value beyond that.

Will the burger holder work? All I can see is anyone using this will now have to clean their hands as well as this device. Not to mention all that accumulated build-up of sauce over time on this contraption.

Will it sell? Such devices will move in some volume around Christmas and potentially Fathers day. To be avoided at all costs for Valentines day or Mothers day.

-- rv

RajMonkey see ... Monkey do...

Microsoft will soon open retail outlets (just like Apple).

If that news alone is not weird enough, given the current economic climate ... it gets worse. They actually hired a Wal*Mart veteran to help them with their retail store. So, I guess they are planning on selling Windows 7 right out of shipping containers in dimly lit stores at $2.00 per box.

Oh yes, they are also going to provide an App Store for Windows Mobile just like the iPhone has.

I just hope Windows 7 sells well .... they are going to be needing the $$ to pull a few more holes.

RajInteresting test questions (from mid-term exam)

This is a link I picked up on Reddit:

http://econpage.com/201/exams/mt1/index.html

See questions 19, 20 and 21.

I'm now going to spend valuable time thinking of viable ways to translate this into Programming related (or) Project Management related questions. Wondering if the University will invest some $$ into research material acquisition .... [[it will all make sense once you look at the actual questions]]

Andrew CainGot a new mac... what now?

A few of my friends have recently got their first mac... so what things would I recommend for anyone switching from PC to Mac?

Realise that it will take some time to get started with a new platform... and switching to mac is the same. You will need to spend some time really getting used to using the Mac, but the effort will be worth it.

1: What can I do with my PC data and apps I need to use?

I think the key to switching is to immerse yourself in the new platform and avoid using the old one for a few weeks... otherwise the temptation will always be to revert back to using Windows and you will never really get the benefits a Mac has to offer.


However, for somethings you do need Windows... Visual Studio for example. I use Parallels Desktop for Mac. Its a virtual machine, and allows you to run Windows, or other operating systems, under Mac OS. I have found this has worked really well for me. If you are moving from an existing PC, you can also make use of Parallels Transporter. It can be used to create a Virtual Machine image of your existing PC. You can then use this as a full backup, ensuring you don't lose any of those important settings or data from your PC.

An alternative to Parallels is Virtual Box. I know a few people who have used this, but I haven't tried it myself. The benefit of this is that it is free...
I don't think it has an equivalent to Parallels Transporter, but you cant argue with the price.

2: What general things should I know about?

Well there are many but here are a few important points:
  • Clicking the Red x on the top left corner only closes the window, in many cases the program is still running. You need to use the Quit link from the program's menu.
  • Running programs appear in the Dock with a small light blue ball under it.
  • You can quit a program by right clicking on the program in the Dock.
  • System Preferences is the equivalent to Control Panel.
  • Learn to use Expose.
  • Command replaces control for many shortcuts - Command Q quits for example.
Things you need to configure:
  • Make sure you turn on two finger scrolling, and secondary clicks with two fingers in Trackpad settings in System Preferences.
  • Set the right button on the mouse to secondary click.
3: What Mac programs should I look at using?

If you use any form of chat, you'll want to get Adium, a free chat client that can be used to chat with MSN, Yahoo, Google, Facebook, and others... There are heaps of extras that really make it an impressive application. The duck image is really cute, and the many replacement dock images are worth looking at.


Textmate is a fantastic text editor for developers. Its not free, but it is well worth the price. It comes with many extensions, such as Project Plus that integrates SVN flags into the project draw. The extensions for different code formats are also worth looking at.

Office for Mac is likely to be another program that you need. It is mostly compatible with the Windows version, though the 2008 edition is missing VBA support. I have both the 2008 and the 2004 version installed.

There are some alternatives to Office such as NeoOffice, and Apple's iWork. I have been using iWork for a number of tasks, and it is great at creating presentations (in Keynote) and documents (in Pages). It is not as full featured as Office, but I have found it easier to get the layout I want in many cases.
 


Well that should be enough to get started with... 


Andrew CainPlans for APS

Next year I will be teaching Algorithmic Problem Solving (APS) in first semester, a subject that I have developed and worked on over a few years. At the start of this year I trialled portfolio assessment with some success in this subject, though I improved on this in semester 2 with Object Oriented Programming. So what am I going to do differently next year?

Greater focus on the portfolio assessment: The portfolio assessment was good in this subject last year, but the focus can be even better. I found that this helped the students focus on what was important in OOP, the intended learning outcomes. My plan is to provide assessed learning activities during the semester, the resulting work will then be included in the students' portfolios. 

Simpler book: The first few times I ran this subject we used the language manual that comes with the language we are using. Its very dry, and not presented in an order that is useful for learning. This year I tried providing my own details, but didn't really get that right. So next year I will be providing a new book.

The book is what I am focusing on now. This will use a syntax based approach to learning the language, along with clear descriptions and illustrations to help students understand the programming abstractions. At this stage I have the following sections for the book:
  1. Programs - introduces the Program abstraction and a large number of new "programming language" terms such as identifier, keyword, procedure, procedure call, expression, literal, etc.
  2. Creating Procedures - focuses on creating your own procedures. 
  3. Storing and Using data - variables, and the assignment statement.
  4. Passing Data Around - introduces parameters (both in, out, and in/out).
  5. Calculating Values - covers functions and function calls.
  6. External Libraries - introduces units, shows how to use external units, and provides an example function from the SysUtils unit.
  7. User Input - Up to this stage we will have been using literal values, but now all of the framework is in place to understand user input. This includes ReadLn, as well as reading command line arguments.
  8. Branching - Indicates the change from programming "infrastructure" to control flow, and algorithm design.
  9. Looping - For, while, repeat, etc...
  10. Data abstractions - now the focus changes to the programming abstractions for data. This will include arrays, records and pointers.
  11. Creating Libraries - Lastly onto creating your own programming libraries
My idea for this is to have each section as self contained as possible. Knowledge will be built up without the need for any "magic". This is the reason for delaying user input... this requires functions and out parameters, with library use being necessary if you want to convert values from strings to integers for example.

These 11 chapters will be covered in the first five weeks of the semester. Week one will cover 1 & 2, week two will be 3 & 4, week three on 5, 6 & 7, week four on 8 & 9, and week five on 10 & 11. This leaves seven weeks of the semester to learn about how these abstractions are used to create programs. 

Along with this I am aiming to keep the explanation of each concept or part of the syntax down to a single page, where possible. This is enough room to convey the important aspects, but not too much that the end result is overwhelming. It should also help to create a useful reference, where each idea has its own page. So far I am up to chapter 5 which start at page 39, so there isn't too may pages per chapter.

Let me know what you think. I'll post up some chapters later...


Andrew Cain2008 Retrospective

Well the semester is over, and I'm starting to reflect upon a year with many experiments. The big things for me this year has been trying to put into practice many of the things that I have been reading about in the education area. The main focus has been on helping students to develop a greater understanding of software development and programming in general.

Background & the idea:
Software development is challenging, something that is easy to forget (once you get it). We have taught this through extended practice, in many cases without addressing or even discussing the associated principles. One of my frustrations with this has been the way many people subsequently approach their programming, usually with little thought or understanding. The classic symptom here is observed when the student makes random changes in the hope of fixing a bug, rather than thinking through their program and reasoning about its structure and implementation.

Is this a symptom of a lack of experience, or a greater problem related to the students understanding of the abstractions they are working with.

I am of the opinion that it is largely the latter, and that by refocusing on principles and core concepts we can teach people to better understand what they are doing when they create their own programs.

The idea, for this year, has been to refocus my teaching around the core principles. Teaching the principles of structured programming in first semester, and object oriented principles in second semester.

The method:
My teaching method aimed to get students engaged with the material, it is what the student does that counts...

Along with this I wanted students to be able to be adventurous, without risking losing marks. It was more important to have good quality, that a fixed time line. I moved to an extreme "Theory Y" position, with the perceived benefits of greater flexibility for the students along with greater responsibility.

I also wanted to make better use of the lectures, by distributing weekly reading and creating podcasts and using the lectures to discuss issues students were having with the concepts.

The results:
Now that semester 2 is over I am reflecting on the results of this approach. For me it has been a real roller coaster of highs and lows. Some aspects have worked well, others need improvement.

There was a marked difference between the introductory and advanced programming subjects. In general this approach has worked well with the more advanced students (Enterprise .NET), but how about the introductory subjects?

Releasing control of the system was definitely a different experience, though not an overly positive one in the introductory subjects. During the semester it was obvious that many of these students had failed to take responsibility for their learning. This was seen through missed deadlines, lack of attendance, and few questions on challenging areas. Flexible due dates meant leaving work until the last minute, rather than a chance to do quality work. The marking then reflected this situation, with many of those who "relaxed" failing to submit anything as the workload exceeded their time remaining.

On the positive side, there were some truly brilliant portfolios submitted. Those students who did take responsibility for their learning were able to demonstrate far more than I could have wished for. I hope that these students appreciated the flexibility, and the chance to explore areas they were interested in. But how can I adjust the process to better suite the larger majority of students.

Another positive was the portfolio assessment. This was time consuming and while course grained it has given very "accurate" grades, with no students being awarded a grade higher than they deserved due to a poor testing or marking scheme. On the other hand there were some students who's result I believe could have been better if they applied themselves more to the task, and demonstrating their learning.

The lecture method worked Ok with the advanced students, but need some tweaking. With the introductory subjects it really failed, which was disappointing. I think the problems were many... The text books were really 500% of what was "really" needed. As a result many students didn't do the required reading and subsequently blundered along trying to learn details from "lectures" without any real depth to their understanding. The method was significantly different and I failed to engage them in the process. Not providing my own large design early was not a great idea. Some of the lab exercises were incorrectly focused. Some of the portfolio pieces I suggested were overly large and time consuming, without the intended benefits.

Some bad points:
  • Not enough focus on programming (overcompensation)
  • Only few truly engaged with the method
  • In general students did a poor job of managing their learning
  • Some students didn't end up understanding the portfolio idea

Some good points:
  • Large responsibility on students to manage their own learning.
  • Mature students are better equipped for this method
  • Portfolios were able to capture student learning
  • Assessment was "fair"
  • No penalties for those who learn during the semester, and can communicate their learning by the end.
  • English communication skills can be enhanced, and communication issues are less severe then with exams (which require time compressed communication)

Reflections & Plans:
In summary this year has been a huge disappointment, and I'll need to try and reinvigorate myself before next year. I think the approach can work, and if I can get it right there should be some great benefits for the students. Reading back over this has, however, provided me with some hope.

"Once more unto the breach, dear friends, once more;"

My plans are to focus on teaching the learning process... as well as teaching about programming :). The method is different and I dont think I spent enough time on what was expected, and how to take advantage of the environment. I also have some more practical ideas related to using more "traditional" practices alongside this to help ease students into the experience. I am also more experienced now on what I need them to focus on in this approach. It has been a long time since I really engaged with these principles, and I'll be better equipped next year.

So to my introductory programming students from this year... sorry...

I would love to know what you thought of this experience and any suggestions you have... what do you think could be done to better next time.

I also promise to blog more... if you are interested in my plans and progress stay in touch! I need all the help I can get :)

Andrew CainAutomator Postscript Actions & Leopard

Back in February 2007 I developed some Automator actions to manipulate Postscript files. I used these actions in the past to convert my presentation slides into multi-page PDFs. By creating these as scripts it became easy to quickly convert a large number of presentations into "lecture notes" that I could upload for the students.

Today I went back to test is they worked... and they didn't! The problem was that Leopard is now unix2003 compatible, and my script wasn't. The issue was my use of the file -i {} command which worked in the legacy mode, but fails when using the updated version. The fix was simple, when I found it, use file --mime {}...

For those who are interested... download the automator actions...

Andrew CainPython is intriguing...

I share an office with Clinton who has lately become somewhat of a Python convert. Today I started to play with Python for the first time. Unlike "normal" people I didn't start with Python in Python... I started by embedding it within a Pascal program. Embedding Python within Pascal was really simple - I am totally amazed! With less than 20 lines of Pascal code you can embed a Python interpreter and have it load and run python modules.

The code for this will be placed on Google Code once I have it a little farther along.

Why am I doing this? We are looking at providing the ability to run Scripts within SwinGame, its looking like we should have something interesting soon!

Andrew CainPortfolio Assessment

Well semester 1 has started... I can where did all that time go? This semester I am teaching HIT1301 Algorithmic Problem Solving again, and as always there are improvements to be made. This semester most of the changes revolve around the assessment, with some minor changes to the lectures and resources available.

On the assessment side of things the assessment will be much more flexible than in the past. Basically for APS there will be some core assignments and tests, each quite short but covering all the basics. Passing these means you pass the subject, in most cases you need to get them working to pass so dont think 50% = pass for these! To get anything greater than this students will need to submit a portfolio that shows their capabilities and depth of understanding of software development. This means students can choose what they want to focus on, while still ensuring they cover all bases. The focus of this assessment is on depth of understanding and quality of work, rather than quantity.

I'll keep you informed of how this goes... Let me know what you think of the idea.

In other news we are (well Clinton really) making progress with the new python port of SwinGame. This will mean that you will be able to call the SwinGame API from Python... the next step is to embed Python within SwinGame :)

Andrew CainSwinGame Excitement

The swingame project has gone through some very exciting developments. Over the last few weeks we have managed to develop a new edition of SwinGame (version 1.1) and is now available for download. Have a look at the game promo videos that we have created for this of YouTube they have been great fun to create.

Let us know what you think.

Andrew CainExciting things are afoot

The Summer Semester Project this year is working on extending the SwinGame API that was started last year. This is a really exciting project with some great outcomes already, and we're less than half way through...

So what have the students achieved? The most visible part is the SwinGame web site. This site will be used to promote and distribute the SDKs when they are finished. The site uses a combination of MediaWiki and phpBB, combined together with a common theme. The wiki will be used to document the API while the forum will offer a place to discuss the games, and any issues with the API. You can read their comments on the SwinGameSDK Development blog.

I've used the SDK to create a small game, "Alien Flight". Its been great fun to have a chance to play around with this, though I guess I'll need to get back to work soon :(. I'll be putting the game up on the site some time soon.

Anyway check out the site and let me know what you think. Its a little empty at the moment, but we're working on getting content in soon.

Have a great christmas, and new year!

Andrew CainPS Printing in Leopard

Back in February I created some Automator scripts to automate the process of printing and publishing my lecture notes. These scripts hinged on the ability to use a small printer script that send the printer output to file, simple ps script. Upgrading to Leopard has caused me some issues in this regard.

The first issue is the fact that the Print Center has been removed. In the past you could Option click the Add Printer button to enable the Advanced options. With the new Printer Preferences Pane this option has been removed. So my first issue was adding the printer back at all. After some searching I found that the cups process can be administered remotely using http://localhost:631. To create the new printer you can do the following:
  1. Add a generic printer using Printer Preferences Pane
  2. Open a web browser and navigate to http://localhost:631
  3. Navigate to the printers tab
  4. Choose Modify Printer
  5. Step through the process configuring the printer as you would have in the Print Center Advanced options.
Following this process I was able to add back the printer, which unfortunately was not able to print :(.

On Tiger the cups process is run by the root user, however on Leopard the security has been tightened and now the printer is run using a low privilege account, _lp. My old postscript saving scripts would output the file to any folder you chose, and then alter the ownership to the calling user. The new script can no longer do this. I've listed the new script below for anyone interested the corrected script. Please note that you will need to setup the printer with reference to a location that can be written to by this user, I have used /tmp.

I'll look into this again later, but for the moment this meets my needs. Other suggestions are welcome.

---

#!/bin/sh
#
# Michael Goffioul
# Updated by P T Withington for Mac OS X
# Updated by Richard Bronosky
# Updated by Steve Palm (N9YTY) - case insensitive URI, unique output files
# Recreated as PS copy by Andrew Cain
 
LOGFILE=/tmp/psprinter.log

FILENAME=
CPBIN=/bin/cp
ECHOBIN=/bin/cat
RUNAS=`/usr/bin/whoami`

echo "Script: $0" > $LOGFILE
echo "Run as: $RUNAS" >> $LOGFILE

echo "job: $1" >> $LOGFILE
echo "user: $2" >> $LOGFILE
echo "title: $3" >> $LOGFILE

echo "num-copies: $4" >> $LOGFILE
echo "options: $5" >> $LOGFILE
echo "filename: $6" >> $LOGFILE

 
# case of no argument, prints available URIs
if [ $# -eq 0 ]; then
echo "direct PS \"Unknown\" \"PS Writing\""

exit 0
fi
 
# case of wrong number of arguments
if [ $# -ne 5 -a $# -ne 6 ]; then

echo "Usage: ps job-id user title copies options [file]"
exit 1
fi
 
# get ps directory from device URI, and check write status
URI_PRE=`echo $DEVICE_URI | cut -c 1-2 | tr "[a-z]" "[A-Z]"`

URI_BODY=`echo $DEVICE_URI | cut -c 3-`
DEVICE_URI="${URI_PRE}${URI_BODY}"
echo "Device URI: $DEVICE_URI" >> $LOGFILE

 
PSDIR=${DEVICE_URI#PS:}
if [ `echo $PSDIR|cut -c1-3` = //~ ]; then

PSDIR=/Users/$2`echo $PSDIR|cut -c4-`
# This step added by Richard Bronosky to allow referencing the users home directory
fi
 
echo "PS DIR: $PSDIR" >> $LOGFILE

 
if [ ! -d "$PSDIR" -o ! -w "$PSDIR" ]; then
echo "ERROR: $PSDIR not writable" >> $LOGFILE

echo "ERROR: directory $PSDIR not writable"
exit 1
fi
 
echo "ps directory: $PSDIR" >> $LOGFILE

 
# generate output filename
OUTPUTFILENAME=
if [ "$3" = "" ]; then

OUTPUTFILENAME="$PSDIR/unknown.ps"
else
OUTPUTFILENAME="$PSDIR/${3//[^[:alnum:]]/_}.ps"
fi
 
FBASE=`basename ${OUTPUTFILENAME} .ps`

typeset -i I=1
while [ -e $OUTPUTFILENAME ]
do

OUTPUTFILENAME="${PSDIR}/${FBASE}_$I.ps"
I=$I+1
done
 
echo "Output file name: $OUTPUTFILENAME" >> $LOGFILE

 
# move ps to destination
if [ $# -eq 6 ]; then
echo "copy $6 $OUTPUTFILENAME"
$CPBIN $6 $OUTPUTFILENAME >> $LOGFILE

# $GSBIN $6 -o $OUTPUTFILENAME >> $LOGFILE
else
#cp /dev/stdin $OUTPUTFILENAME
echo "$ECHOBIN - >> $OUTPUTFILENAME"
$ECHOBIN - >> $OUTPUTFILENAME

# $GSBIN -i -o $OUTPUTFILENAME >> $LOGFILE
fi
 
# modify ownership and permissions on the file
# - world readable
# - owns to user specified in argument
chmod a+r $OUTPUTFILENAME
if [ "$2" != "" ]; then

echo "Change ownership with: chown $2 $OUTPUTFILENAME" >> $LOGFILE
chown $2 $OUTPUTFILENAME
fi
 

exit 0

Andrew CainMeow...

Ok installing Leopard was a little more complicated that I thought! 

The main problem related to a lack of resources...

Yes, thats right, we were nearly out of diesel and with the current diesel shortage finding some so we could get home was an issue :)

Ok, now seriously. Install = insert DVD, double click (install icon), enter username/password, click, click, click, wait, wait, click, done. It ... well ... just worked.

Total time almost 2hrs. Validating the DVD took 1hr, install took 1hr.

I did need to login with my admin account to finish the registration. Most apps are working, though I found that Menu Shades doesn't... 

Andrew CainAlpha Geek

Last launch party I went to was for Windows 98... which was a bit disappointing, and as Raj reminds me took me until 4 in the morning to install. If I remember correctly... the issue was drivers for my SCSI HDD.

So does it make me a Geek to say that even though I should be home in bed (... I'm not well), tonight I'll be there at the Leopard "Launch Party" down at the nearest store?

I hope so :)

More details once this Tiger has gone, and a Leopard takes its place. That is assuming the update goes to plan... I'm dreaming right... this never really works... Well I'll let you all know soon enough.

Andrew CainWhats up?

Well I haven't blogged for a while... and I just found a nice little Blogger Widget that allows me to post from Dashboard.

So what exciting has happened lately? Well not much, actually. The semester went slowly at the start but the last few weeks have really shot by.

In OOP the SwinTrek assignment appears to have causes some students issues, but those who really put in the effort are now showing the benefits. I definately think the assignment has proven itself in terms of learning outcomes.

Advanced .NET is crusing along. The students are now starting to push themselves. Maybe I need to make the assignments due a bi earlier.

Well thats enough for now. If your studying one of my subjects please let me know what you think...

Andrew CainWhat should we aim for?

There has been renewed discussion of another round of curriculum review. If we are to review the PSD degree what should we change? What should the aims of the degree be?

I think we need to build good basic software development skills, but focus more on generic skills like the ability to learn independently, investigate/research topics etc.

Any ideas?

Andrew CainHow important is being open?

I've been so busy since I got back from leave that I haven't had ten minutes to put any of my thoughts down in writing. Today I've finally got some time to spare so I thought I would write a quick blog entry.

Over the last two years we have been planning, developing, and delivering the new Bachelor of Science (Professional Software Development) or PSD for short. This is a new degree program aimed at teaching students about modern software development, agile processes, etc. This semester I have been teaching the new Database Programming subject, the last of their programming subjects, and so I've been looking back to see how the program has turned out.

I think in general that the new degree has been quite a bit of an improvement over previous degrees, in that very few of the students "hate" programming. However I think we can improve further in some areas. The one the has surprised me the most is how fixed in their ways some of the students are. Anything that offers a slight challenge is a major obstacle, and the tool is always seems to be to blame. Its not that they are not capable of using the tools, its their attitude that I am finding intriguing. The old saying "A poor worker blames his tools" keeps popping into my mind... Having said all of this, there are also students who are doing well, and are handling the challenges in an admirable fashion. I just want to improve the odds...

I think its really important to be open to new ideas, and to be prepared to spend time to understand how a tool works. As software developers these students are going to be constantly faced with configuration/installation/integration types of problems. They will need to be able to work out how other software works in order to be able to work effectively with it.

Anyone have any ideas for how we can encourage these students to be more open in their thinking?

I want them to be inquisitive about technology, prepared to explore the potential of various solutions.

I think what shocked me most (and got me wanting to write this) was one conversation I overheard... it went something like this:

"My notebook is running too slow. I think I will install Linux and Beryl like X did."
"Really! You dont want to do that. He will have spent ages tweaking it... do you really want to do that... etc. etc."
"Yeah your right, installing Linux is too difficult... etc. etc."

This really isn't what you want to hear. Playing around with another OS is a really good learning experience, and a good working knowledge of Linux is a real advantage. Not installing it because you may have to learn how to configure it is a really lame excuse. My suggestion, install Linux. Play with Beryl. What have you lost if you end up going back to Windows? Setup a dual boot, then you can play with Windows and Linux. Learning should be fun.

Andrew CainBack to work

The holiday had to end at some stage... I'm back at work now, and not much has changed. Currently getting ready for the semester which starts in a few weeks.

My main problem at the moment is finding tutors for a new subject on Database Programming. If you know anyone good who is interested in teaching, and knows Java + C# (or one and happy to learn the other) please let me know. We currently have 6 hours of laboratories that need a tutor. Any ideas?

Andrew CainTo Thread or Not To Thread

Today I have been asked a few threading questions from students studying at Swinburne. Usually these were about the "How to" do something with threads, when I think the real question was should threads be used at all?

From what I know these students are developing a torrent like application and network protocol. The issue is that they need to accept data from a number of peers at the same time. Initially this appears to suggest the need for threads... but are they really needed?

In this case I think not. The project indicate potentially thousands of peers... a threaded client with one thread per client will kill the machine with context switches before any real work can be done. So what is the answer? Non-Blocking IO.

With Non-Blocking IO you dont need to block, waiting for data to arrive from a peer. Rather you keep a list of connected peers and then loop through those that have data currently available. This can all be performed on a single thread, giving good performance and throughput.

Java offers a number a library of non-blocking IO utilities. Have a look at the NBTimeServer.java example. This shows a time server that accepts connections using non-blocking IO. A quick look through the Java API and you will find the SelectableChannel and the SelectionKey class. Using the register methods, and the various SelectionKey options you can loop through only those connections that actually have data waiting to be processed.

There is a good article, with a good source code example at http://tim.owlmountain.com/tutorials/NonBlockingIo.htm though there is an interesting note at the start.
As suggested in the article, you could also look at MINA the Multipurpose Infrastructure for Network Applications. If you use MINA just stick with the basic "getting started" code and build on top of that. There is no real need to worry about fiddling with the thread model. But... check with the subject convener first...

Andrew CainProgramming 2D Games

Are you interested in programming 2d games? Got a PC, Mac, or linux box? That all you need with the new SwinGame API.

The SwinGame API was developed initially by Daniel Chambers as a Windows API for developing small games. Over the last few weeks I have been modifying the code to extend its features, and to make it cross platform. The latest version is still in testing, but is worth looking at if you are interested in creating a 2D game.

SwinGame features:
  • Window drawing is double buffered
  • Create a Window of any size
  • Load and display images of various formats including bmp, png, and jpg
  • Works with 32 bit images, including alpha blending
  • Load true type fonts
  • Read and write text
  • Draw lines, and shapes
  • Sprite management routines
  • Load and play sounds in various formats including wav, ogg, and mp3
  • Detect collisions between sprites, bitmaps, and areas of the screen
  • Perform pixel level collision detection
  • Vector manipulation routines
  • Use matrices to manipulate game vectors
There are a couple of games in the process of being built by the 1st year PSD students at the moment, and I will make these available for download from SwinBrain as soon as they are complete.

Andrew CainEmpty your Mind

Today one of the PSD students showed me what he had started for the game he was developing for Algorithmic Problem Solving. He had started on the game yesterday, and it already looks quite impressive. Basically this is going to be a scrolling space arcade game. So far he has the weapon firing in a number of shot combinations. The screenshot below shows the largest fire pattern.



Looks like some of the students are having fun with this assignment. The SwinGameAPI is a real hit, making this possible without having to worry about many complexities.

Keep the games coming...

PSD SS06Werewolf Project

The Werewolf Project

The Werewolf Project is an online PHP application (game) created by "The Howlers" (Eyal Gross, Allan Jones, and Joost Funke Kupper). The game is based on lies and strategically plan who you are going to be friends with and who your enemies are.
The game is forum based, meaning you have to discuss and read the forum to stay on-top of the game.
The game starts of in a small village somewhere in eastern Europe. Your village is being terrorist by werewolves. As good citizens you try to kill the werewolves before they eat all of you. But the werewolves also live among you. So, the question is. Are your friends the enemy or not?

With this application you are able to:
  • register
  • login/logout
  • create new games
  • join the games
  • reply upon posts
  • vote for people who you want to kill
  • upload avatars
  • search the webpage
These are the main features that we had to work on. Also we had to create a solid database that can still be extended if we create new versions.
But before we could start creating the applications our first milestone were a couple (by which I mean 4) spikes to get us up to scratch on how to use PHP and MySQL. We have learned PHP before in Internet Technologies, but it was very very minimal, and MySQL in Database Analysis, and Design, but never how to use MySQL over command line or with PHP. So that was our first week.
If you want to have a look at our spikes you can go to our Scholarship groups website.

Our second week was preparing the application. The Planning and Design stage. This took a long time, just because we had to plan out the entire (or most of the) application. This also includes delegation of who is doing what and when.

Here is an image of the first initial database that we designed. It's a bit messy, but most of what we needed was one there. We made some alternations the more we worked on it, but this version worked fairly well.

After we had delegated all the tasks we started creating the basic pages that we needed. We decided (from some help of Clinton) that we were going to include php files into one index file. This way you are able to easily extend on it.

Ones we figured out how to use all the different php files to create a single page, it became very easy to build the different functionalities without having to write an entire new page. Pretty cool. So much more efficient.

After two weeks (3 days a week, so 6 days. WHO THINKS OF SUCH A TIME SCHEDULE!!) of coding we ended up with the product you see on the right. We didnt complete it, but we were very very close. The only thing that needed to be done, is when you join a game that you get the right role assigned to you, and fix up some small bugs like error checking and fixing the style sheet. And that would have been it. But we will complete it, no matter what, it's just to awesome, and we are way to dedicated :)

PSD SS06Finish line sighted, Escape From Swinburne progresses

Its been a while since any of us updated the blog; all the teams suddenly realised that their projects were a heck of a lot bigger than they thought they were. Features and documentation are being dropped left, right and centre to help bring the projects back on track. Frequent blogging was the first thing to go!

My project, Escape From Swinburne (EFS), has shed some features including multiple AIs and more complex animations such as skidding-to-a-halt. However, all is not lost. In fact, over the last three weeks great progress was made (remembering that a "week" is three days plus some voluntary time at home, for this Scholarship).

EFS has evolved into a side-scrolling 2D game that lets the player use a jetpack to jump over gaps in the floor and (hopefully soon) avoid enemies.

EFS now features:
  • Animated graphics
  • Collision system
  • World-scrolling
  • Sound and music
  • Dynamic frames-per-second (FPS) load-balancing
  • Loading from a file (dynamic map creation)
  • Jetpacking

Animated Graphics

EFS has implemented an animation system that allows any world object (an object in the game world such as the player or a floor piece) to have animations for certain actions. A world object, when loaded, can load as many image frames as it likes, then can specify what ranges of frames make a certain animation (eg. frames 10-19 are the left walk animation).

EFS provides the following animation hooks for world objects:

  • Walk left
  • Walk right
  • Stand still left
  • Stand still right
  • Jetpack left (no horizontal movement)
  • Jetpack right (no horizontal movement)
  • Jetpack left (horizontal movement)
  • Jetpack right (horizontal movement)

A small "fudge" has to be made with the current animation system because of a limitation in the collision system. The collision system can't deal with world objects that change width as they animate (since they might change width into a wall and get stuck). Hence, when animating, the player's (or any other world object's) width can never change and transparency must be used as padding. However, this means that players can seem to be able to step off an edge without falling (they are being caught on their transparent part). This is gotten around by putting a "shield" around the player at the edges of his bitmaps. It looks poor at the moment, but I hope to improve it.

Collision System

I wrote a complicated collision and movement system that uses vectors to control movement and some basic vector math (unit vectors etc) to detect collisions. Thank god I kept my Specialist Maths notes from school!

A main problem was that world objects could collide with something, but never butt right up to it (since their movement was cancelled because a collision would occur if it continued); there was always a gap. I resolved this by "growing" a movement vector pixel by pixel (using unit vectors) until the object either collided with something, or it was able to move by its whole vector. This meant that objects could "move as close as possible" to other objects, removing that gap.

World Scrolling

EFS lets you load a large wide image as a background to a level and will size the level to that image. It then lets the player move left and right around the level, scrolling the view as necessary.

A problem with this method is that every frame that is rendered has had the entire large background image painted. This is a very inefficient method, since only a fraction of the background is visible at a time, yet all of it is being painted. I have calculated that the painting of the whole background takes around 40-50% of the entire frame's rendering time: a massive inefficiency.
However, I lack the time to rewrite that system, what with the deadline fast approaching. Lucky today's modern computers can handle it.

Sound and Music

This part of EFS was cut back considerably. Originally I wanted each game object to be able to have their own individual sounds, but now there can be only three sounds: the background music, the player's walking sound, and the player's jetpack sound.

I grabbed some free sounds off the Internet and bashed them with a wave editor to make them sound slightly reasonable. However, they aren't the best; if you listen carefully you can hear artefacts and the sound repeating harshly. But they are quite okay.

However, as heavily cut back as this feature is, it still sounds great and does not detract from the experience.

Dynamic Frames-Per-Second Load Balancing

This part of EFS took me a long time (relatively) to do. The game speed in games should be constant and shouldn't be faster on faster computers. Old DOS games often have this problem. EFS has a dynamic load balancer that calculates data updates such as movement and collision every 16 milliseconds (62.5 fps) and the rest of the CPU's time is spent on rendering graphics frames as fast as possible (with a hard-coded max of 125fps to stop flickering). However, when the rendering framerate drops beneath 30fps, EFS will start sacrificing game data fps to speed up the rendering. The result: the game plays slower, but with a higher (but not that high) framerate. Modern computers almost never experience this.

This was achieved by using a "performance counter" from the Win32 API that counts time in microseconds (as opposed to a normal time getting function which get time accurate to around 10ms: not good enough). The game goes into a tight loop (maxing out your CPU) and only runs the data update once 16ms has passed. It will then only run a frame render when:

  • There enough time until the next data update is due taking into account how long it takes to render a frame (the renderer times itself so it knows how long it takes to render a frame) OR
  • The framerate has dropped below 31.25fps (a render hasn't run for 32ms)

However, it will skip renders if the framerate is over 125fps (a render was last run in the last 8ms).

My laptop manages around 80fps on one of my testing levels, and my main computer (much more powerful) managed 180fps until I put a cap on that to 125fps to prevent the flickering that occurs at very high framerates.

I created fps meters in the top-left corner of EFS, to show the player their current, highest, and lowest fps for the game data and the graphics rendering.

Loading from a File

EFS will load its levels from map files. This means you can create levels on the fly without changing the source code of EFS just by editing a few text files.

Unfortunately, EFS has become so complicated that creating these text files is time-consuming and difficult. I had to create a template in Excel to help myself since the files get very complicated. A visual level editor is needed, but I don't have time to create one. :(

Jetpacking

The earlier revisions of EFS did jumping by adding an upwards movement vector against the downward vector of gravity. By holding down spacebar, you were able to continue adding that upwards vector against gravity and accelerate upwards at a great rate. I liked the "feature" so much, I decided to dump "jumping" and keep this "jetpacking" functionality instead. However, to limit their usefulness (otherwise the game would be ridiculously easy as you would be able to just fly across the top of the level), I implemented "jetpack fuel" which uses up as you fly and recharges when you don't. An onscreen progress bar is painted to show the jetpack fuel status.

TODO: Real Map(s)

At moment, I've created a simple dodgy testing map with my stellar (read: awful) drawing skills in MS Paint. It looks like a drawing out of a kindergartener's book. Even my dear old mother thinks its poor. Take a look at the screenshots to see what I mean.

The plan is, for the real maps, to take a picture of outside in Swinburne somewhere with a panoramic camera (for the wide angle) and then gaussian blur it in Photoshop to create a nice background for the levels. I have tried this before with Eyal's camera phone and it came up nicely. It is a technique I am pinching for some webcomics that use it for the backgrounds on the panels.

Then I will have to create the levels, which will be a pain because of the file format. Hopefully I can make something good in the time I have left. :|

TODO: AI

The very last feature of EFS I aim to get in before the deadline is a really stupid AI enemy. This AI will move left and right (changing direction when it hits something) and when the player touches it, the player will die.

This will require not only new code for AIs, but also changes in the collision system that will allow something to happen when the player collides with an AI, and allow the AI to detect when it hits a wall so it can move the other way.

I'll probably hack these changes into the code nastily just to get the feature done in time. I have a feeling that to get it done "properly" (ie not completely crap and limited) I will need a serious revamp of a lot of EFS (collisions, the game loop, etc). So we will see whether this feature makes the final version or not.

Wish me luck.

PSD SS06Gooey vs Cons.


Now, we've finally finished the GUI minesweeper, and finely tuned the console version. Everything runs smoothly to the beat.

After a few troubles (re: form validation) we got the GUI all down pat. With the ability to create a custom grid (up to 100 x 100 squares) the GUI minesweeper is now almost everything we aimed for in a minesweeper game. Well, it IS everything we aimed for. With a lot of work by Adam, everything except for form validation was complete and working, and after a bit of problem solving, we worked out the last little problems, and even found (and fixed) a bug in the library. Andrew Cain gave a helping hand, but in the end, most of the work was a group effort (of two.)

Console games tend to be both easy and difficult. Easy, as "It's a console. You can't make it complex, even if you try." But the challenging side is that you need to make an easy to use interface. Good luck having a thoroughly 'fun' console minesweeper. It's a difficult task, and playing it makes you truly appreciate a GUI, but nevertheless we did it.
It actually didn't turn out that bad.
A console game, once the workings of the game are complete, doesn't take too long to make. This version (minus the bug fix times) took approximately 1h 30mins to create, and, like everything else, will have code available for download. Open Source is good.


-Post authored by: Jonathan Torley.

PSD SS06Minesweeper design


There are 2 members in the group for the "Minesweeper project", they are Jonathan Torley and Adam Christopher.

The project consists of four parts:
  1. the design of the minesweeper model
  2. a console version of minesweeper
  3. two GUI versions, using Windows Forms and Java Swing
  4. post project documentation

Well this is the result of the first stage in the design of minesweeper. The class diagram is pictured on the right. The following is a simplified explanation of the design. A grid contains a 2-Dimensional array of squares, each square within the Grid has a Status which is a SquareState. How a Square is displayed in the Grid is determined by its Status.

Now that the design has been completed its time for some implementation. Jonathan will be developing the console version and Adam the GUI version.

PSD SS06Escape from Swinburne First Step Completed

The Escape from Swinburne project, which I am responsible for, consists of two parts:
  • The SwinGame API: Written in Pascal, it provides an easy to use API that next year's PSDs can use in their Algorithmic problem solving subject. The API provides them with the ability to draw to the screen with images and primitives, read mouse and keyboard input, and play and mix sound.
  • The Escape from Swinburne game: A small side-scrolling 2D game similar to games such as Commander Keen, written in Pascal and demonstrating the use of the SwinGame API

Recently, I just finished the first step of the project: a spike (learning task) on drawing, input and sound in Pascal. Drawing and input were no problem (besides the inevitable revision of the Pascal syntax that I learned half a year ago (easy)) as they have been handled by the WinGraph, WinCRT and WinMouse units, but sound turned out to be more difficult than it looked.

The first approach I took to sound was to try to play it through the Win32 API. I used the PlaySound() function, only to find that PlaySound() does not play two sounds at once. It either cuts off the first sound and plays the second one, or doesn't play the second one. Pretty useless in a game that needs to be able to have background music and multiple sounds of action happening.

The next approach was the next logical step: use DirectSound. Unfortunately, because all this is written in Pascal and DirectSound is normally used from C or C++ programs, the first hurdle was getting access to the DirectSound APIs. This wasn't so hard, since I found a unit that wrapped up all the external calls nicely for me.

The next problem was figuring out how to use DirectSound. I got three books from Andrew and Clinton, one DirectX 5 (OLD!!) and two DirectX 9 books. Ironically, the DirectX 5 book was the best of the lot. The DirectX 9 books either talked about DirectMusic, a lower level DirectSound type thing that I really didn't want to get involved in, or had missing details such as how to actually load a sound (that was particularly useless).

Eventually, I came to a point where I realised the function that people use to load a wave file into memory for DirectSound isn't actually part of DirectX and is part of something else, which I couldn't access from Pascal because it was written in C++. Net result: DirectSound was a complete failure.

Then Andrew and I hunted around a bit more and found the OpenAL library and a unit for using it in Pascal. I was able to use OpenAL successfully (since it included wave file loading functions).

All these things I learned along the way culminated in a little program that lets you draw stuff (pixels or bitmaps) on its window with the mouse and play two sounds at once by pressing a keyboard key.

I then wrote a HowTo article explaining how to use WinGraph for drawing, WinCRT for keyboard input, WinMouse for mouse input, and OpenAL for sound. That is a long article!
And then, finally, to finish it all off I had to create a short 5 minute presentation showing what I did. I had to create this presentation using the "Beyond Bullet Points" presentation style. Although, during the semester, I've been imitating this style (as I've seen it presented by Andrew) in my own presentations, this time it was different since I had to do it by the book. We were given a template to fill out that details the logical steps that the presentation must take to establish itself, present its information and then conclude cleanly. That was a lot more time consuming than expected and took around half a day to do! Apparently, you get faster at it when you do it more.

You can see what I've done here:

PSD SS06The PSD Project Team


Welcome! We are the PSD Project Team, a small group of students participating in the current 2006 PSD Summer Scholarship program.

The PSD Summer Scholarship program is a four week program designed to improve and refine the skills of a select group of students. The basic structure includes the creatiion of small programs, websites, databases, tutorials and documentation. The three projects that are created are the "Escape from Swinburne", "Minesweeper", and "Werewolf Project".
To view more information about the Scholarship projects you can go to the 2006 PSD Scholarship website.

The "Werewolf Project" is produced by the Howlers. The three students that are in this group are Eyal Gross, Allan Jones, and Joost Funke Kupper.
The project is an online game developed using HTML, PHP and MySQL. This game will allow user to create an account, selecting different formats of the web-page, and join several games at the same time.
To view more information about the creation of the project you can go to the Werewolf Project website.


PSD SS06PSD Summer Scholarship 2006 Pict Blog

Welcome to the PSD Summer Scholarship program for 2006. This blog will contain pictures related to the work undertaken as part of this project. Further details of this project can be found on SwinBrain.

This program was undertaken by

Footnotes