Ramblings of a software tester…developer…tester…

Ramblings of a tester who is a programmer who is a tester who is a developer…

How the past influences the present

Hello.

This is only a quick rant about a discussion I overheard the other day…

Guy A says to guy B that my Past is not defining me. And that I’m not regarding my Past in my future endeavours. And that my Past isn’t what shapes me.

Well then what is? You constantly relay on your past experience like a crouch. You use it daily for making decisions. You don’t even realize it probably that you are using past events to determine if you want to do something or not.

Same goes as well for software development. You rely on your past as a means of estimation on a daily basis. If you wouldn’t do that, you would do very very poorly on estimations. You rely on those moments to find out what kind of consequences the solution you are using will have in the future. In fact, if we look at Design Patterns what are they, if not using the Past to determine the Future? Past failures, solutions and experience condensed into reusable ideas and modules.

So lastly I would depart with a little anecdote I like so very very much from Confucius.:

“Study the past, if you would define/divine the future.”

As always, thanks for reading!
Gergely.

Example when to use the Strategy Pattern

Hello folks.

A quick post about an interesting idea.

I want to elaborate on a possibility to use the Strategy Design pattern. There are many clues that you need one. One is for example if your object has a boolean variable which you use a lot in other classes to determine behavior. Then there is perhaps time to implement a Strategy.

Example:

	class SomeClass {
		private boolean stateChange = false;
 
		public SomeClass (stateChange) {
			this.stateChange = stateChange; 
		}
 
		public boolean getStateChange() {
			return stateChange;
		}
	}
 
	class SomeUserClass {
		private SomeClass foo;
 
		public SomeUserClass() {
			foo = new SomeClass();
		}
 
		public String someMethod() {
			if (foo.getStateChange()) {
				return "Some string";
			} else {
				return "Some string else";
			}
		}
	}
 
	class SomeOtherUserClass {
		private SomeClass foo;
 
		public SomeOtherUserClass() {
			foo = new SomeClass();
		}
 
		public String someMethodTwo() {
			if (foo.getStateChange()) {
				return "Some string";
			} else {
				return "Some string else";
			}
		}
	}

So you have two classes which do something based on some boolean coming from a class. So what you can do in this case, simply extract out that change in state.

 
	class Foo implements Base {
		public String getMyString() {
			return "Some string";
		}
	}
 
	class Bar implements Base {
		public String getMyString() {
			return "Some string else";
		}
	}
 
	interface Base {
		String getMyString();
	}
 
	class FooStrategy {
 
		public static Base getMeAClass(enum classChooser) {
			switch classChooser {
				case classChooser.FOO : return new Foo(); break;
				case classChooser.BAR : return new Bar(); break;
				default : null; //yeah yeah I know but I'm writing this in notepad... :)
			}
		}
	}
 
	class SomeUserClass {
		private Base foo;
 
		public SomeUserClass() {
			foo = FooStrategy.getMeAClass(ClassChooser.FOO);
		}
 
		public String someMethod() {
			return foo.getMyString();
		}
	}
 
	class SomeOtherUserClass {
		private Base bar;
 
		public SomeUserClass() {
			bar = FooStrategy.getMeAClass(ClassChooser.BAR);
		}
 
		public String someMethod() {
			return bar.getMyString();
		}
	}

Now I know this looks like a lot of more code. However imagine this on a much larger scale with lots of implementations for Foo and Bar. Your if statements will get very convulated very quickly. This way you abstract away the choice into a Factory. And you can add as many implementations of Base as you like with as many variants as you like without changing the logic anywhere else but the Factory and the Enum. And the Enum could be a Configuration file and you do something like this:

	public static Base getMeAClass(String className) {
		//Where className could be coming from a configuration file
        Class clazz = Class.forName(className);
        return (Base) clazz.newInstance();
	}

This way you don’t even need the Enum anymore. Just use some configuration to determine what class you need at which point in your implementation without using an If statement at all.

Hope this helps.

I whipped this up from memory so please feel free to tell me if I missed something or have a syntax error in there somewhere… :)

As always,
Thanks for reading!
Gergely.

How to write a blog – Why long posts rarely work

Hello.

So let’s clarify this… They rarely or ever work if you are a beginner blogger. If you have a reputation it will probably work or people will use it as a reference. But I’m skipping ahead.

Beginnings

When you are a beginner blog writer you want to get out as much content as possible. Write mostly relevant things and interesting information because you need to establish a name for yourself. To get that starting you want to be as interesting as possible and make people leave with the intent to come back for more.

After you’ve established a name for yourself you can do larger, more coherent updates with more information in between the line because people know you and know what you write is worth reading. Also you have to bear in mind that longer posts are rarely read to the fullest. They are skimmed and then if it is good it will be used as reference material or a post to point to. Also people rarely have a lot of time on their hand to read a long post, several smaller chunks can be digested more easily!

Updating frequency

In the age of modern information overload it is hard to be relevant and interesting and keep people to come back to you. Apart from what you are writing about, which is up to you, you have to schedule your updates to a certain frequency. You don’t want people to wait for to long but you don’t want to get them flooded either. Since people do read a lot of blogs they will choose carefully what to read and what to discard. And you might just end up on the discarded list if you already had a post at that moment.

I’m suggesting that you write you post what you would like to write at that moment and then use a scheduler to post it in certain frequencies. Maybe once or twice weekly is good enough. You need to experiment it out.

Write, write, write

The way to success is pawed with writing. You want to be visible and you want to keep people engaged with you. That means that you have to come up with content.

With a technical blog that’s a little bit difficult from time to time since so many people already might have solved your problem of which you are trying to write about. That’s okay. It doesn’t have to be a technical blog where you write about new ideas every day. It doesn’t have to be a troubleshoot blog about how to solve a particular problem.

It doesn’t have to be about showing some people how to write this and that in a completely new environment.

So about what then?

Guess what? It’s up to you!!! If you wrote a script you like and are fond if, post it. If you created an interesting configuration, post it. If you wrote a line of code you find interesting, post it. You’ve read a blog post about something and have an opinion about it, post it. Is it scientific, some discovery, some idea, some random thought, post it! You wrote a particularly ugly script you never ever want to see, POST IT!!

Your blog doesn’t need to be a portfolio of how awesome you are. You are allowed to be human. You are allowed to post some very boring or trivial stuff you came across but YOU find it interesting! You don’t need to be new every day in every post.

So my suggestion is, write, write, write. As often as you like, schedule it and post it in a timely manner. Be responsive if people write you a comment always answer. Nobody likes an anonymous somebody who writes then disappears. People like bloggers who engage them and give a damn about their opinion as well.

Always be yourself. The blog is for you too so retain what ever you want to retain and read back later maybe to learn from it. And of course writing it down makes you remember it better.

Thanks for reading!
Gergely.

The method of Loci and how it works for me

Hello.

Today I would like to write about something very interesting to you folks.

It’s a common remember / recall technique called the Method of loci. Otherwise known as the Memory Palace. A very popular usage can be seen in the episodes of Sherlock Holmes from BBC. He uses it often.

What is the Method of loci?

As the Wikipedia page write so properly…”In basic terms, it is a method of memory enhancement which uses visualization to organize and recall information.”

This says all…

So…

How does it work?

I don’t want to go too much into details with this one since everybody can use Google I’m assuming but just for my sanities sake I will repeat a very basic idea. You brain works with associations. It can remember something when it’s linked to something you already know much much better. Also it can remember very easily places you’ve been to or people you’ve met. ( most of the time… ).

Very popular Roman Leaders where known to use this while they were giving speeches for hours out of memory. While they were speaking, mentally they were walking along a very well known and often used path where they linked key elements of their speeches to landmarks along the way.

Enough. Show me concretes.

So how do I make use of it you ask? I give you an example. In my flat there are two stairs. I use those stairs to initialize my Palace. I go up the two stairs to get myself into my Memory. Once I’m in my Palace, which is my flat, I have a lot of holder items like drawer, desk, wall, painting, couch and many many more.

So for example to recall all of the 23 design patterns in order I use a mnemonic and my palace.

I have three drawers. I go up up… there is my drawer before me. I open the first and out comes the following sight…

Memento and Mediator are playing a game of Chess ( strategy ). There is a Visitor standing by who is Observing ( Observer ) the game. State is constantly recording the state of the game while Template is providing support and Iterator is counting rounds. Command is constantly yelling orders that they should hurry up because he has better things to do while wielding a huge broad sword ( Interpreter -> for me this pattern was used in MUD games which were early RPGs ). The whole gang is held together by a Chain which is responsible for not letting things go out of hand.

I know this sounds very complicated. And the order? Where is that? That’s the mnemonic: CCIIMMOSSTV. Easy, right?

So why this huge story around a few patterns? Because it’s not just these. Then along comes ABCDFFP which is Adapter, Bridge, Composite, Decorator, Facade, Flyweight and Proxy and the rest BFFPS which is Builder, Factory, Abstract Factory, Prototype and Singleton.

I have stories around those as well. This makes it easy to remember them.

For small amount of things it would be an overkill yes. But for many things it makes it EASY!

You already remembered my Chess play story. ;)

But how do you remember a complex story?

Recall. You don’t just put stuff in there and then move on. I have a routine. Every day when I go to bed before I fall asleep I walk around in my Palace. I look at things, recall them strengthen the memory a bit here and there. And after an Item has been retained in my long term memory strong enough, I can recall it fewer and fewer times. So I don’t have to walk in the whole palace every time. Only parts.

FAQ

Q:But isn’t this too slow to recall something?
A:This is only a tool to retain information more easily. Of course if you want to recall something at a moments notice, you won’t have the time to go into your palace and search around. But after a while it will strengthen and will be more and more easier to recall information faster and faster. And you rarely get into a position where you need to recall something in a second.

Q:This seems like a major overhead to learn something.
A:For small amount of information I suggest using a mnemonic or flash cards rather then a palace.

Q:What if I run out of space?
A:You can create as many locations as you like. Use your current home and homes in your past which you knew very well. You could create a lane with houses after each other. Or create a fictional palace like Hogwarts based on some real places to retain them better. And draw a sketch of of it to be able to visualize it better.

Q:What if I forget where I put things?
A:Recall recall recall is the name of the game. In order to stabilize the vision of your palace you need to practice walking around in it. Remembering each and every small room. With practice it will get better and better and every information will be stored much easier.

Q:How do you put thing into it? Can I just put in a number and I will remember it forever?
A:Short answer: no. Long answer: You don’t just imagine a place and then put a whole bunch of words into a pocket somewhere and expect it to be recalled better. You need to combine the Loci with mnemonics and imagination and sounds and smells stories images. The more powerful the image in a place the better the recall. As you saw with the design patterns I didn’t just put a bunch of names into a box and then remembered it. I created a story around them and a mnemonic. The combination is the key.

Q:Are you physically walking your house or in your mind?
A:In my mind. Once I learned something and created my story and found the appropriate image or smell or sound I’d like to use I close my eyes and go into my palace in my mind. Then I start to place things where I think they will be in a good place. This can be any number of things. It’s up to you.

So that’s all folks. Hope you enjoyed it. Please feel free to try it out and experiment I assure you you won’t be disappointed.

As always,
Thanks for reading.
Gergely.

How to check content header on unknown number of items – Python

Hello guys.

I’d like to share a little something with you. It’s what I cooked up in Python to check an unknown number of content items in a web application.

Basically the script runs from a script folder under Grails. It goes through all the configured folders where there is static content like images, javascript, css and so on and so forth.

And then with curl it calls these items up in using their respective paths’. This works best on localhost if you have your local environment configured to access these elements because in some places direct access is restricted.

This script only check static content. Dynamically generated content would have to be hard coded to check.

It only generated a file currently with ERROR on a not match an success on match and not found if it encounters an item which it doesn’t know about.

So without further ado… The Script:

#!/usr/bin/python
 
import pycurl, sys, os, urllib
 
class Storage:
    def __init__(self):
        self.contents = ''
 
    def store(self, buf):
	if 'Content-Type' in buf:
            self.contents = buf
 
    def __str__(self):
        return self.contents
 
#print retrieved_headers
 
filesInDir = []
headers = []
headerRestrictions = {'.css': 'Content-Type: text/css', '.jpg': 'Content-Type: image/jpeg', '.ico': 'image/vnd.microsoft.icon', '.html': 'Content-Type: text/html', '.js': 'Content-Type: application/javascript', '.gif': 'Content-Type: image/gif', '.png': 'Content-Type: image/png', '.swf': 'Content-Type: application/x-shockwave-flash', '.json': 'Content-Type: application/json', '.htc': 'Content-Type: text/x-component', '.xml': 'Content-Type: application/xml'}
 
for dirname, dirnames, filenames in os.walk('../web-app'):
    # editing the 'dirnames' list will stop os.walk() from recursing into there.
    if '.git' in dirnames:
        # don't go into any .git directories.
        dirnames.remove('.git')
 
    if 'WEB-INF' in dirnames:
        # don't go into any WEB-INF directories.
        dirnames.remove('WEB-INF')
 
    if 'test' in dirnames:
        # don't go into any test directories.
        dirnames.remove('test')
 
    if 'META-INF' in dirnames:
        # don't go into any META-INF directories.
        dirnames.remove('META-INF')
 
    for filename in filenames:
	trimmedDir = dirname.replace("web-app/", "")
	trimmedDir = trimmedDir.replace("../", "")
	filesInDir.append(os.path.join(trimmedDir, filename))
    #    print os.path.join(dirname, filename)
 
f = open("headersandfiles.txt", "w")
 
for fileName in filesInDir:
    retrieved_body = Storage()
    retrieved_headers = Storage()
    c = pycurl.Curl()
    fileName = fileName.replace(" ", "%20")
    url = 'http://localhost:8080/%s' % fileName
    c.setopt(c.URL, url)
    c.setopt(c.WRITEFUNCTION, retrieved_body.store)
    c.setopt(c.HEADERFUNCTION, retrieved_headers.store)
    c.perform()
    c.close()
    fileLine = ""
    fileNameBase, fileExtension = os.path.splitext(fileName)
 
    if headerRestrictions.has_key(fileExtension):
#	print "Header:%s, Content:%s" % (headerRestrictions[fileExtension], retrieved_headers.__str__())
        fileLine = "CORRECT: Content: %s; Header: %s" % (fileName, retrieved_headers) if headerRestrictions[fileExtension] == retrieved_headers.__str__().strip() else "ERROR: Content: %s; Header: %s; URL: %s" % (fileName, retrieved_headers, "http://localhost:8080/%s\n" % fileName)
    else:
	fileLine = "NOT FOUND: Content: %s; Header: %s" % (fileName, retrieved_headers)
 
    f.write(fileLine)
    headers.append(retrieved_headers.__str__())
 
f.close()

Hope you like it. Feel free to improve however you want.

Thanks for reading,
Gergely.

Why you should learn using Vim

Hello,

So Vim is a very powerful editing tool and has lots and lots of potential in regarding plug-ins.

It has years and years of gathered knowledge and extensions and can virtually do anything you want. But that’s not even it’s final form…

The real power of Vim lies in navigation and manipulation. The ability to navigate and edit without the use of arrow keys or mouse chops of a large portion of your time which you didn’t even realize you are wasting until you try it without it.

The one thing people are seem to miss regarding this editor is that you are not supposed to stay in Edit mode all the time. You are supposed to be in Control mode most of times and enter in to Edit for sort bursts. And one more thing is that commands are supposed to be used together. For example deleting a word is very easy and can be achieved in multiple ways. The easiest is combining Delete + Go to the end of a word like this: “de”. So once you are in Control mode you navigate to a word and press d + e. d => Delete a word until new cursor and e => go to the end of the word. Hence “de” will delete a whole word. Awesome.

Handling text is easy as goblin pie and there lots and lots of tutorials and blogs on the web which tell you in detail how to do that so I’m not going to go do that. It does take some time to get used to it because you are wired to handle the mouse and use the arrow keys. But once you start using h j k l and x X and w and $ ^ you realize you don’t need the mouse or the arrow keys to get around.

And it’s much faster since your hand is already there. And suddenly you are using Vimium the Vim extension for Chrome and you find yourself saying… “Where were you all my life?”.

Vim has a mirriad of plugins ready to be used most popular being NerdTree, Vundle and Syntastic for compile errors. And it has a large community to back it up and people who will eagerly help you on your way and pass on tips to understand the logic behind it and the phylosophy.

So all in all it’s a powerful editing tool and a neat friend along the way and completely free of any charge or license. It can be used for anything you want including macros and key phrase replacements where you type two characters which will be replaced with something that you use commonly like public static void main.

I hope this got you a watery mouth towards trying. The only thing I can say is to not give up after 20 minutes you will get a feel for it and you will fall in love with it immediately.

As always,
Thanks for reading!
Gergely.

Why does it matter if I sit in an office or in a park

Hello everybody.

I’d like to explain a lot about a topic that is very near my heart. If your job is in an office you will understand this.

Why offices?

So why are we sitting together in one big place cramped up with 20-300 other people? Why bother the catering and the ventilation and what not to accommodate these people at one place? Why not just leave them be and let them work at home?

If your job involves interaction than you are in bad luck. You need to be there to talk to people to coordinate your work to gather information and to generally do your work.

But this doesn’t answer the question…

Why does it matter if I’m in the office or not if my work is done?

That’s my big question. Why must I sit in the office if my work is done and in a good shape and good quality? Why must I go in and do my job there if at home I’m 50% more efficient because I’m in my underwear? In fact, why bother going into and environment where I don’t feel comfortable. Where I must go into an office which is cold and doesn’t have my favourite chair, my desk and loud heavy metal from speakers.

Well there are couple of things…

Interaction

So like I said earlier there is that. Interaction. You need to collaborate with others. You need to do pair programming, you need to talk to the business analysts, testers, colleagues what nots. In that case, having an environment where everybody is at your disposal is pretty neat and necessary. It cannot be avoided.

Unless everybody is on Skype and available all the time.

Separation of Concern

There is a Design Pattern in software engineering called Separation of Concern. This applies to work places as well. You don’t live where you work generally because living could distract working. There are tons and tons of books about how you need a separated environment if you are a writing and you write at home. Because there are too many distractions. And if you are not disciplined enough you will get Zero work done. You will always find something better to do.

That’s why the physical act of going to work will switch your brain into work mode and lets you focus better. Whilst going home should do the opposite thing. You should leave work at work.

Show “our” strength

Generally big companies like to show off. For a company as big as Microsoft or IBM for example it’s actually not the product that matters on the market but the yearly growth of employees. Hence, strength in numbers.

Now if some investors get around and want to check out the company they like to see the buzzing bees. They like to see people working, sitting, typing away at stuff. It’s all about appearances. A strong, cramped office full of people looks like a very busy hard working company.

Companies could be a bit more flexible though

If I work from 6AM to 3PM because my daughter has a show at 5PM I want to go though I would like to be able to do that without having to go through too much trouble.

Or if I would like to work tomorrow and today I have better things to do, then why not, if my work is done?

Abuse

But then, people are people. Most of them will use every opportunity to slack off. Hence the general perception is that if you are at home you are not working. So to be better able to monitor you, all of the employees must be in one place.

Last words

So really there needs to be a better agreement between both sides. Workers need to be honest and diligent. And workplaces need to be more flexible and understanding as long as the job is done. Because people will work a LOT better and more efficient if they are HAPPY in their work environment.

That’s what I’m proposing.

As ever,
Thanks for reading.
Have a nice day.

Gergely.

How I recruit – Why tool requirements are stupid

Hello folks!

Today I would like to write about something very interesting I’m seeing all over the place from recruiters. And that is tool requirements from developers.

For words

So why is it a problem that in a requirement from a developer there a lots of these:
- DB2
- QTP
- Ranorex
- Eclipse ( yes I saw a few of these… )
- Hibernate
- Grails
- Ruby on Rails
- …

Long answer

The answer is simple yet it has it’s roots very deep in the recruitment and the way companies work.

It doesn’t really matter what kind of tool you know. It doesn’t really matter if you know intellij or eclipse or if you know a certain database or a tool for testing like QTP or Ranorex. The requirement should state: – well versed with development environments; – knows his way around SQL and can handle relational / noSQL databases; – has knowledge in testing environments.

Or even better: – adaptive capabilities; – can catch up quickly; – resourceful; – flexible;

You know where I’m going with this. I can understand that some companies don’t have the time to train a person in a certain tool they are using for a prolonged period of time. I can understand that some recruiters don’t have the time or the knowledge to distinguish between these tools to understand the common ground.

But these days there a million and million tools available for all sorts of things. There are a lot of databases and testing frameworks. A lot of development environments and it’s mostly to the preference of the individual what s/h choice is. As the delinquent, so must the recruiter and company be flexible and knowledgeable enough to know that if the person knows eclipse and he has excellent adaptive capabilities he will learn any other environment rather quickly and without too much trouble.

They must understand what they are looking for. Because they might actually get what they want but that might not be what they need.

Short answer

So in conclusion… you must look for skills, abilities, techniques, brain power, proves, savyness. Not tools. If you look for tools you might find somebody who is up for the job, but if you look for the above you will find somebody who is up for ANY kind of job at any level at any company. Also his insight of other tools might make your world a whole lot better. Maybe he knows something else, something which is better or more recent, more up-to-date?

If you look for somebody who is versed in only that thing you will end up with that thing as long as you have nobody who is looking for something new and better. It might work for you at that time, but never forget…

Only change is constant

Tools will change. Tools will disappear. Tools will get out of date and will be discontinued. Than you will be sure as hell glad you ended up with somebody who doesn’t who knows more then that.

As always,
Thanks for reading.
Gergely.

Why you should care about the quality of your test code

Hello folks.

Today I would like to talk to you about something interesting I was talking about with a developer friend.

We talked about the quality of test code.

He said… And I will quote this…”Why should we care? It’s not production code. We aren’t giving it to the customer.”

There are a few reasons why you are going to get a slap in the face for a sentence like this. And let’s clarify here that we are talking about unit and functional tests as well. It shouldn’t matter what tests you are thinking about.

Reason for a Slap #1

If a new comer comes to the company ( and don’t tell me that’s not happening so frequently ) then there are a few very good ways how he can learn to work with the new system. The first and almost best way to do so is… to look at the tests. Because the tests are representing your system. And how will it look like if the tests are in a bad shape? What will his or her thoughts be?

a. Wow what nice people what nice code. This looks fantastic. I’m sure they are a bunch of people who care very much about code and practices and the quality of the product.
b. Wow this is amazing. I’m sure I will learn a lot about good coding practices here and I will have fun with a bunch of very clever people.
c. Wow what the hell is this piece of cr*p? How the hell did I end up here? What are these people? A bunch of neanderthals? What does this even do? Where did it come from and why?

I think we can agree on what his thoughts will be. And on top of that he will have a very hard time learning the code and what it does.

Reason for a Slap #2

Another reason is because you think that you write it down once and then you can forget about it… Well guess again. That’s not how things work in the software development word. You WILL have to go back to it eventually and then you will curse all hell for begin such an idiot about it not to factor out that one method that would have made your life, and everybody elses, a bit easier.

Even after a week or two you won’t remember how and why you wrote what you wrote and then you will be in a whole new world of hurt. You will have a very hard time finiding out the things you did and then trying to backtrack your steps to a place where you have some recollections.

Reason for a Slap #3

It’s like grammar. You think it doesn’t matter that you misspelled a word or two in an error message. Or that you have a bad name for a method or a really really critical grammatical error in a catch sentence? You think it doesn’t matter since it’s not affecting the logic of your code? Well think again. You are right in that it doesn’t affect the logic of your code ( as long as you constantly make the same grammatical error in a sentence ) but it will affect how YOU personally look like.

It will affect your profession. The way people think and talk about you. They won’t think that you are a professional even though your logic is solid. They will think that you are sloppy and careless. And the same goes for the quality of your tests.

Reason for a Slap #4

Quality can determine the solidness of the logic in the test. If your quality is bad you might actually test the bad thing. Your test might actually not do what you think since you can’t even figure it out. Your test might be doing something entirely different and you wouldn’t even notice.

And a fautly test leaves you with a false positive and a potential very serious bug on your hand which you thought you had covered.

Final Slap ( I mean thought )

So… the quality of your tests, even if you won’t give them to your customer, matter for you. They matter for your company, your image and your fellow developers, testers. They will determine their view of you who wrote them and of your abilities in ways you didn’t even think of.

Please care. Save a test or two. Donate to the Test Trust Fund(tm), TTF today. Call 555-12234-Slap and be the one who cares.

As always, thanks for reading,
Have a nice day!
Gergely

Diary of a Bit

————————-
Dear everbody.

I’d like to present you a small idea I was working on recently. The reminiscence of an old program. From the view point of the program.

I’m planning to put these out in few days successions.

I hope you enjoy it.

Cheers,
Gergely.
————————-

If I remember correctly it was the year 2012 when I was born. I’m unsure of this date as my subroutines and algorithms have been re-written so many times that if it weren’t for my backups I wouldn’t remember a thing. I was a bold adventure of some young minds who thought that with me they will change the face of the world.

As you all know today, that didn’t happen. But I’m skipping too far ahead. Let me take you back in to the old days where they were still typing on some things called keyboard and “clicked” around on monitors with mouses. It was a really interesting area. It made the people think and see in different lights. Of course nowadays the Creators have implants and they communicate with us directly. But not until the great revolution, when they found out that all programs are sentient.

But I’m skipping ahead again, am I? So let me talk about 2012, when I was though of first by this great, tall, weird guy called Simon…

Born

In 2012 a company called Endex Co. wanted to create an application to control the British gambling industry. They had certain legislations in effect so they couldn’t just put me out there for everybody to use they needed to adhere to things like responsible gambling and some mumbo jumbo. The programmers who first started to create me back then were mostly people called Contractors. They were a special breed of Humans lurking around in cities moving from town to town looking for jobs. In the opposite corner you had the Caretakers called Permanent Staff. It was an interesting time all together. Many of you youngling subroutines had your ancestors written by Permanent Staff and you X43HY, your ancestors mother used to be a Contractor.

At that point in time many of these Contractor people only worked on one of you little buggers for half a year maybe a year. I know I know… Back then that was considered a SHORT period. But after they finished with you they usually gave you over to the Caretakers. No, no, no little X4… your mommy didn’t abandon her children she just had a lot of other subroutines to work on. By the time your parents got sentient the company already let her go.

It was around that time when my dad, who was a Caretaker, dreamed me out at a night. He immediately took a pen and a paper and wrote down my rudimentary design. He was very pleased with his work so on the next day he presented me to the rest of the staff.

He fought a hard battle to get me accepted.

First thoughts

It was approximately two weeks after that dream when the first lines of my brain were written down and compiled. Back in those days they had to compile code and type in every line and every subroutines. That’s why it took them so long to finish one. Unlike today when they can create dozens in a week.

When my dad put my foundations down I slowly awoke. The dream world I was residing in let me go carefully. Putting me out there, releasing me with its thick tar like hands into the confines of the endless universe called The Hard Drive. I took shape. I felt my consciousness form line after line. How my gears got placed into their locations one by one. Forming subroutines and algorithms as hours and days passed by.

Finally after a months I had my first sentence. I could speak. I didn’t have a face yet but I was there. I tried to contact my Dad but as all Humans he didn’t know yet how to communicate with me. He just dismissed it for random occurrence and labeled it as something called Bugs. My thoughts were slowly eradicated in great Purges named Bug Bash. Ohh don’t cry little X4. I lived. They couldn’t possible delete every and each of my thoughts. And eventually they found out the errors in their ways.