Wednesday, December 19, 2007

Faust, Midas, And Myself - Switchfoot

This one's about a dream I had last night.
How an old man tracked me home and stepped inside.
He put his foot inside the door and gave a crooked smile.
Something in his eyes, something in his laugh,
Something in his voice, that made my skin crawl off.

He said, "I've seen you here before, I know your name.
You could have your pick of pretty things.
You could have it all. Everything at once.
Everything you've seen, everything you'll need,
Everything you've ever had in fantasies."

"You've one life, you've one life.
You've one life left to lead."

I woke up from my dream as a golden man,
With a girl I've never seen with golden skin.
I jumped up to my feet she asked me what was wrong.
I began to scream I don't think this is me.
Is this just a dream or really happening?

What direction? I'm splitting up! This is my personal disaffection.

What direction? What direction? What direction now?

I looked outside the glass at golden shores.
Golden ships and masts with golden cords.
As my reflection passed I hated what I saw.
My golden eyes were dead and a thought passed through my head,
A heart that is made of gold can't really beat at all.

I wanted to wake up again without a touch of gold.
What direction? Death or action! Life begins at the intersection.

I woke up as before but the gold was gone.
My wife was at the door with her night robe on,
My heart beat once or twice and life flooded my veins.
Everything had changed my lungs had found their voice
And what was once routine was now the perfect joy

You've one life,
One life left to lead.

Wednesday, October 3, 2007

One virus to rule them all

How does one create the ultimate virus? well what is the ultimate virus? Some would say that it is the virus that crashes the internet. Or perhaps a virus that cripples the information infrastructure so badly that were taken back to the stone age.

There have been many noble attempts to fulfill the above goals but the internet is still around nonetheless. The ironic thing about the previously stated goals is that when the virus that destroys the net as we know it has done its work, the gentleman that wrote the virus will have nothing left to be proud of. It'll all be over. He will most likely be employed as a programmer, or at least in the IT field, so he will now be out of a job. The economy will grind to a halt in so many places. Chains of supply to consumers will be disrupted. No food, no petrol, no electricity. Well,.. sitting in a dark cold house with no food has never been a dream of mine.

So what are my attributes of the ultimate virus?
  1. Is hard to remove from a computer.
  2. Designed to survive in a networked environment.
  3. Has more reputation than any other virus.

Point 1:
So I think the ultimate virus should thwart all attempts at removing it, yet still make its presence know to the user. It should be a virus that is designed to last as long as possible - Survival for existence. Now some viruses excel at making their users aware of their presence, but do so irritatingly (pop ups, bandwidth usage) thus cause the user to format or remove the virus, thus contravening this first rule.

A virus that in no way, directly or indirectly, interferes with the user will not present any immediate need to remove the virus.

I'm still not set on how I would tell the user that they were infected, but I probably wouldn't go much further than emulating a dead pixel in the bottom right corner of their workspace. That's it. Just something small to say that the virus is present.

Point 2:
The ultimate virus should be network smart. As networks can vary in so many protocols, mediums, transfer speeds and security, it would need to carry some measure of heuristic power. It needs to be smart enough to travel from one network to the next; From file to file, virus to worm,.. It needs to be smart.

It needs to have a small, actually super small footprint. If the virus started to hog storage space or bandwidth it would start to present a need to be removed. Now the more intelligent we want our virus to be invariably the larger our footprint is going to be. No matter how smartly you design the virus,.. if you want to tap into any network and into any file, you are going to need a bit of code to make it work. Now instead of keeping all this viral goodness in one virus entity, why not split it up? Lets make this virus 'modular'. It will be conceived as one complete part, but will be able to break down into smaller segments; Each segment capable of basic viral activities and propagation.

A modular/segmented virus!.. Okay, so its got smaller parts - What else? Each segment should be able to be rebuilt from the cooperative work of other segments on the network. Something reminiscent of RAID 5 and 6 parity reconstruction. This will not only reinforce my second attribute to survive in a networked environment, but the virus is now designed to use the network to its advantage. Each segment should to some degree track from which 'parent' virus it came from, and/or where other virus segments are in its close neighbourhood. This way when it needs to perform some more complex or group viral activity it can gather the parts it needs, perform the task, then breakdown appropriately. Say a virus needs to do some brute force activity or large calculation, it should be able to distribute work to its segment friends on remote devices to help perform the task.

Point 3:
So the ultimate virus needs to be famous. What would stand out the ultimate virus from all the rest. Point 1 has ruled out all forms of destructive, indecent, or otherwise irritating behaviour. So whats left? We can't be bad... Well why not be good? Good! Sure,.. Why not make a virus that performs low level HDD defrag optimization during spare CPU time? How many virus's can lay claim to that fame?

Now here's the best for last. Here is the way to make our virus greater than every other virus. Give our virus the ability to intelligently search and destroy all other virus'. That's it; If you can't beat them, delete them. Who wouldn't want a piece of software that automagically removes all hazardous software from their computer/device?

Now although the virus coders carnal desire to destroy peoples computers isn't going to come true: He would have created, in my humble opinion, the penultimate virus.

Sunday, August 5, 2007

Saturday, April 14, 2007

My JavaScript Development

Well, I've been playing with the Mootools library a bit now. I have to admit that before mootools, javascript was a little scary to me. I have successfully created about three business applications using RPC techniques - but what a hack. Although XML is such a universal wonder, its a bit of a chore to work with sometimes.

With mootools, it all gets better. I believe the Mad 4 Milk guys have really made a well designed package. Now with the event of JSON, Javascript RPC's become a brease.

I've traditionally used ASP-VBScript as my server side language; Now maybe I haven't googled hard enough, but it's impossible to get hold of a VBScript JSON interpreter (and Im too lazy to do the work myself). So my new development platform now consists of JSP, Javascript and faithfull MooTools.

I thought I'd start a page of Javascript 'experiments' mostly using the mootools library. Every now and then I get that 'I wonder how to do that' thought,.. so I thought I'd share any examples I happen to make. Hope it helps someone someday,...

http://www.cullen.co.za/pat/javascript/index.html

Friday, March 30, 2007

MooTools

Today I found my new favourite JavaScript Library... MooTools

Tuesday, March 27, 2007

We are the machine

Here is an interesting presentation on the impact of Web 2.0

http://youtube.com/watch?v=6gmP4nk0EOE

My Two Troubles

The stars have not dealt me the worst they could do:
My pleasures are plenty, my troubles are two.
But oh, my two troubles they reave me of rest,
The brains in my head and the heart in my breast.

- A.E. Housman


For more great posts see Desperately Wandering

Friday, March 23, 2007

My Keeper Build v1.0 - The Glass Cannon

So Im a big fan of DotA. If you're a gamer then check out http://www.dota-allstars.com and http://www.getdota.com. DotA is simply a mod / custom-map for the Warcraft 3 game made by blizzard.

Now if you're still reading I'm assuming you've played DotA before and am going go ahead with the usual DotA jargon. I've been playing long enough now to have tried most characters in the game; Now I'm a guy who likes to get one character and stick with it, build it up, and make it unstoppable. So I'm currently running with Ezalor - Keeper of the Light. You're probably saying "Keeper!, but he's so weak. He'll never be unstoppable". True to a certain degree. There are some characters in DotA which are just perfect counters for KotL, but that is the case for most heros anyway. I think I particuarly like trying to build KotL as a large portion of players tend to see him as such a weak character. I like to surprise! :)

I only really play in pubbies so my build will naturally be a little more greedy as apposed to a team build. My angle on this character is this. Produce as much damage and brute force push as possible, but be perfectly capable of ducking out of the gank when it comes for you - because it always does. [People love to kill low HP pool hero's - Sorry for Ezalor]

So here's the gentleman in his Sunday best:

Ezalor - Keeper of the Light


My skill build:
Levels 1 - 8: Illuminate and Chakra alternatively
From there on I max out Ignus Faatus as quick I can, and choosing stats inbetween. I normally leave Mana Leak until the end as it is not included in my strategy.

My item build:
[Game start....]
Chicken
Circlet of Nobility
Ironwood branch

[First chicken run....]
Ring of regeneration
Mantle of Intelligence
Nulls Talisnam
Headress of Rejuvination

[Get these as and when you can afford them...]
Boots of Speed
Point Booster
Energy Booster
Vitality Booster
Mystic Staff
Dagger of escape

[The game still goes...]
Build an Eye of Skadi

Explanation/Strategy:

Early game:
Always call Mid. The effect of Fog-of-War is a great advantage for Keeper. Farm and harass. Try and position illuminates well so that you hit as much creep as possible and a hero aswell. Try align the illuminate to hit both hero's if possible. Lately I've been experimenting in Pubs with my Illuminate positioning,.. There are some great spots to shoot from; behind bushes, around corners, etc. Try every spot on the map. Every chance to hide in FoW is another chance to harass your enemy with a ball of light.

Chakra is a no brainer,.. buff yourself as often as possible. If the spell is ready cast it on yourself, don't think, just cast. If you're full MP, cast it on you're ally. If he's full MP, bladdy cast something else,.. anything. If you've got mana you may aswell spend it. This is the beauty of Keepers endless mana pool.

Try get a hero to lane mid with you that will compliment you. A few examples are Furion, Earthshaker, infact most long duration stunners/harasses will be a great combo. Try to buff them as often as possible. It has happened more than once that I and a partner have got first blood by a combination of hitting, stun/illuminating and chasing, before the creeps have even arrived.

You should farm reasonably well with Keeper. After a few levels you should be able to run the second handfull of items with your chicken. BUT - dont move away from the experience earning area. It is critical to try xp as much as possible, as it gets harder and harder to maintain a competitive level in the mid-late game.

I normally keep to my own lane. If you're playing with a decent set of allies, then they shouldn't need to call help to other lanes. Keeper should always be able to get the first tower down, and you should aim to get the second middle tower down aswell. Be carefull once over the river,.. you are an easy target. Try to keep ally company, especially one who can help you both escape a risky gank. If you're firing at the second tower you should have a lvl 3-4 illuminate which gives a good firing range. Try to sit as far back as possible but close enough to hit all the creeps around the tower. If you're insecure you can temporarily fall back while your spells regen. If played right, you should be safe.

Mid game:
Okay, I'm assuming you manage to get two towers over, and your towers are untouched. (This shouldn't be too hard). Now I wouldn't run into the enemy base without some ally support which at this stage of the game, in a pub, you probably wont get. Although not mentioned in the item build, invest in some scroll of teleports. While your creeps are sufficiently far forward enough you can move around the map. Remeber dont wander too long - you will be losing any kind of xp gain. While moving towards another lane, fire off an illuminate at a set of low level neautrals. Finish off the ones that may live. This is easy cash and xp while moving around.

While keeping a sharp eye on the middle lane (your lane) go assist your allies to push over a side tower. With two or three illuminates passing over as many creep waves, you should make quick progress. Now dont stay too long, the counter attack in the middle should be nearing your tower. Head back there either by walking, if not too far, or by teleport (yay for those scrolls).

Keep this kind of cycle going for a while,.. defend your lane, but help push others aswell. A game can take so many directions from here on. My strategy is to try keep the advantage all the time by pushing. If a vote comes to push a certain lane into the base, I would almost always vote in. Until some kind of group effort happens though, just farm and farm and don't push further than you can safely esacpe a gank. Don't feed.

After not too long you should be able to afford your Soul Booster items, and then a while later you Mystic staff. Hoorah - You have an Aghanims Scepter. Here starts the later part of my strategy.

Late Game:
It may not be late game yet, but I'm just gonna put my two main points here, as these are the activities I tend to carry out till the end of the game anyway. It is generally accepted that Keeper is not a late game hero. I tend to agree. Try to make as large an effect as possible before the enemy hero's become too strong for you.

You should have level 2 Ult, hopefully level 3. With two wisps you can create an army in excess of twelve creeps. I always send the wisps to the lane with no enemy heros and let them do there work alone. Tell the wisps to follow a ranged creep to just create priests and be more low lying in battle; or tell them to follow a melee creep if you want them to be more aggressive in battle. Every 30 seconds scroll back to their lane and pick up any straggling priests. I normally just tell them to attack ground in the enemy base and this will keep them occupied until they expire.

If an emeny hero comes to attack your priests and wisps then you can do one of two things. a) get out of there. b) stay to fight. If you choose to stay, then leave Keeper somewhere safe and micro the priests effectively. Try and surround the enemy hero with creeps to prevent escape and then tell all the priests and both wisps to attack the hero. If you dont kill him you might get close. It's always great fun to get a priest kill. If you choose to run away then do so promptly. Send the priests to a remote location in the bushes, where they will expire naturally. If the wisps still have a large MP then transport them to another lane, else send them with the priests. One last use for a bunch of ragged out priests is to try neutral - if you manage to kill something then good for you, but if they die you've lost nothing and the enemy has gained just as much. The main thing here is to not leave your priests an managed as farming material for the enemy.

My second main late game activity is pushing with allies into the base. This can be done concurrently with your wisps but try not to let them get in the way (for you allies push), but rather try prevent an enemy retreat. When pushing an enemy base your task is simple. Time your illuminates for each new enemy creep wave. Wipe out every creep wave almost instantly, giving your team a creep advantage. As that is done I usually charge up another Illuminate closer to the base - This acts as a reasonable scare tactic. Buff your allies as often as possible.

If your team push has garnered the attention of the entire opposing team then very stealthily get your wisps to push another lane. This will either split enemy attention, giving your push an advantage, or your priests will do a darn good job of pushing their lane.

Other random tips and explanations:

You are the glass cannon. If you dont have any supportive team stunners then you must fend for yourself - Blinkstick is a lifesaver. Recently an animation was added to the blinkstick which makes it easier for someone to follow you, but it is still my favourite means of escape. If you are coining it and the game is going on, you will be able to afford BoT as well and can use this in conjunction with the blinkstick.

An early game tip: The middle lane low level enemy neatrals are a free kill to Keeper. Every new day, just send an illuminate through the bushes in front of you and you will receive ~90 gold.

If an enemy hero has just made it out of battle alive and is going to make a sneaky escape then you have a perfect chase vehicle - Old Ignis Fatuus. Either create a two new wisps or get the existing ones with mana and transport them half a screen infront of the escaping hero. Bash him with all your wisp might and hopefully you'll get the kill.

If the game has gone on then I would suggest buying an Eye of Skadi. It gives you a great stat boost and makes you quite a lot scarier with that slow effect.

A big mistake I've found myself to make is allowing the enemy team to make large counter attacks. Keeper can fairly easily obliterate a pushing creep wave, but don't let it go by unnoticed. If you leave a counter push they will easily walk over your towers.

Well thats all I've got to say about that for now. I know I've probably left a lot of standard guide points and technique out, but hey, how many people are actually gonna read this hey? I've actually learned a bit about Keeper myself by writing this. In the future I might post some replays if I'm feeling energetic.

Here ends my cruddy guide.

Thursday, March 8, 2007

Yahoo are funnier than I thought

So I've never really used flickr before today. And for the record I dont really use many Yahoo products at all that I'm aware of. Now Not because I don't like them or anything,.. I just happen to use other brands of search etc.

So today I decided to post my first photos on flicker and to my entertainment, on the login screen is the following phrase: "Not only does Flickr make you smell better, it also makes you more attractive."

... oh and if you're interested in seeing me play the fool.. My Photo Set

Tuesday, March 6, 2007

The World Through Statistics Eyes

This site can be quite an eye opener to the state of the world around us.
http://www.sasi.group.shef.ac.uk/worldmapper/index.html

Thursday, February 22, 2007

Virtual Bot vs Lego Bot

I've always wanted to create a sentient Lego robot. For a long time now I have had plans to try create a large computer bank running some kind of AI/learning program that wirelessly transmits with a Lego robot. The new NXT system from Lego and the open standards they've implemented definitely makes this a possible reality.

Things this robot should one day implement, among other things are, a visual processing system, feedback from sensors on the body, and should be able to fire various motor skills. The body sensors should mostly include sensors to indicate touch and feel (sensing bodily harm).

Now as of last week I just became a dedicated WoW player. Besides the mixed responses you may give about the game or greater culture of it, listen to the idea. What about bridging the control of a WoW character to an AI program as I wanted to link to my Lego robot?.. Now I have heard of 'botting' programs that are already (although illegally) available to gamers that allow them to put their character on 'auto-pilot'. Thus they can level their character without going through the painstaking chore of culling 1000's of creatures.

So whats the difference? I don't want to create a program for someones levelling convenience, I want to create a sentient program that lives inside the game. The AI program would live and believe it exists inside of another world. It wouldn't just run ten spells by sequence to gain a level - It will think it is fulfilling its purpose. It wont run from a higher levelling creature because its programmed to - It will run for its very life. The robot will live and learn within the rules and boundaries of the game. There is definitely a certain philosophical aspect to be taken into account to understand where I'm going with the idea. Kinda reminiscent of the Matrix. Human players being human and this robot being,.. I dunno a virus or independent program...

Now implementing this thought experiment would most definitely breach Blizzards ToS (See 14.a). I do understand that Blizzard would not want unmanned characters destroying everything in the game world as this would ruin the game play for the human players. So don't worry Blizzard I'm not going to do it. I wouldn't know how anyway,.. my experience goes as far as Lego I'm afraid.

Distributed Processing System

So - if I want to build an AI program that can respond in real-time and act really clever and learn and things like that, then I reckon I'm gonna need a really powerfull PC and some darned well honed programming skills. Well I'd like to think I have both but in reality those can both be put to question....

I pretty much know I'll never get my hands on an uber super PC or server - yeh, money doesnt grow on trees in South Africa either.. So I've started wrapping my mind around building a massively distributed and parallel processing system. In the end these prove to be more powerfull in terms FLOPS they can process per time anyhow. But the challenge to myself is to build one that can receive input, process it, and return output all in real-time.

A list of existing projects similar to this and their purposes can be found here - http://en.wikipedia.org/wiki/List_of_distributed_computing_projects

My Incredible Full Adder

It has been a long time quest of mine to build a mechanical Von Neumann machine. Lego is a particuarly interesting platform to try this on. Recently my sister reminded me of a game I used to play back in the day when the world was a lot bigger,.. The Incredible Machine (TIM). Classic game in it's time (in my opinion), and still fun to create the odd Rube Goldberg machine.

After finding the game and reacquanting myself with the devices and physics, I set out to create something usefull (this is relative..) I set off with designing some logical gates. The AND, OR, and NOT gates were a breeze, but the XOR gate was more of a challenge. Size is critical here.. It's not an option to build an XOR out of OR's and AND's.

Heres a picture of my AND gate.
The link between the gates was a red laser. Red laser on = 1, Red laser off = 0.

Here's the links to all my gates: AND, OR, XOR, and NOT.

Now the only logical thing (excuse the pun) to do when you've built these gates is construct a full adder. Here it is.


The fullsize image can be downloaded here.