gardenbot – second thoughts

After spending a few more weeks thinking about the gardenbot idea, I’ve changed my mind on a few things.

It very quickly became obvious that the idea I had before was too awkward. The scaffolding would block sunlight, and the robots would be too bulky.

After all, when you, yourself, go into the garden, it is not necessary for you to straddle the plants from both sides to take care of them.

So, I started thinking along a different tack, and went back to one of my original ideas.

In this idea, the garden is separated into a grid by walls, and the robots move among the plants by rolling along the walls.

The robots themselves are made of two modules – a base unit which does all the moving, and a top unit which has the specialised tools for managing the various tasks.

The walls themselves are built by a specialised robot.

Essentially, what I’m trying to do is to come up with an “out of the box” solution, where a small group of robots can be set loose on an unprepared area, and build up a functional garden with extremely little interaction from any outside parties.

Obviously, this will take some time to create, but that does not mean that it is impossible.

Anyway – it seems to me that the first robot that needs creation is the base unit – I can build the first walls myself, and I figure that the wall-building robot will also be a top-unit that rolls on a base unit, so the base unit is a logical first.

What I want to do, then, is to come up with a unit within the next year, that can traverse a grid of walls from any point to any other point, carrying something, without falling off the wall, getting lost, or dropping the object.

A nice test would be a glass of wine 🙂 – this would have the added benefit that I could work on developing an algorithm which would describe the optimum speeds for turning and acceleration such that the robot will not drop anything.

Linux vs Everything

A very nice analogy of Linux versus the rest of the OS world.

Reminds me of the funny little group of analogies below. It’s a bit dated now, as Linux is just as user-friendly now as most other operating systems (thank you, kde and gnome).

What if Operating Systems were Airlines

MS-DOS Airline

Everybody pushes the airplane until it glides, then they jump on and let the plane coast until it crashes again, then they push again jump on again, and so on.

Mac Airline

All the stewards, stewardesses, captains, baggage handlers, and ticket agents look the same, act the same, and talk the same. Every time you ask questions about details, you are told you don’t need to know, don’t want to know, and would you please return to your seat and marvel at the image quality of the in-flight movie.

OS/2 Airline

To board the plane, you have your ticket stamped ten different times by standing in ten different lines. Then you fill our a form showing where you want to sit and whether the plane should look and feel like an ocean liner, a passenger train or a bus. If you succeed in getting on the plane and the plane succeeds in taking off the ground, you have a wonderful trip…except for the time when the rudder and flaps get frozen in position, in which case you will just have time to say your prayers and get in crash position.

Windows 95 Airline

The airport terminal is nice and colorful, with friendly stewards and stewardesses, and easy access to the plane. After the plane arrives, 6 months late, you have a completely uneventful takeoff… then, once in the air the plane blows up without any warning whatsoever.

Windows NT Airline

All the passengers carry their seats out onto the tarmac, placing the chairs in the outline of a plane. They all sit down, flap their arms and make jet swooshing sounds as if they are really flying.

Windows XPAirline

The airplane is very pretty, and each passenger gets to choose their own colour and pattern for the paintwork, and their own favourite engine noise. Unfortunately the plane is so heavy and so slow that it is unable to get airbourne,and crashes at the end of the runway. When parked in the hanger, unresolved security bugs in the planes doors AND windows AND luggage-bay AND engines AND wings AND body panels allow thieves to break in and steal all the seats.

Unix Airline

Each passenger brings a piece of the airplane and a box of tools to the airport. They gather on the tarmac, arguing constantly about what kind of plane they want to build and how to put it together. Eventually, they build several different aircraft, but give them all the same name. Some passengers actually reach their destinations. All passengers believe they got there.

BEOS Airline

There is no airplane. The passengers gather and shout for an airplane, then wait and wait and wait and wait. A bunch of people come, each carrying one piece of the plane with them. These people all go out on the runway and put the plane together piece by piece, arguing constantly about what kind of plane they’re building. The plane finally takes off, leaving the passengers on the ground waiting and waiting and waiting and waiting. After the plane lands, the pilot telephones the passengers at the departing airport to inform them that they have arrived.

Newton Airline

After buying your ticket 18 months in advance, you finally get to board the plane. Upon boarding the plane you are asked your name. After 46 times, the crew member recognizes your name and then you are allowed to take your seat. As you are getting ready to take your seat, the steward announces that you have to repeat the boarding process because they are out of room and need to recount to make sure they can take more passengers.

VMS Airline

The passengers all gather in the hanger, watching hundreds of technicians check the flight systems on this immense, luxury aircraft. This plane has at least 10 engines and seats over 1,000 passengers. All the passengers scramble aboard, as do the necessary complement of 200 technicians. The pilot takes his place up in the glass cockpit. He guns the engines, only to realise that the plane is too big to get through the hangar doors.

Linux Airline

Disgruntled employees of all the other OS airlines decide to start their own airline. They build the planes, ticket counters, and pave the runways themselves. They charge a small fee to cover the cost of printing the ticket, but you can also download and print the ticket yourself for free. When you board the plane, you are given a seat, four bolts, a wrench and a copy of the seat-HOWTO.html. Once settled, the fully adjustable seat is very comfortable, the plane leaves and arrives on time without a single problem, the in-flight meal is wonderful. You try to tell customers of the other airlines about the great trip, but all they can say is, “You had to do what with the seat?”

using vnc to create a thin client

At home, I use two computers (and have the makings of several more) for my daily net access.

One computer is a zippy 1.7GHz box which I call Monolith because of its shape and colour. The other is a 350MHz box which is slow and frustratin with anything more demanding than a simple Fluxbox window manager.

Usually, the big zippy monster is used by Bronwyn for email, which seems like a huge waste of processing power.

Yesterday, I decided to even the score, and create a thin client out of the slow one, which would apparently speed it up, and give some other benefits as well, which I’ll get to.

So – what is a thin client? A thin client is a computer with very little computing power, which uses an application server to run all the programs wanted.

Monolith on left running KDE3.2 on x.org6.7. Methuselah on right running KDE3.3 on VNC

I was thinking about this on the way home, and figured there were two ways to do this – I could either run some programs on the server, sending the visuals back via X’s network, or I could run all programs on the server. I opted for the second.

There was very little involved in setting up the server.

  • Download and install a vnc server.
  • Run vncpasswd ~/.vnc/passwd to set up the VNC server’s access password.
  • Edit /etc/sysconfig/vncservers and add an entry for yourself, using the example as a template.
  • You can now either restart your machine and let the machine start up the server automatically, or start the vncserver by hand without restarting. I started the server with vncserver :1 -geometry 1024x768.

The client setup took just a little more thought, but was also easy.

  • Download and install a vnc client and the vncpasswd utility (comes in vncserver packages).
  • Run vncpasswd ~/.vnc/passwd so you are not asked for a password when accessing the server. Make sure you enter the same password as you used above!
  • Edit ~/.xinitrc and clear out anything that’s there, replacing with this:
    vncviewer monolith:1 -geometry 1024x768 -passwd ~/.vnc/passwd
    Make sure you replace “monolith” with your own server name.
  • Edit /etc/inittab and change the id:5:initdefault: line to id:3:initdefault:. This makes the client reboot in text mode.
  • Either shut down the X server if you can, or restart the client if you can’t.
  • Log in, and type startx. That’s it!

Now, what’s happening is that the client doesn’t bother loading up any resource hogging window managers, but instead uses VNC to directly display the output from the server.

I’m not sure of the limitations, bandwidth-wise, but I’ve run full-screen video over a standard 100M LAN with no problems.

The benefits of this, that I can think of, straight off:

  • Less expense – you only need one fast computer to run a few clients.
  • I’m not certain about this, but I would guess that a lot of programs can use shared memory, meaning that there is less computational drain to run a few instances of the same applition on one machine than to run the same number on separate machines.
  • Upgrading the server upgrades all the clients at the same time.
  • There are a lot of very cheap second-hand computers being sold by refurbishment companies! I would guess you could get a perfectly functional thin client for about 50 euro or so.
  • If the thin client can handle some extr computation, then you can use it to run small servers – email, web, database, etc, letting you decentralise your system.

Catbert – a new cat

Got a new cat.

I had to go to town today to visit my doc. On the way, we passed a garden where we had noticed some kittens before. There was a sign up offering the kittens to a good home. Bronwyn asked me if it’d be okay, so we went in, and Bronwyn asked for them to keep aside the last kitten.

Turns out the couple offering the kittens were some people that had been talking to me professionally over a year ago about a potential web development idea. It was a fascinating idea aimed at transcriptionists. I’m sorry we didn’t get the contract, as it was very very interesting to me.

Anyway – we carried on and did our round of doctors and pharmacies.

On the way home, it was damned cold, and had started lashing down rain (you don’t need a supercomputer to predict weather in Ireland!), so we were worried about how to bring the kitten back home – we do not have transportation, so would have been carrying it.

Turns out we needn’t have worried. When we knocked in to pick up the cat, they asked to let them bring it on over later, as the kitten belonged to the youngest daughter, who wanted to say goodbye.

We gave directions and went on our way.

The cat arrived at about half five, and we went out to say hello.

Patsy, our red setter, was being more energetic than usual, so we had to chain her down.

We talked to the kitten’s owners for a while, showing them our own animals.

When it was time to let go, the daughter handed me the cat, who she hadn’t named yet, and they got into their car.

Immediately, Patsy got loose from her short chain!

She jumped up on me, and the cat jumped out of my hands and into the bushes we have for fencing.

I shortened her chain again, and ran off into the next garden to “cut ’em off at the pass” – in my slippers, in long grass, after a heavy rain.

The owners were probably bemused and wonderin what they’d let the kitten in for as they watched me run around like a scarecrow trying to catch it!

The cat was crawling through the hedge, being followed closely by one of my other cats, who was sniffing it suspiciously.

I knew that the kitten would avoid capture if it knew I was trying to catch it, so I snuck my hand in behind it and held it’s tail!

I know that’s not what cats like, so I brought it out as quickly as possible and went to hold it more comfortably by the scruff of it’s neck (security was important!).

Immediately, I knew that was a bad idea! The cat attacked my hands, biting the fingers and clawing chunks of flesh out of the palm. I got the picture, removed my hand from its vicinity and let it vent its anger at thin air, but without letting go of the tail.

The cat tried urinating at me to let it go! That was a damned annoying thing! I let it empty itself before quickly swooping behind the head and grabbing the scruff.

Once I’d brought the cat into the house, we had time to let it settle down…

Hopefully it’ll calm down.

You can see from the photos that he’s still a little tense, even though almost two hours have passed.

spiders!

I hate creepy crawlies!

This monster was waiting for me in the toilet, then when I sat down to try make something out of the photo (I’m no photographer!), it had the gall to come in under the table I was sitting at!

Near gave me a heart attack!

I’m an arachnophobe – I’ve always been terrified of creepy crawlies, and spiders in particular.

Just a few weeks ago, I got the fright of my life when I put my boots on to go to work, and a godzilla of a thing bit into my foot! I kept it in a jar for two weeks before it finally died. Some day, I may donate it to a biological monstrosities museum.

Anyway – I got my sweeping brush and opened the back door, then went to sweep the bloody thing out.

It ran faster than I could sweep it!

I raced to keep it going in the direction I wanted it to (out), and finally sent it on it’s way with a mighty swing.

The damned thing was so big I actually heard it when it landed!

$DEITY, I hate those things…

Happy birthday to me

In about two hours, I’ll be 28 years old.

That’s “2” “8”. Ten years ago, I thought 28 was ancient. Today, I think it’s the right age for who I am. I feel that I’m just getting the hang of this “life” thing, and am kind of looking forward to the rest of it.

When you think of it, see, 28 is just one third of what I expect of my life. Think about that! Imagine growing up as a kid, then through puberty, the early twenties drunken parties, and the late twenties “maturity”. Now imagine doing it all over again. then again. That’s how long life is!

Nice cake, isn’t it! Bronwyn made it – it’s a strawberry&vanilla jam sandwich with 7 candles. I made sure there was no wax left on the bread before I ate it.

When I was coming up to 15 or 16, I made a promise to myself to own a house and a car, etc, by the time I was twenty. Of course, none of that materialised. I hope to have those things by the time I’m forty, but I’m not so sure of it as I was when I was a teenager!

Twenty eight… that’s 33+3/3. or 7+6+5+4+(3*2)+1.

When my kid Jareth is 18, I’ll be 45. Just looking at that, I got a shiver, but then I realised that that’s around the age of most of the guys in work, and they seem to be in the prime of their lives!

Of course, as my GF just reminded me – that’s because they already have their cars and houses. I’m cracking a wry smile at that. I’m looking forward to owning a house.

I may not be where I planned to be by this age, but I have a lot of time left to achieve what I want.

Automatically dumping your camera contents to the desktop

Bronwyn has recently become interested in computers – in particular, using them to communicate her interests to others with her hobbies.

In order to help her, I am trying to make things as simple as possible on this computer. That’s a damned pain, sometimes.

I am currently running Mandrake 10 on this machine, with a custom kernel. Mandrake comes with a patch to the kernel which makes automatic mounting for cameras a cinch, but the kernel I built does not.

So, I needed to build an automatic script for getting photos from the camera to the computer.

The following script is a modified version of Kevin Lyda’s mounting script. It loads your camera and dumps the contents to a directory on your KDE desktop. The directory is named with the date and time, so is unique, assuming you don’t mount and remount within seconds.

To use, create a /mnt/sda1 directory and place the following code in your /etc/hotplug/usb/usb-storage file:

#!/bin/sh

logger -t usb-storage "Starting"

case x"$ACTION" in

    xadd)
        # from usb/usbcam
        # new code, using GNU style parameters
        if [ -f /var/run/console.lock ]; then
            CONSOLEOWNER=`cat /var/run/console.lock`
        elif [ -f /var/lock/console.lock ]; then
            CONSOLEOWNER=`cat /var/lock/console.lock`
        else
            logger -t usb-storage No console owner found
            exit
        fi

        logger -t usb-storage "Mounting camera"
        mount -t vfat /dev/sda1 /mnt/sda1
        logger -t usb-storage "Camera mounted, copying files"

        # generate a unique-ish directory
        suffix=$(date +%Y.%m.%d-%H.%M)
        prefix="camera_"
        NEWDIR=$prefix$suffix

        mkdir /home/$CONSOLEOWNER/Desktop/$NEWDIR -p
        find /mnt/sda1/dcim -type f -print0 | xargs -0i mv '{}' /home/$CONSOLEOWNER/Desktop/$NEWDIR
        chown $CONSOLEOWNER.$CONSOLEOWNER /home/$CONSOLEOWNER/Desktop/$NEWDIR -R
        umount /mnt/sda1

        echo -e '07' > /dev/console; sleep 1
        echo -e '07' > /dev/console; sleep 1
        echo -e '07' > /dev/console

        test -d /var/run/usb || mkdir /var/run/usb
        ( echo '#!/bin/sh' ; echo rmmod usb-storage ) > $REMOVER
        chmod 755 $REMOVER
        ;;

esac

logger -t usb-storage "Finishing"

Babarino weblog

I setup a blog for my co-worker Vincent MacDonald yesterday.

I’m interested to see how he gets on with it. We’ve already spotted a few points where WP is not up-to-scratch (images, mostly), and I hope this will lead to some helpful contributions back to the project.

One particular thing I’m interested in, is how well Vinny does with customising his own part of the BlogoSphere. He is not a technical man at all, so it will be interesting to see. I’m sure he’s picked up a smattering of HTML and CSS through osmosis from myelf and the rest of the team, though – we’ll see.

As I commented to Donncha, back when I moved from B2++ to WordPress, the fact that WP allows you code-level access in your templates frankly scares me! It’s a hack waiting to happen! I’m sure Vincent will not have the technical know-how to abuse this, but some-one might!

I may try it myself.

Firefox is growing trendy for the common viewer

I’ve been following TheCounter.com’s stats for a few weeks, and a very interesting trend is emerging.

I think that TheCounter is probably a more accurate view of browser status than most of the more technically-minded stats sites.

For example, w3schools claims there is a 20% market share for Mozilla. This is certainly not in the non-technical community. Government offices, for example, are traditionally slow to change technologies, and home-users tend to use what has come with their computer and nothing else.

Anyway – I believe TheCounter.com offers a more valid status.

Here is a slice of the last 9 or so days. I’ve only taken the stats for Mozilla-based browsers and IE-based browsers. I ignore all others, and IE3- and NN4-.

08/09/04 09/09/04 10/09/04 13/09/04 14/09/04 15/09/04 16/09/04 17/09/04
IE6 28093914 30411721 32254338 37292744 39432983 41648423 43808651 45987875
IE5 5087061 5449934 5725591 6434434 6757312 7094661 7428836 7759053
IE4 94268 101497 not taken 124086 130751 137542 144749 151380
Mozilla 682356 737769 782658 921321 974166 1027951 1080864 1135247
NN7 317419 341740 361169 474727 439413 461675 483835 505864
NN6 not taken not taken 26236 31042 32951 34856 36612 38610
NN5 280483 326900 364350 416702 520788 565912 611693 658746
MICROSOFT 96.30 96.24 96.12 95.97 95.93 95.90 95.87 95.84
GECKO 3.70 3.76 3.88 4.03 4.07 4.10 4.13 4.16

What I think is very interesting in this is that there is an uptake of at least .03% for Firefox every day. The first three recorded days are a bit spotty, but it is very obvious that there is a threat for Microsoft!

I’m just waiting for Firefox to hit 20% using this table before I try really plugging it to my company. As a web development company, we generally focus on the browsers with the highest market share, and that’s a real shame, as that’s IE6 at the moment, which has really spotty support for most standards, and introduces things which don’t work in other browsers.