Nostalgia for programming in the 80s

I first learned to program a computer in 1982. We learned BASIC on Commodore PETs. I loved it.

Here’s a gem that was being upvoted on reddit.com/r/programming. It’s an episode of Computer Chronicles circa 1984. They discuss “current popular programming languages”. What a treat:

Share

Artifact Pr-1: Cluedo Assistant

Description

A program that helps you play the crime fiction board game Clue (Cluedo in Europe).

The user is prompted with initialization questions (how many players are playing, how many cards each player has, which cards the user has in their hand ).

After the initialization, gameplay begins. For each turn, the program allows the user to record what took place that turn– if anyone made a suggestion (e.g. “I think it was ____ in the ____ with the ____”), an accusation (i.e. positing what is in the envelope),  or if they simply just rolled the dice and moved to a new square.

The program tracks how many card possibilities are left for the envelope and other players. If there is only one of each type of card left in the envelope, an alert is printed advising the player to make an accusation.

At any time, the user is able to make an “inspired deduction” when they are certain another player has a card.  The user also has the option to view various parts of the database at any time during game play. For example, the program sequentially assigns a unique number to every suggestion so they can be viewed as a list of transactions. Other options available for viewing include which cards we know a player has and all of the possible card options.

Technical Knowledge

I applied my knowledge of:

  • logical programming in SWI-Prolog
  • list recursion
  • database programming with assert and retract

Skills Applied

  • building models and using these models to produce logical hints for the user
  • function (predicate) decomposition
  • controlling backtracking with consistent use of green and red cuts

Notes

I wrote this with Sara Bainbridge for CPSC 312, Functional and Logical Programming, at UBC in Fall 2010.  We enjoyed working together and with Prolog.

Demonstration

I can’t release the entire source code because this is an active course and I don’t know if any professors will assign this sort of project to a future class.  Email me if you’d like to see a demo and in the meantime here’s a snippet:

/* Prints an ALERT if the envelope only has one of each card left */
checkForHint :-
     numEnvelopeWeapons(W),
     numEnvelopeSuspects(S),
     numEnvelopeRooms(R),
     !,
     W =:= 1, S =:= 1, R =:= 1,
     retractall(playerOneHint(_)),
     assert(playerOneHint('Only 3 cards left! Assertion:'))
     ; true.

Share

Installing LeJOS NXJ on Mac OS X 10.6 (Snow Leopard)

The intensity of the term has lulled, marginally, so last night I completed my migration from PC to Mac.  I installed LeJOS NXJ, a Java programming environment for the LEGO Mindstorms NXT. It lets us program LEGO robots in Java.

LeJOS is an open source project hosted in the sourceforge repository. It was forked from the TinyVM project which implemented a Java VM for the LEGO Mindstorms RCX system.

By installing I mean adding these to my Macbook Pro and successfully installing the first item on the list on my LEGO Mindstorms NXT brick:

  1. Replacement firmware for the NXT that includes a Java Virtual Machine
  2. A library of Java classes that implement the leJOS NXJ API
  3. A linker for linking user Java classes with classes.jar to form a binary file that can be uploaded and run on the NXT
  4. PC tools for flashing the firmware, uploading programs, debugging, etc
  5. A PC API for writing PC programs that communicate with leJOS NXJ programs using Java streams over Bluetooth, USB, or the LEGO Communications Protocol (LCP)

I’ve blogged about my introduction to LeJOS and Mindstorms and have successfully used LeJOS on Windows Vista and Windows 7 as well as Ubuntu.   Configuring the environment on my Mac was, as usual, easiest of the three.

Recall that I am using a mid-2010 MacBook Pro running Mac OS X 10.6. LeJOS NXJ requires some of the drivers from the original LEGO brand software that ships with the robot.  I tried using the CD that came with my Mindstorms (purchased in May 2008) to install the original LEGO system, but it didn’t install.  There were no error messages but the app never appeared in my apps folder.  This is how I solved the problem:

1. A little probing on the LEGO website and I found a Snow Leopard fix which I used to complete the installation.  I also found and installed the latest LEGO firmware update (version 1.29).

2. Because of the difficulty I’ve had with drivers on both Windows and Ubuntu, I also installed the Fantom Driver on top of the MindStorms app.

All of these are at: http://mindstorms.lego.com/en-us/support/files/Driver.aspx#Driver

3. Download and unzip LeJOS NXJ: http://sourceforge.net/projects/lejos/files/lejos-NXJ/

4. Set the permissions in the downloaded folder:
chmod -R 755 /pathto/lejos_nxj/

5. Edit etc/launchd.conf to include (I already had this from a former install):
setenv JAVA_HOME /Library/Java/Home

6. Edit ~/.bash_profile to include
LEJOS_HOME=/pathto/lejos_nxj
NXJ_HOME="$LEJOS_HOME"
DYLD_LIBRARY_PATH=/pathto/lejos_nxj/bin
export LEJOS_HOME NXJ_HOME DYLD_LIBRARY_PATH
PATH="$LEJOS_HOME/bin:$PATH"
export PATH

This is where I got stuck.  No matter how I adjusted these environment variables, every time I connected the NXT brick by USB and tried to flash the LeJOS firmware onto it, I received some permutation of

Bad news: An error has occurred lejos.pc.comm.NXTCommException: Cannot load a comm driver!

It’s always something with LeJOS and it’s always something I’ve overlooked.  In this case, my Java defaults to 64 bit and LeJOS needs to use 32 bit.  I recently upgraded my RAM to 8GB and in order for the Win 7 virtual drive in my Virtual Box to use 4 GB of memory I have to boot Snow Leopard in 64 bit kernel mode (by holding the 6 and the 4 down during startup).  It is necessary to:

7. Manually add the -d32 flag to the LEJOS scripts. Setting the Java version in system preferences won’t do the trick.  Open all the non-binary files (the ones that don’t end with .bin) in the /pathto/lejos_nxj/bin/ folder and edit all calls to “java” to include -d32 to make them run in 32-bit mode.

Worked like a charm.

I was motivated by more than the opportune free evening.  I am considering enrolling in September in a directed studies course at UBC in which students make a proposal to a faculty member to investigate a topic that goes beyond that which is covered in existing courses.  I’ve enjoyed working (and playing!) with Mindstorms (what red-blooded Canadian wouldn’t!) and last term I enjoyed learning Haskell and Prolog.  This term’s course in internet computing is beginning to stand out as a favourite.  I’m also itching to learn Erlang.  Somewhere in this there is some interesting work…

Share

Java (Tomcat 6) on Mac

I’ve been using a Mac for less than a year and I don’t find the OS as intuitive to manage as Windows. And for good reason–I have some 15 years of bad habits to unlearn! Environment variables, for example. Where and how do you set environment variables on a Mac?

I took a Java web application development course and we needed to edit our environment variables after installing Tomcat 6, the application server. I added these to my /etc/launchd.conf file:

setenv JAVA_HOME whereveritis
setenv CATALINA_HOME yadayada

Mine, for example, looks like this:

setenv JAVA_HOME /Library/Java/Home
setenv CATALINA_HOME /Library/Tomcat/apache-tomcat-6.0.29

Though I didn’t have trouble with any other settings after rebooting, it helps to remember that we can fuss with Java on Mac here:

Applications -> Utilities -> Java Preferences

While using Tomcat 6 I discovered that if there is more than 1 version of el-api.jar on the path there could be problems (you may experience a slightly hysterical evening of HTTP 5XX errors and JSPs that just won’t work no matter what). Take a look at the jar files in /TomcatInstallation/apache-tomcat-6.0.29/lib, and made sure none of them appeared in /JavaHome/lib/ext.

Share

A Running Start to 2011

Happy new year! Another term has come and gone and with it went my best intentions for updating this blog with anything that resembled regularity. I hereby resolve to add an entry at least once per week in 2011.

Snow Monkey!

Snow Monkey!

I spent Christmas in Japan, a 2-week holiday that included Osaka, Kyoto, Nara, Shibu Onsen (snow monkeys!) and, of course, Tokyo.

As I write this I am sitting in the back row of UBC’s final offering of CPSC 211, OOD with Java. I took this course last year and I am excited to be helping one of my favourite professors, Dr. Kim Voll, deliver this last installment before UBC completes its conversion from Java to Scheme. The fall term went well, incidentally. I enjoyed learning more about functional programming with Haskell at UBC; amongst other assignments we used Haskell to create a RushHour solver and an Oska next best move generator. I was lucky enough to work with my friend Sara on the Oska project. Sara’s background in art and her fluid navigation of the intersection of art and science made the project an exercise in unmitigated pleasure.

Here’s a nice little Haskell example. These two functions (actually three, since the second function is in fact a pair) each multiply two numbers and return the product. The first version uses good old fashioned augmenting (vanilla) recursion. The second version invokes a helper function which uses tail recursion and an accumulator variable:

1.
multiply :: Int -> Int -> Int
multiply x y
| x == 0 = 0
| otherwise = y + multiply ( x - 1 ) y

2.
multiply_tr :: Int -> Int -> Int
multiply_tr x y = multiply_tr_helper x y 0

multiply_tr_helper :: Int -> Int -> Int -> Int
multiply_tr_helper x y product
| x == 0 = product
| otherwise = multiply_tr_helper ( x - 1 ) y ( product + y )

Pretty cool, don’t you think? Perhaps the best example of Haskell’s concise elegance, however, is its implementation of the quick sort algorithm (which is elegant but slow and a bit of a memory-piggy):

qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)

The second half of the same course focused on logical programming using Prolog. There were some challenging concepts to wrap my head around.

This term is all about operating systems, internetworking, graphics and algorithms. Our plane landed at 9:35 AM on Tuesday and I was in class (slightly late) by 10:10 AM, and that describes the entire week quite well.

Share

On the via ferrata

Since today is the equinox it seemed appropriate to finally update the interweb with the latest happenings in my corner of the world.

I am back at school, studying computer science at UBC and computer technology at BCIT.  I travel between the campuses several times per week and I’m enjoying the two very different ways of viewing and using computers.  I take my new best friend, the Macbook Pro, everywhere I go.  The glamour hasn’t tarnished or worn thin–I still like my new Macbook Pro.

Quilt 8 Process: Barn

Quilt 8 Process: Barn

This fall at UBC I’ll be focusing on functional programming using Haskell, and logical programming using Prolog.  At BCIT I have begun a course in web app development using Java, and the much anticipated iPhone development course is underway.  I began a UBC course in programming languages using Scheme, really a precursor course for what I consider to be the crown jewel of undergrad computer science at UBC, the 4th year compiler development course, but after two weeks I realized that trying to keep so many different programming paradigms separate and distinct was going to be next to impossible.  I’ll take it next year.

Quilt 8 Process: Machines

Quilt 8 Process: Machines

The quilt of Beaver Creek Farm is still under construction.  I’ve been really bad about taking photographs during the process.  Most of the time they are quick and blurry and not worth reproducing; I just can’t seem to get a handle on Scott’s Canon 20D–it just doesn’t like me and won’t cooperate at all.  So I’ve put the Canon away for good and will try taking some process shots this weekend with the new iPhone.  The wedding was last weekend and instead of the quilt we sent Amy and Brent some wedding bling and an IOU for the rest.  I began experimenting with techniques for constructing the buildings on the farm and the results are fantastic, but the process is slow.  Scott reminded me that late and great was better than sloppy and punctual; he hinted that it might even be fun to deliver it to Beaver Creek Farm in person.

Quilt 8 Process: Farmhouse

Quilt 8 Process: Farmhouse

Incidentally, our dry spell ended and the rain returned with the cooler weather.  Almost as if by cue the magnificent light sculpture on the side of the Shaw Tower has developed yet another burnt out gap, just in time for the inclement weather which apparently prevents the building from effecting repairs until spring.  By my count, that means the light sculpture, by far the brightest part of our skyline and the most difficult-to-ignore part of our skyline, will have required repair for 7 to 8 of the 12 months of 2010.  It really grinds my gears. [EDIT: It was fixed by Halloween.  Wow!]

Oh a happy civic note, I was pleased to find out that Van Dusen Gardens has decided to work with the City of Vancouver to keep the Bloedel Conservatory open.  I really like the Bloedel, it’s a beautiful fantastic geodesic dome on the top of Little Mountain in Queen Elizabeth Park.  Inside is a Thomas Hobbs-approved collection of exotic and unusual plants and dozens of species of birds.

The Vancouver Art Gallery has launched a bold campaign to motivate its $300M move to a new location somewhere between its current site and nowhere.  Though the gallery found its budget was short enough to require laying off some 15 staff, they have hired a PR firm and are spamming Canadian art waves with news of their marvelous new cause.  Scott and I were even accosted by a middle-aged art maven in the lobby who wanted us to add our names to a great long scroll of signatures supporting the move.  No thank you.  Especially when I found out she was being paid by the Gallery.

Quilt 8 Process: Tree

Quilt 8 Process: Tree

There are two things I especially dislike about the Gallery’s choice.  The first is the arrogant fait accompli attitude the Gallery has taken, spamming art magazines with news about the move, overdosing its Facebook channel with heady odes to the move etc etc.  The problem is that the City, which owns the land the VAG covets, hasn’t decided whether to give or heck even sell the land to the Gallery.  The City of Vancouver wants to know what the people of Vancouver want.  And I think that’s great because the Vancouver Art Gallery is trying to tell us what we want, which I don’t like at all.

The second thing I don’t like about the new location is its location.  It’s being touted as a new arts centre for the city but it’s a city block that’s sandwiched between an opera house cum playhouse that’s closed during the day, a stadium that’s also closed during the day, and a big post office warehouse.  The Vancouver Art Gallery’s current location in Robson Square places it firmly in the cultural and commercial heart of the downtown core–plenty of restaurants and shops surround it and everything is open and vibrant all the time.  Leaving the historic courthouse where it resides for a big green glass and concrete box (because that’s the sort of McCheng piece of ho-hummery $300M will buy you in Vancouver’s irrationally slow, expensive and homogenous construction scene) seems to undermine the VAG’s alleged commitment to the community.  I think it is irresponsible to carve out the city’s cultural heart and fail to care what happens in its wake.

Vancouver’s art scene is falling rank and file into two camps–those who support the move, and those who don’t.  Scott’s devoted urbanist agenda means it’s a constant topic of conversation in our home.

Quilt 8 Process: Creek

Quilt 8 Process: Creek

Share

Migrating to Mac and Discovering the Cloud

I bought a Mac.

The BCIT technorati have been all abuzz about a new iPhone development course on the curriculum and I want to learn first hand what developing apps for the iPhone is all about.  I’ve read good and bad stories about the extent of Apple’s control over your products, and I would like to go through the development cycle myself and decide whether building apps for the iPhone really is the new black.

The course starts in September and I have some time off this summer so buying a Mac now and getting acquainted with Macdom at my own pace seemed like a good idea.  With much ado we bought it, and I installed a few development apps, and then put it away and pulled out my 17” HP Pavilion and played some WoW.

I basically put the Mac out of my mind until Canada Day eve.  We spent the evening loading the car for our epic annual Canada Day trip and barbecue to Manning Park and I sat down to run a few instances with my main Brestamynd before bed.  Picture it.  The Pit of Saron rings with the sound of our battle against the Scourgelord Tyrannus.  We’re down a mage, our tank is losing ground and the healer is finding it hard to keep up.  My cat is dead but I’ve been playing my mana well and we still have a chance because Tyrannus is down to 40% health and our tank is an aggro wizard.

And my graphics card unceremoniously blew up.

The neighbourhood rang with the sound of my frustration.

Hours later, after the tears had dried and I’d exhausted all my efforts to repair my beloved 17” laptop I slunk, tail between my legs, broken and resigned, to the back of the closet and retrieved my 13” Macbook Pro.

I’m never going back.  I am an unabashed, unashamed, unmitigated convert.  I love my Mac.  We have a 20” Samsung SyncMaster 205BW and my handy mini-DVI cable means I get to play my WoW, which runs on a Mac, in even larger and more highly resolved glory than ever before.  Development tools went on in a fraction of the time it took to install them on a Win 7 machine because half of them are already there (Mac OS X 10.6, the operating system, being based on Unix where many of those tools are developed in the first place).  The keyboard is a little small, so I bought a full-sized USB keyboard with a number pad.

I am using Virtual Box, which I’ve touted before, to host a virtual machine with Win 7 64-bit.   Why bother?  I need my MS OneNote, which is perhaps the best note-taking software ever.  I have OneNote on my ultra-portable Gateway netbook, which Scott affectionately calls my clutch, but the keyboard is simply too small for me and I just use it for reading eBooks and surfing the web.

During this epic migration from PC to Mac I finally discovered how to use the cloud.  There’s been a lot of  talk about cloud computing but I have not found any utility in the cloud for me.  This all changed when my friend Susan, a Communication instructor, invited me to join Dropbox.

Dropbox is a storage space “out there” in the cloud, which is nothing new, but the Dropbox application residing on any number of the computers I use during the day lets me treat it like a folder in Win 7’s Explorer and Mac’s Finder.  I can drag and drop files to and from my Dropbox, and the folder’s contents are synced realtime on the remote server and on my other computers.  I’ve tested it with my netbook and Mac side by side and it takes mere seconds.  Since the files reside on each system I can work on things when I’m offline and then sync up as soon as I’m back on the Interweb.  And if I’m on a computer that doesn’t have the Dropbox application, I can access what I need from the Dropbox website.

So far I’ve uploaded my summer reading list, some course material, my Eclipse workspace and, of course, all my OneNotes folders.  There’s even a public folder in my Dropbox and I can distribute the unique URL and give friends read or read and write access.  My colleague Sara and I are using it to coordinate our efforts this summer as we tackle Project Euler in Java, Scheme and C/C++.  We used GoogleDocs to create a spreadsheet where we’re tracking our progress, and GoogleWave gives us a place to exchange ideas.  Our shared Dropbox folder acts as a repository for our solution code.

The repair shop called about the HP a few days ago and said it was fixable, but they wouldn’t do it.  I heard whispers about a design flaw, about many, many HP Pavilions having this trouble because of overheating and poor ventilation.  It’s only two years old.  We booted it in safe mode and disabled the video card drivers, and Win 7 kicked in with vgaSafe drivers so I can use it for office apps, but my days of grinding dungeons on the Pavilion are over.

I’d like to say that my move to Mac has been effortless but yesterday I woke up and opened my Mac and discovered that it could no longer find our wireless network.  Huh?  I tried rebooting a few times and it didn’t work.  So Macs aren’t so bug-free after all.  Sinking feeling. I called the support line and was speaking to someone within a minute. I learned that I had to reset the computer’s PRAM.  The support representative was very careful to avoid calling this a bug as we did this together over the phone.  It worked.  I’m happy.

Share

Clippy, or Teaching Computers When to Interrupt

I attended an interesting lecture this morning at UBC by Dr. Barbara Grosz, Dean of the Radcliffe Institute for Advanced Study and Higgins Professor of Natural Sciences, SEAS Harvard.  Dr. Grosz is an expert in human-computer interaction (HCI) and gave an abbreviated version of tomorrow’s Faculty Associates Dinner talk at the Peter Wall Institute entitled, “Can’t You See I’m Busy? Designing Computers That Interrupt Only When They Should.”

I met my classmate Sara outside the lecture hall and we entered with a few minutes to spare only to find, with some dismay, that there was exactly one other audience member.  What kind of talk would it be if we were an audience of three?  That’s not fun.

With some trepidation I fetched a bottle of water from the refreshment station and we sat down and spent a few minutes planning our summer 2010 Project Euler challenge.  I’d forgotten about the just-in-time mentality which seems to be in favour on campuses and particularly in comp sci faculties these days.  With mere seconds to spare, I looked up and realized the room had filled.  I’m not kidding.  It was organized, unchaotic, quiet and polite, but in two or three minutes we went from an audience of 3 to hundreds.  That was more like it.

After a brief intro Dr. Grosz launched her motivation for research with some very funny examples of computers interrupting the user with useless or redundant information.  Message windows that pop open and say, “Mouse not working.  Please check your connection and left click to continue”, or who can forget that useless Office Assistant from MS Office, Clippy the Useless ClipArt PaperClip?  “I see you’re digging a hole.  Is that a personal hole, or a business hole?”.

Clippy the MS Office Assistant (97-03)

Clippy the MS Office Assistant (97-03)

There was a lot of groaning when Dr. Grosz brought up Clippy, though Sara who is about 15 years younger than me looked charmingly confused.  But the question was clear: how can we design an artificial intelligence that will collaborate and not just interact?  How do we design a computer that interrupts us in ways that we will find meaningful and helpful and not just distracting or irritating?  How do we measure and map the utility of interrupts?

Dr. Grosz encouraged the room to review papers by Doug Engelbart, the inventor of the mouse, specifically the ‘classics’ (my quotes) from the 60s, in order to provide a conceptual framework for the problem domain.

Dr. Grosz introduced us to the Colored Trails Testbed, a framework for conducting research about decision-making in groups comprising people, computers and a mix of the two.  It’s a simple game: a rectangular board of colored squares in which each player is given a starting position, a goal position on the board, and a set of chips in colors taken from the same palette as the squares.  In order to attain the goal, the players have to bargain with each other.

Colored Trails

Colored Trails

I was particularly interested in the overlap with anthropology and sociology that her work takes.  Dr. Grosz commented on the difference that a financial scoring matrix played, and the differences between person to person and person to computer interactions and bargains.  She examined notions of trust, benefit and cost, altruism and uncertainty, and of course collaboration.

Unfortunately the 90-minute talk was shortened to less than an hour followed by a brief and tightly-scheduled Q&A period.  Dr. Grosz skipped through many of her slides though I caught tantalizing glimpses of graphs plotting experimental statistics and HCI buzzwords.  Her concluding remarks boiled down to her observation that we need computer agents that are partners rather than servants, who will use context and behaviour to help us in meaningful ways.  I am interested in reading more about her SharedPlans model of collaboration developed in collaboration with Sarit Kraus.

Share

LeJOS NXJ

LeJOS is replacement firmware for the Lego Mindstorms RCX and NXT bricks. It’s based on the Java programming language and includes a JVM, or Java Virtual Machine, which allows Lego Mindstorms robots to be programmed in Java.

LeJOS is an open source project which means you can participate in its development, or download the source code and turn it into a creation of your own.

The current version is 0.85 released September 2009.

Lego Mindstorms Robotics Kits:
http://mindstorms.lego.com/
LeJOS Java for Lego Mindstorms
http://lejos.sourceforge.net/
Official LeJOS Developer Forum:
http://lejos.sourceforge.net/forum/
Lego Digital Designer:
http://ldd.lego.com/
Installing Lejos on Ubuntu 8.04 (old but still applicable):
http://lejos.sourceforge.net/forum/viewtopic.php?p=3785
http://ubuntuforums.org/showthread.php?t=854846

In 2008 at BCIT I worked with a team of 4 others in a software development project using LeJOS. BCIT owns a large room full (and I mean FULL) of Lego Mindstorms Lego. We applied what we had learned about iterative development and project management during our first year to a 5-week software development lifecycle, from requirements gathering to specification to implementation and delivery. We applied two terms of Java to a series of architecture and programming milestones and a final tournament based on the competitions organized by the First Lego League.

Our team (Hadaga) finished in 2nd place out of 23 (winner score: 495 / average score: 320 / our score: 395 ). I’ve included some of our code and design documents as an example of great teamwork and good clean fun.

Our Team Hadaga Tournament Code (Uncompiled Java):
Nano table [3 KB] Power table [12 KB]
Team Hadaga Robot Building Instructions (Lego Digital Designer format):
Hadaga_Building_Instructions.lxf [28 KB]
Team Hadaga Design Docs (pdf):
Team Agreement [73 KB] Concept Document [224 KB] Design Document [3.4 MB]
Share

Virtual Machines: Windows 7 host and Ubuntu 9.10 guest

I am trying out Sun’s Virtual Box this term. I’m going to be doing a fair amount of development in C and C++ which means using gcc on Ubuntu. I’m pretty invested in the software on my Windows 7 laptop and yes, I’ve got Cygwin, but I prefer working with C and C++ on Ubuntu. I tried dual booting Vista and Ubuntu before upgrading from Vista to Windows 7, and I generally didn’t like the whole dual-boot experience.

Enter Sun’s Virtual Box. I worked with virtual servers using VMWare while studying databases at BCIT last year, but I found VMWare was a real memory pig and I wanted to try something that was a) open source, b) free and c) free.

Setting up Ubuntu 9.10 as a guest on my Windows 7 host was almost too easy. The only problem? The Virtual Box User Manual doesn’t include a clear step-by-step recipe for installing Guest Additions, which is the Virtual Box “partner” we have to install on the virtual machine. It integrates the virtual machine with the host machine so you don’t have to do weird screen resize things or mouse captures or anything that offends the intuition. Here’s what I did:

  1. download and install Virtual Box
  2. download the iso for Ubuntu 9.10 and use your favourite iso mounting software to mount it in your host (I used VirtualCloneDrive)
  3. start Virtual Box and create a new Virtual Machine
  4. install Ubuntu in the Virtual Machine (Virtual Box’s wizard asks some set-up questions and you just point it to the iso and wait–go make a sandwich or something)
  5. once Ubuntu’s up and running, choose Devices/Install Guest Additions from the menu bar in the virtual machine’s window
  6. ignore the weird warning message Ubuntu spits out (check the app bar to find it if it’s not maximized)
  7. double-click the GUESTADDITION disc which appears on the Ubuntu desktop
  8. run the autorun.sh script
  9. reboot the Ubuntu machine.  Done.

It’s seriously that simple.  It’s completely moron-proof. I did this without any trouble at all. The Virtual Box wizards take over when you create a new virtual machine, and then when you open it the first time it cues you for the iso of the operating system (in my case Ubuntu 9.10) to install.

I have 2 partitions on my hard drive, a big Windows 7 partition and a smaller 25 GB docs folder which is mounted to my Windows as drive D called shared. I wanted to give the Ubuntu virtual machine read/write access to my D drive, and I did this in two steps:

  1. close the virtual machine and edit its Shared Folders (at the bottom of the virtual machine’s Details tab) to include shared
  2. reboot the virtual machine and use this command in a terminal window:
sudo mount -t vboxsf shared /home/christopher/shared

Again, crazy easy.

Talking about crazy easy, I made us new pajama bottoms during the Christmas break and started planning my next big art project.  I’ll post some pictures about it on orangewool once more work is done.

Share