Git In The Trenches gaining traction…

Thanks to my very good friend, and contributor to GeekDeck, Og Maciel, GITT is starting to gain a little traction. Og wrote a post about the GITT project a few days ago, and since then, there has been a flurry of activity. I have to say a huge thank you to ali1234 and themiwi for forking GITT on github and fixing some spelling mistakes and typos. I’d also like to thank all the people who have started to watch the project on github too. If you want to check it out, just go here

I’m really excited for the future of the project and almost everyone who has read the premise of the book has commented that it sounds like a very good way to present the material. I know that a few people who have read a little further into the book itself have liked the style.

We still have a long way to go and have to explain some pretty complicated topics, but I’m confident that with Git users behind me, we’ll win through.

Thanks to all who have contributed so far

Arduino Playtime

So the other night, myself and Mike started playing with Arduino for the first time. What a cool little toy that is! The great thing is it can be so much more than a toy. Here’s a video of my little board after 3 hours of learning from scratch and then tinkering.

Git Book up on GitHub

So – I’ve started putting the new book up on GitHub in case anyone feels the need to comment/fork and or generally help out. I’d like to thank both benc and mjj29 for their help in getting my started in LaTeX.

Creativity at a low = New Git Book Project

So, I’ve been trying to write more to Alchemy Reigns, but to be honest, it’s just not presenting itself the way I want it to. Maybe the story hasn’t solidified well enough. Anyway, I did decide the other day, that I enjoy using the revision control system GIT, so much, that I would really like to give something back to the community. To that end I am to compile and write a book on the subject.

The aim of the book isn’t to be a definitive guide. It isn’t supposed to be the most elite technical reference either. What I am going to try to do is show how to use git in a practical sense, using real world examples. The aim is to follow a group of developers through their daily lives using a version control system. This way, I intend to come across the same issues and problems that normal everyday people do.

What I would like is for people who read it to identify with the scenarios presented, therefore, when the same situation occurs whilst they are using git, they are not reduced to reading man pages necessarily, or jumping in an IRC channel. Rather, they should be able to go, “ahhh, I remember this exact situation was presented by that fictional group of developers”

To this end, I am asking for anyone that uses git on a regular basis, or even not so regular, to give me some ideas/scenarios that they themselves have faced. Did you have to do something funky in git? Was there more than one way to do what you did? These are the types of questions I want to answer.

So please help me out, anything you can contribute will be acknowledged and appreciated.



Have we already reached Desktop nirvana?

Recently I’ve been taking a look at Windows 7 and though I don’t want this to turn into flame war, I have to say I’ve been less than impressed with the latest offering from Microsoft. They have fixed one bug that annoyed me to distraction, but other than that, I really can’t see what all the fuss is about. However I don’t want to get bogged down by this. What I really want to talk about is the way that the desktop has changed over the last two decades.

The interest sparked off from the fact that I spent a considerable amount of time tuning Windows 7 to look and feel like my current Windows XP setup. I then realised that I had done the same on Windows XP to make it look like 98. But why? Is it because I am an old fuddy duddy now? Is it because I am unable to embrace change? Is it because I can not take the time to learn something new? I hope not!

I’m forced to think about the other side of the fence, the Linux world. I have used a large variety of Linux distros, Ubuntu, Fedora, RedHat, CentOS, Knoppix, BackTrack, Foresight and Puppy, to name the ones I have used regularly. I have had no problem adjusting to these, and to newer versions of these. So what’s the problem with Windows 7? Why do I constantly feel the need to live in days gone by? I guess the ultimate question is in the title of the post. Did we already hit a desktop Nirvana?

This is all very interesting. Going all the way back to Windows 3.1, and the change we encountered moving to Windows 95. The difference was vast. It changed the entire way we used the desktop. Now let’s move from Windows 95 to 98, no real major differences in the design of the desktop or layout, again from 98 to XP, save for a few updates to the startbar and grouping. Now we go from XP to 7, and I have to say for me it’s kind of more of the same. There is nothing really new, the groupings work a little differently, but I missed having the text labels for programs. I usually work with more than 40 windows open at a time, call me messy, but it’s just how I work. The nature of my work means I flit from task to task all day every day.

So have we seen the last of the desktop development? Of course not! I’m not for one minute saying that there will never be any more advances in desktop development. What I am saying is that all of the “nice” new features, the ring switching, the window previews and all just “nice to have” eat resources. We should be making improvements to the desktop that both offer us better workflow, more enhanced capabilities, but without the need for a machine that is three to four times as powerful as it’s predecessor. I still recall that the compiz engine when it first came out, at the time when I bought a GeForce 7300 GT OC, still ran acceptably on an old MX440. I was stunned.

You have to wonder about the real motivations for change here. Call my cynical, but the Linux desktop seems to move and evolve with the demand from the users. We ask for things to change, and when that volume hits a critical mass, change happens. OK, it’s not always this way, and sometime design leads take the bold decision to try something new, but for the majority it seem to me that this is how the development happens. Now let’s take a look at the Microsoft way of thinking and it’s a little different, but then so is their business model. They thrive on people buying new versions of the software, so it’s in their best interest to get people “hooked” on these new features.

Microsoft sell training, they sell certifications, and so a portion of their revenue is directly dependent on how good a job they do at changing things sufficiently enough to require more training. Look at the shift from Office 2003 to Office 2007. As I said, call me cynical, but this change in thinking also benefits the PC manufacturers also. It enables them to push bigger better and faster machines, which ultimately will all run at the same speed, once they become loaded with the next generation of system hogging operating systems.

I digress. Apologies. Going back to our idea of a desktop nirvana. The ultimate root notion of a desktop hasn’t changed in many many years. True, the mobile market is starting to make us rethink things, but it is still rooted in the idea of windows, files, folders, icons and desktops. It amazes me that in all this time we have not really come up with a single new methodology for using a computer that has been accepted and implemented. Cue some references to project X, Y and Z. I understand people have probably tried, but I’m forced to consider the fact that for the foreseeable future, the desktop is as good as it gets. Yes, we’ll get things like wobbly windows, snappy left and right thingies and the like, but the fundamental desktop model doesn’t look like it’s going anywhere just yet.

But maybe this is all stemming from the fact that the whole files and folders, the root method by which we store information needs an overhaul.  It’s based heavily on the model of an office in days gone by, where you would have reams of paper files, in folders and that made sense, whilst we were still in a transitional period.  Now though, it’s causing issues.  People can’t get to their information quickly enough.  I personally want a tag based file system.  I want to be able to write in something like, “iso, 6 months ago, ubuntu” and for it to instantly bring back an iso image of ubuntu that I had 6 months ago.  What I don’t want however is a tracker system that has to use up system resources to keep an index of the files.  I want this built in.  I want the world I know.

Let me know what you guys think?

If a virtual tree falls in a virtual forest, does it bit shift?

Hi guys. It’s been a long time since I wrote in here. I’m busy with numerous other projects, but I was thinking about something the other day that I just couldn’t pass up the opportunity to discuss. Now it should be noted before I begin that I’m not an expert in any of the topics I am discussing, but I’m offering the subjects up to see what you guys think. So don your philosophical hats, and let’s take a weird trip into the essence of existence.

Starting simply
Let’s start with a simple concept. I have some data. This data is the word ‘happy’. Now, if I have that data stored somewhere and I can retrieve it, it could be said that I possess that data. Hopefully you’re all happy with this (pun intended). If someone else takes a copy of the same data. They could be said to possess the same data as me. If they have done this without my consent, we could naturally assume that they have stolen this data, since they possess the same data as me.

As previously mentioned, I’m not an expert in any of these fields, but this seems to be born out by the current state of law and affairs. If someone copies a piece of software, or a video file, without the consent of the owner of the data, and let us note here that the owner is not necessarily the possessor of the data, then they are liable to be prosecuted for stealing the data.

Speaking in riddles
Now that we have that nailed down, let’s mix things up a little. Consider that we have our word, ‘happy’, and that we encrypt it with a very simple encryption algorithm. This algorithm is implemented in the following manner. First, turn each individual letter into a numeric counterpart, a-z > 1-26. This leads to a = 1, b = 2 etc.

Now we come up with an encryption “key”. This key will be the same length as the data we are trying to encrypt. In this case let’s use the word ‘weird’. We use the same numeric conversion on our “key” and add the two words together, numerically, one letter at a time and then turn the resulting numbers back into letters via the same numeric mapping.

h a p p y == 8 1 16 16 25

w e i r d == 23 5 9 18 4


? f y ? ? == 31 6 25 34 29

The problem here is that some of our numbers are over 26 and so can’t be represented. To rectify this we’ll make it so that if we go over 26, we’ll just subtract 26 from the result. The final encrypted version then becomes.

e f y h c == 5 6 25 8 3

Though that was laborious for some of you, it was necessary to proceed to the next step in my musings. So we now have ‘efyhc’. Anyone looking at that “word” isn’t going to have a clue what it means. That’s the purpose of encryption right? To “hide” the data.

Possession is 9/10ths of the law
What’s interesting now though is that if I only hold the encrypted version of the data. Does the data still exist? Harking back to the whole, if a tree falls in the forest and no one is around does it make sound? argument, it’s actually surprisingly similar. Without the encryption key, the string of data ‘efyhc’ is essentially just random data.

What is it that separates it from actual random data? The goal of an encryption algorithm is to make the cipher text undecipherable. In essence to make it as random as possible, so that no patterns exist. To all intents and purposes we could call this a random string. After all it could turn up in a random string quite easily.

That sad little man inside me, wanted to satisfy this, and wrote a little python script. After processing the script several times, my trusty precious data took between 1 second and 1 minute to turn up. Now remember that in a truly random number generator my word could have turned up first. It could also have never turned up at all, no matter how long I ran it. That my friends is the beauty of random.

Going back to our idea of the existence of the data. Imagine now that we destroy our encryption key. In our example, the real data is pretty easy to remember, but let’s now assume it isn’t. Assume it is a large document. If we destroy our encryption key, does the data still exist?

Build me a wardrobe squire
So do you have an answer? It’s a little different to it’s physical analogy. Often people refer to encryption as locking something away, ensuring people don’t get access to it. Though the end goal is the same, securing the data from people who we don’t want to have access, the mechanisms are quite different. In the physical world, if we put a padlock on something, the physical item always still exists. We may be denied access to it, but it still “physically” exists. What this means is, given the effort we can gain access to it, via cutting off the lock, blowing a hole in a safe or some other means. We may not know what the physical object even is, but we know it exists.

In the digital world, the “object” for want of a better word, our data, is transformed into something different. Something which bears no resemblance to the original at all, at least if we use a good enough encryption algorithm. We spoke earlier of the effort to make our data look like a good old random number sequence, in the physical world, it’s interesting to consider how one would actually implement encryption of physical objects. Perhaps the best example I can think of is flat-packed furniture. Here, the parts in the pack would be the cipher text and the instructions would be the key. We shouldn’t be able to make the furniture (gain access to the data), without the instructions.

The difference between the two, encryption and flatpack furniture then really just becomes the difference between physical and virtual worlds, which we are all already aware of.

Give me back my stuff!!
So let’s turn our attention back to possession again for a while. Let’s consider the duality of the physical and virtual worlds together. If I possess just the flat pack furniture, do I possess a wardrobe, if I don’t have the instructions? Similarly if I just possess the cipher text, do I really possess the data, if I don’t have the encryption key?


Well, here is where some differences lie. And we are very shortly going to leave our faithful mahogany companion behind and concentrate on more “virtual” things. If we possess the cipher text, and do not have, or have destroyed the encryption key, the data can not exist. As we said stated earlier, the cipher text is just random characters.

But wait!

The cipher text surely holds the best chance possible of being able to get the data back again? We just need to know what the secret key is? Well, let’s think about that for a second. How secret is that key. If we model the cipher text as a random string of characters, and the encryption key as a random string of characters. Then something interesting happens. The key to possessing the data, isn’t the fact of knowing the key. It’s knowing which key and which cipher text go together.

But that’s not fair!!
Remember our super secret word earlier? Shhhh don’t tell anyone….’happy’. When we paired it with our secret choice of encryption key ‘weird’, we came up with our cipher text, ‘efyhc’. We rested. Our secret was safe. No one would be able to get our data back, without first knowing our encryption key, our secret choice of encryption key. Correct?

Well, as it turns out not exactly. Consider the following.

w o z d t == 22 14 25 3 19

o n j n u == 14 13 9 13 20

h a p p y == 8 1 16 16 25

Hold the phone!!! That’s our very secret data right there in the open. But how? As it turned out I wrote a small program to take two random strings of data, and use one as the cipher text, and one as the key. I then did the reverse as in our first example, ie. I decrypted the data. Et Voila!! Without knowing anything either the key or cipher text, I have managed to come up with the real data.

Turning this back to the real problem at hand, I also wrote a script to take the known cipher text and generate a random string of characters that I used as a “key”. I quickly also found my secret key, and then subsequently my original data. This should be of no surprise to us. As I mentioned before, neither the cipher text, nor the key are secret. We already know them to be random strings of data.

So the problem isn’t so much as being able to generate the data, the astute reader will have realised by now that we could just use a random string to obtain the original data, without any kind of encryption process. No, the real problem is being able to validate the data. The real problem is that without the original, we can’t be sure that our version is an accurate copy of the original. So in short, to possess the data, we need to possess the data.

Existence and possession Part 2
Now, the revelation there may actually appear not to be so much of a revelation. To be able to possess the data we must possess the data. Seems pretty obvious. Let’s just think for a second though. What we really mean is this, that the encrypted form of the data on it’s own, doesn’t contain the data. It is part of a random string, which when “energised” with the “key”, produces the original data. One must possess both pieces of the puzzle to possess the original data.

With this in mind it’s interesting to think about theft a little more. If I steal an encrypted version of Apple’s flagship product, but I don’t possess the decryption key, then really, I possess nothing more than a random string of data. Otherwise, the fact that I possessed a random number generator would be enough to make me liable to prosecution.

I’ll leave you with a final thought though, if you possess a true random number generator, and was capable of running for infinity, and you printed everything it produced. You’d be in possession of everything that ever has, is and will be produced. Mind blowing 🙂

My old bike (of 4 months)

I was riding to work yesterday when……..boom. I almost died. Seriously, if I had been riding on the road, I don’t think I would be here today. I thank God that I was on a cycle path at the time. So, just to share with you all. My “old” bike, of 4 months, had a little accident.

It’s not even like I thrashed this bike at all. I kept good care of it. It was my work bike after all. But a little trip to the bike shop and I got it replaced with a new model. Tomorrow I’ll test it out.