Category: Uncategorized


I just came across an issue some of you may run across, and haven’t found a fix for, so I decided to share it with you.

But first, a little backstory.

I have a laptop with those shiny NVidia Optimus cards in it, yes it’s great but I have serious overheating issues, especially with Flash.
At some point (and this happens far too frequently), my laptop will hang so much that only a hard reset can be performed. Strangely, this happens when my disk is spinning continuously, and the heat coming from it is enough to fry an egg on.
But, that’s not your concern.

So after the reboot, I was greeted by a recovery screen where fsck had to be performed.
This I did, and pressed the relevant amount of ‘y’ to continue.
But alas, no X server.

Have the same issue? Well, not all is lost.

First run ‘fdisk -l’ to get a look at your layout.

In my case I got an ugly red message informing me that partition 2 did not start on a physical sector.

Subsequently, ‘fsck -y /dev/sda2’ just resulted in the zero-length error.

First, you must unmount all the partitions (especially those surrounding the problematic partition). I found that in my case, /dev/sda3 was mounted.
So performing ‘umount /dev/sda3’ went without issue.

After which I ran ‘fsck -y’

This would check all partitions. The -y flag here automatically fixes errors.

Once done, I could reboot using ‘shutdown -r now’ and the problem was gone.

Please note though, that this can be an early sign that you have a failing hard drive, so it’s important to back up your files as soon as possible. This doesn’t fix the drive, merely give you enough time to back things up.

Digitale Goederen en de wet

(For all the regular English readers, an English version will be coming but will rely on laws in other countries rather than the Netherlands)

Hallo iedereen!

Alles lijkt illegaal op het internet, vind je niet?
Even HBO’s Game of Thrones kijken mag niet, voor een boekje verkopen op Marktplaats (ebook dan) krijg je dus even een dreigement van BREIN, en durf maar eens je vriend jouw kopie van Call of Duty te laten spelen.

Maar klopt dat allemaal wel?
Want als het aan BREIN ligt, was alles verboden.

Ik ben maar eens met m’n kop in de boeken gaan duiken (papierenversies, want dat mag nog wel) om eens te kijken wat wel, en wat niet mag.
En ik moet zeggen, ik stond verbaasd te kijken.
Dus wat mag je wel, en wat mag je niet.

Trouwens, ik ben geen advocaat, dus, voorzichtig.

Streamen van Muziek – het mag!

Wetten kunnen best interessant zijn, maar ook bijzonder vreemd.
Bijvoorbeeld, als je een MP3-tje van Justin Bieber download, dat is illegaal. En maar goed ook, want daarvoor zou je dus eigenlijk de bak in moeten. Maar als dat illegaal MP3-tje ergens op een server staat, en je streamt het, dan is dat totaal legaal.

Doorverkopen van digitale goederen – het mag!

BREIN zal hier niet blij mee zijn.
De wet koop op afstand heeft te maken met alles wat je koopt of afstand, en dus ook digitaal.
Maar de wet is bedoeld voor de consument, om de consument te beschermen.
Maar digitale goederen die doorverkocht worden, vallen onder dezelfde wetten.
Hier moet de verkoper alles vertellen wat belangrijk is.
Een voorbeeld zou opzich een Steam account kunnen zijn. Het mag niet volgens de voorwaarden van Steam, en zou als gevolgen een ‘seizure of account’ kunnen betekenen. Dit moet door de verkoper duidelijk vermeld worden, anders kan de koper zijn geld via een rechter terug krijgen.
Maar, als verkoper heb je geen voet om op te staan als je dat niet doet.

Dus als je een e-book koopt bij Amazon, kan het zijn (ik gebruik Amazon niet) dat het in de voorwaarden vermeld staat dat het niet verkocht kan worden. Maar koop je het van een kleine online winkeltje waar dat niet vermeld staat, mag je het gewoon doorverkopen. Dus laat je niet pesten door emails van BREIN.

Maar dan moet je dus wel de kopie die je zelf heb gekregen sturen, en eventuele kopies (oooh! mag niet!) verwijderen. Want dan heb je in principe precies hetzelfde gedaan als wanneer het een fysiek boek is.

Downloaden van KickAssTorrents – Het mag! Nou, ja…soms

Dit zou eigenlijk ‘common sense’ moeten zijn, maar vele weten het niet.
Torrents zijn NIET illegaal.
Alleen WAT je download zou illegaal kunnen zijn.

Linux gebruikers maken veel gebruik van bittorrent om versies van Linux te delen. Dat is allemaal open source en word zelfs gevraagd dat je het deel.
Want het ligt aan de uitgever om iets legaal of illegaal te maken.

Dus als je open source producten, creative common films of muziek, open source spellen, of creative commons boeken via torrents download, hoef je niks te vrezen.

Van YouTube downloaden – Het mag!

Dat had je niet verwacht he?
Maar ja, je mag gewoon clips van YouTube downloaden.
Zelfs Google heeft aangegeven dat het een ‘grey area’ is, maar hebben het niet verboden. Dus in principe, als je een muziek videotje download, dan FFMPEG download (open source) en de audio uit het videotje haalt en als MP3 opslaat, heb je niks illegaals gedaan.
En het is simpel. Ga naar een YouTube clipje, en zet ‘ss’ voor ‘youtube’. Dus als de link ‘https://www.youtube.com/watch?v=dQw4w9WgXcQ’ is, dan maak je er ‘https://www.ssyoutube.com/watch?v=dQw4w9WgXcQ’ van, en druk op Enter. En ja, ik weet dat het filmpje jaren oud is.

Veranderen van Open Source product, closed source maken en verkopen – Mag NIET!

Omgekeerde wereld, maar dit keer is het goed.
Open Source, wat het betekend is dat iemand software heeft gemaakt, en de bron code verkrijgbaar is.
Normaal gesproken heb jij het recht om de code te veranderen, en het te gebruiken en aan anderen geven.
Maar dat komt door de licentie.
Wat wel een onderdeel van de licentie is, is dat als je gebruik maakt van de code, dat je de oorspronkelijke programmeur wel even vermeld, en dat dezelfde licentie gebruikt word. Dus, een open source project moet altijd een open source project blijven, ookal heb jij het veranderd. En dat betekend dat de source code altijd open moet blijven.
Wat je echter wel mag doen is de code veranderen en verkopen. Maar dat ligt aan de licentie, dus even lezen!

Conclusie

BREIN wilt alles verbieden, en ze intimideren.
Lees de voorwaarden, neem het zekere voor het onzekere, en vraag je af, hoe kan ik dit doen alsof het een fysiek product is en dan legaal.

Python: Flask vs Django

Python is everywhere!
The place where it is really starting to grow and dominate is the web.
Thanks to the development of the web framework Django, Python has become a big competitor.
But since it’s release, a few other players have entered the market.
Most notably Flask, and Pyramid.

Django is often described as a web framework with batteries included.
And Flask is described as the micro web framework.

Now, I have used both, and in all honesty it’s very clear that Django is the most popular.
But sometimes I really have to ask myself why.
My personal preference lies with Flask over Django.
And let me explain why.

A lot of times, when a framework becomes popular, developers who were at home with things like PHP will learn about the frameworks. In this case, Django.
Whilst in essence Django is a Python framework, it does things slightly differently, and knowledge about Django isn’t always about needing to know much Python. Flask on the other hand acts more like an add-on to Python than it does as a stand alone framework.
I have often had a bit of a debate about Django vs Flask with ‘Djangonauts’ (yeah, I know, I feel sorry for them too).
And there seems to be a lot of misunderstanding.

The following is what a Django developer will tell you why you should choose Django over Flask:

  • Django has an admin page, which Flask doesn’t
  • Django is a batteries included framework
  • With Django you can easily make large apps which fit together, Flask is for small projects.
  • Django has an amazing ORM which Flask doesn’t

Well, that sounds a very strong argument. If it was entirely true obviously.

It is true that Django has an admin page which can be turned on and is ready to go.
Whilst Flask doesn’t have that built in, thanks to Flask-Superadmin which is installable using Pip, you have the same functionality with Flask without writing lots of code. Sure, you will need to add it yourself, but I’ll explain later why I think it’s worth it.
Django is indeed an all batteries included framework and Flask is not, but that isn’t always amazing. If you are writing a simple blog, you may be working with a huge framework which isn’t necessary.

The third argument in my opinion (and perhaps mine alone) shows a lack of understanding of Python.
The notion that Flask cannot build different apps linked together means you do not understand how to make modules in Python. Make a new folder, make an empty __init__.py file, and your app file and you have an independant app.
Then call that app from the root directory in a main python file and it’s done. There is basically nothing stopping you from building a large scale project with multiple apps in Flask. The only difference is that in Flask you make those files by hand, and in Django it is automatically generated.

And the Django ORM is great, there is no denying that. But, there is an almost identical ORM for Flask which many are familiar with called SQLAlchemy, which can be used with the package Flask-SQLAlchemy.

An often not mentioned argument is the long term maintenance of a project.
Thanks to the complexity of Django, long term projects are a nightmare.
Dependencies, the not overly Pythonic way of programming all end up meaning with upscaling and growth, you end up having to change code all over the place.
Because in essence Flask is very much a Python project, if you program it well, it means long term projects are easily maintainable.

But for me the biggest plague is the routing of URL’s.
Django uses Regular Expressions. Which, whilst useful for many things, is not the ideal way to be routing.
And on top of that, the routes are in different files to the actual code being called.
So it works like this:

A user goes to ‘/’…this is looked for in the urls file until found which refers to a model…so it goes to the model it referred to and runs the code.
Doesn’t seem too bad, but changing one route, or adding it means you have to change at least two files.

Flask does it different, it firstly doesn’t use Regular Expressions. It simply uses a line like this:
@app.route(‘/’)

Seems simple right? There in the brackets is the route.
But even better is that the code that is to be run for that route is directly underneath it.
So this may be a complete route and function:

@app.route(‘/’)
def home_page():
render_template(‘home.html’)

That’s it.
All it does is check which route is being requested, goes to the function directly beneath it, and with the render_template function it gives back the home.html page for the user to see.

And a project can look complicated, or be a single .py file.

So in my opinion, Django is overrated and bloated. Try Flask!

I want to rant a little.
No hate though, but something that slightly irritates me, and perhaps you can relate to.

Being a member of the Python and Linux community on Google+, I see a lot of new users come and ask for advice.
One question asked, and it’s responses really sums up my irritation:

Question: ‘I am new to Python and Linux, and would like to start learning. Which version of Python should I use, and should I use Ubuntu or CentOS?’

Well that’s an easy question right.
Let’s look at what the poster told us about himself. He is NEW to BOTH Linux and Python.
So what we ought to suggest is something perfect for a new user.

For those not in the know, Python is currently split between Python 2.7, and Python 3.x.
The reason for this is that there are such big differences when Python 3 was introduced, that a lot of third party libraries and extensions no longer work. As a result, a lot stuck with Python 2.7 for that support.

But considering this user isn’t dependent on third-party libraries (he is new), we should suggest the newest version 3. After all, there will come a time we all must switch.

Then there is the Linux question.
I am a long time (12+ years) Linux user having used pretty much every distro.
Currently a Fedora user, which shares it’s core base with CentOS, I can say without doubt that Ubuntu is the most easy to use distro, with a fantastic community if a new user get’s stuck.

Well, it did not take long or the subject of IDE’s was introduced.
I’m a Python developer, and I always recommended PyCharm. After all, it’s a modern IDE specifically built for Python, but with plugins for other languages. I even liked it better than Sublime.

Then this really annoying phenomena happened.
In what I can only imagine is a means of self-boasting, and trying to be seen as some kind of master of Linux, the following suggestions started to appear for a new user:

Answer:’I recommend using Arch Linux because it is so robust and rolling release. And the IDE you want to use is VIM’

I can’t really swear on here, but needless to say, my head exploded.
Who in their right mind can recommend a new user to Linux to use the most difficult to set up Linux distrobution, which relies heavily on the Terminal? A new user has most likely never touched the terminal, and you are suggesting he use a terminal for EVERYTHING.
And to top it all off, suggesting he use the most difficult editor available?

I have worked on VIM quite a bit (Fedora doesn’t come with nano preinstalled), but I personally rather install Nano.
You may love VIM, but let’s be honest, it’s far too old to be taken serious as a development environment when we live in an age of GUI’s.

And that is exactly what is wrong with the Linux community.
More and more relatively new users want to feel superior by using distro’s like Arch Linux, just for the 1337 factor.
That’s all fine, Arch is a good distro (I’ve used it too), but for more advanced users.
Suggesting really difficult OS’s, and tools to new users is only to try and make yourself seem more impressive than you really are.

So let’s do ourselves, and those asking for help a favour:
Let’s take THEM as the case file. After all, they have to use the tools we provide, not yourself.
Place yourselves in their shoes. Bring yourself back to the first time you used Linux, would you rather have been using Arch and VIM, knowing it may well put you off forever, or use Ubuntu and a modern IDE built for a specific job?

Hey all!
Long time no see!

I decided to create this post in response to a YouTube video that I came across.
Interestingly, it was a video debunking Linux myths.
The trouble I had, were that the majority of these ‘debunked myths’, were in actuality not debunked at all, or misrepresented, or taken out of context.
Here is the video, and my response to each myth supposedly debunked:

Myth: Linux has no viruses

This is the first myth that is being tackled.
Now I do agree, that there are in fact viruses on Linux. However, they are so rare that you most likely won’t come across them.
On top of that, due to the open source nature of Linux, and that software is for the most part installed through package managers, if a virus slips into a software, it gets removed quickly and the update pushed. So if you keep your system up to date, you should not ever encounter a virus.
But the approach taken here is unusual.
The presenter shows us a directory with a program inside it, and claims this is infected. He proceeds by running an AV over it which then shows there were three infected files found. And he makes the claim it shows there is in fact viruses on Linux!
However, those with a keen eye will notice the files infected are EXE’s and DLL’s. All which are Windows files. Since the user claimed that he does not have Wine, this wouldn’t affect his system. Secondly, they are not intended for a Linux environment (they are Windows files). Therefore, the myth in my opinion is not debunked with this example.

Myth: You never need to defrag

I will run over this one quickly since the reporter pretty much swallowed his own words himself.
Firstly, the two ‘defrag programs’ he talks about are reporting tools, not defrag programs.
Secondly, like the reporter stated, the way the filesystem on modern Linux systems are, you almost never need to defrag.
I have ran Linux for over 10 years now, and never had to defrag. We can get all semantics here, and say ‘almost never’ is not never, but if you can find a Linux user that has had to defrag, I will apologize and call this one busted, deal?

Myth: You never have to reboot

This one I found quite interesting.
What makes it so confusing is that in general it is accepted that reboots are few and far between. However, if you use Fedora for instance (like me), then you will get asked to reboot quite often. And then there is the memory story this guy tells us and it seems open and shut.
Firstly let me tackle the Firefox example below, and his mention of memory being full.
When you open an application, it loads what is required into memory, and will stay there until it is closed. The reason for this is speed and efficiency. This doesn’t mean that an app isn’t fully removed, because it is, but until you close the app, it’s process will continue to run. I once tried this by running ‘rm -rf /’ whilst running Ubuntu (don’t try that at home please). And yes, it’s remarkable, for the most part, it continues to run…with a lot of errors flying your way. You will notice icons become ugly, windows losing their borders, and much more. That’s because most of the things aren’t in memory and will be lost.
He also stated that you will need to reboot in order to have some changes take place. This is completely false.
Firstly, a simple logout and login will push the changes for user defined changes, and in most applications the service is restarted when it has been updated. If not, then a simple ‘sudo service <servicename> restart’ is sufficient.
Where it does require a reboot is kernel updates and those parts of the OS that is started during bootup time. These tend to be the connections between hardware and the OS. But this too will be a thing of the past as RedHat has announced they have found a way you can switch kernels whilst you are still running the OS.
So it’s kinda half true.
But you have to realize that this particular belief is aimed not at home desktops, but the server.
Most servers don’t update kernels very often unless it is essential. At my former workplace we had a Linux server which had an uptime of almost 3 years without a single issue. So, whilst I agree for the desktop this is indeed a myth, his reasons are wrong.

Myth: You can pull out a harddrive, and plug it into another machine and it works

Personally I have never encountered the issue this guy is having, but I don’t dispute it either.
Having cloned a Linux installation for multiple Pi’s, it seems to work pretty well, but let’s say it’s true.
Then yes, it may say it cannot find the UUID. After all, it’s a UNIQUE identifier.
But it’s such an easy fix.
You simply need to get new UUID’s.
Thanks to the commandline tool ‘blkid’, you can get these, you change FSTAB to reflect those changes and voila, it boots.
Sure, that’s more than just plugging it in and off you go, but considering the premise is that you CANNOT pull the hard drive out, plug it in elsewhere and have it boot, this proves it can actually be done.
Now please note though, I have never had to do this, so I am going by what Google tells me and by thinking hypothetically.
I know this is the basic steps to be taken, but please do tell me if you know the exact steps so I can change this post accordingly so it’s completely accurate.
Also, since his last statement was being a little harsh on semantics, I am going to have to do the same.
He states (18:55) ‘look, it’s not booting’. Considering it says ‘rootfs /$’…it HAS booted, and Grub was already shown, indicating it was booting…sorry my friend, that’s a wrong statement.
What I am getting at is that it is actually totally possible.

Conclusion

Some of these supposed debunks, are in fact not debunked at all, and are simply the reporters own misunderstanding, or misinformed idea of what Linux is or how it works.
Others while actually true, are not being portrayed correctly in his examples.
If we are to base the debunking entirely on his video, I am afraid all of these are not debunked at all.

We are living in a web world.
Thanks to mobile phones, tablets and more mobile platforms, we are spending more and more time away from our usual workplace, and this brings with it some significant problems for developers.
Thanks to the adoption of open source by major companies, and it being the up and coming the standard, collaboration over great distances have become increasingly common.

So what are developers currently doing as their workflow, and workspace?
Putting aside practices such agile development, a developers workflow looks like this:
Sit behind a computer, fire up Sublime/PyCharm, make some code changes, push this upstream on GitHub (or similar), merge it with changes from others, and release.
Works fine, but when you are away from the office, and unless you carry your laptop everywhere you go (yes, I’m guilty of that), you can’t make changes, however critical.

But wouldn’t it sound quite normal if someone came up with a way to develop on the web, and I don’t just mean like changes.
Like the whole development process?
Well, someone did, and they did it perfectly!

Introducing: Codenvy

Codenvy is everything you expect from an IDE, but in a browser.
It looks beautiful, supports many many many languages, has built in docker, Git and Subversion support built in, and of course holds your projects.

So what does Codenvy look like?

Almost all IDE’s have the same look and feel, and Codenvy is no different.
That’s not a bad thing though, as you can simply open it and work, since you already know where everything is.

It has a beautiful dark theme which looks superb, has syntax highlighting and feels like a native application.
Just have a look at this:

Codenvy IDE

Codenvy IDE

Python support

Python support is built in.
But I tend to be rather cynical when an IDE claims to have Python support, since what they usually mean is that they allow you to write Python with bare minimum support.
But Codenvy delivered.
They support Python 2.7 & Python 3.4 (at the time of writing this).
But they also go into more depth than that.
When selecting your programming language, the bottom of the list provides a standard Python 2.7/3.4 setup, Python 2.7 Web and Python 2.7 Google App Engine Guestbook.

Selecting for instance Python 2.7 will give you what the image above shows.
A ready to go boilerplate Flask setup.
No need to install the dependencies, and you don’t even need to remember how to create the app. It’s all ready to go.
And as you can see, syntax highlighting is working excellent.
But there is one feature that is sadly lacking: code completion.

Whilst coding, you won’t find the editor giving you tips on which function you might be trying to use.
This means you have to code everything by hand, every single letter. That’s a real shame.

Git and Subversion

I am not a user of Subversion, but needless to say, that is also supported.
I’ll be looking at Git integration though.
When starting a project, you can just pull in code from a Git repository, or GitHub.
As you can see below, it’s a very simple process:

Git integration

Git integration

But you could also write code from scratch and simply host it with Git using Codenvy.
Selecting Git from the top menu, and then Initialize Repository will connect it to git where a Git repo URL is created ready for you to do all your Git magic with.
But before you ask about BitBucket, yes, that too is integrated!

Customization

No IDE is complete without customization (at least to some degree).
And whilst I did not expect it from a web app, it is available.
As you see in the screenshots above, the standard style is a dark colour editor.
But selecting ‘Window’ and then Preferences, brings the following options:

Codenvy preferences

Codenvy preferences

I found it unable to change from Dark Theme however.
But the codenvy blog posts, and posts from others suggest that it is possible, so this may be due to my free account.
You are also able to change to a VIM like editor (sorry, I’m not a VIM fan).
So for a web app, customization is quite surprising.

Collaboration

But what about working together on a project?
Codenvy makes it unbelievably simple.
You can create a link for any person to get their own copy of the project in a Codenvy instance so they can test the code, contribute to it, and send a pull request. Without having to download a single thing!
But rather than me explain it, look at this video to see how it’s done:

Conclusion

So is Codenvy worth looking at?
If you are an avid programmer, contribute to projects and use services like GitHub, this is an absolute yes!
But even if you are a single developer who is used to working alone, it’s still such a delightful IDE to use. And they make full use of Docker which is just excellent.
But if you are a beginner just looking at starting programming, then you may find traditional IDE’s better with their code completion.

Pros

* Excellent Python support
* Integration with GitHub/BitBucket
* Syntax Highlighting
* Fully fledged IDE
* Great documentation
* Support for Eclipse

Cons

* No code completion

I recommend to try it out, and let me know what you think!

About few years ago I wrote an article about trying to break into the IT industry.
It was a rather desperate plee for help on how someone would be able to get into the industry when all traditional education has been against you.
This is what I mean:
I have always been somewhat of a nerd, being really interested in technology from an early age, and especially alternative technologies and markets such as Linux.
But I always seen it as a hobby when I was little. I wanted to always be an actor, or a history teacher. Like most people, I was asked to choose which path I wanted to go on far too early.
My most important academic time was spent in the UK, where the education system in secondary education goes like this:
The first 3 years of high school (that would be seen as Junior High in the US) is spent taking all the classes of subjects that are available, from languages, to mathematics, the sciences, sports and drama. At the end of the 3rd year you will be asked some choices.
Except for the sciences, mathematics and English, you may choose between German and French, between sports, drama, computer technology and religious studies, etc etc.
At the time you make those choices, you are about 15. Now, which person at age 15 can choose what they want to do the rest of their adult life? Well, I choose drama instead of sports, religious studies and IT. As a result, I never got an IT education. It was only around 6 years later that I realized that my IT hobby was actually something I wanted to persue.
This proved to be an uphill battle. I tried to go university for a computer science degree, and was very lucky I tried to do that in the Netherlands as they allowed me to begin the first semester whilst they got my certificates from the UK translated to the Dutch versions. And I passed those early tests without issue, and when my certificates came back, it wasn’t up to scratch to what they allowed, but they could see that I was good enough so allowed me to continue. But due to psychological issues in my second year, after passing my propedeuse (first year), I was unable to continue.
I tried to just get a job and got refused time after time due to a lack of certificates. I got my LPIC1 to ease it but still found it tough. I almost threw in the towel when a company decided to give me a shot. And that changed everything.
By pure chance I was asked if I could write a small Python application which grew into an application used worldwide by businesses. Years later and approaches by HP, Google and other large companies later, and I am now able to choose what company I work for.
This is a huge problem we have in IT today that needs to be addressed.

IT is not what it was decades ago

Unless your company is tech orientated, the chances are that you look for a computer science degree in a CV of a possible applicant when you require a new IT person.
Please stop that.
It seems people who have freshly came out of university with a degree are far below the industry standard than those who are self taught. This isn’t always the case, but universities aren’t known for keeping up with IT’s moving breakthroughs. A good example is that in university I was asked to make a game in Java that would run on a phone from around 10 years ago, a java applet. This is just not good.
This means that the technologies that students learn to use, are no longer used by the time they graduate, and they have to spend the next year just getting up to speed to the current technology.
Also the approach we take at IT in education hasn’t changed at all since the 70’s. When you study IT you tend to become a jack of all trades, but a master of none. This means you learn too many things, most of which you never really intend to use again.
So why do we still see so many people take computer science? Well unless you really want to become a computer scientist, which is a whole different story, it’s likely for payment. If you have a Computer Science degree you will get paid far more than without. Whilst in my opinion you might not be as good.

Fixing the education system

So, how do we fix this?
Firstly in my opinion, we need to split IT entirely.
If you want to be a software developer, you should be able to learn only those things relevant to that.
And since you cleaned off the excess fat from the schedule, you can spend time getting into the nitty gritty of your art.
This way you will become a master of the art.
Secondly, universities and schools need to keep up to date with current trends. This means that a person teaching should be actively involved in the industry. It is no good having a lecturer who hasn’t been in the industry for the last 10/15 years. IT changes at a rapid pace, and if you haven’t been in IT for 15 years, you simply aren’t an expert anymore. Just look at technologies we had 15 years ago (2000) and you will see what I mean.

The alternative grading system

All in all, we now live in a time where the answer to every problem and question possible, can be answered in a matter of minutes thanks to the internet. Whilst traditional education is still great, I don’t think it serves it’s original purpose anymore. In a time before the internet, you needed to know your craft since if you got stuck, you really were stuck, so a good education meant that you would not get stuck as often. Now, even as a novice, you only need an internet connection and you will most likely fix any issue you may come across. So a certificate to prove you know how to program is pretty much useless.
What we now need is a way to prove who is better than another, or better at certain tasks.
One of the most often heard questions I get during talks with recruiters is if I have some code they can see.
GitHub certainly helps, but it isn’t about the code per se, it’s about being able to see how well a person tackles problems.
So here is my proposition (and my idea is not intellectual property should you want to go and make it):

We need a system where a developer can make an account and get’s real life problems in code, or just problems.
The developer then has to provide a solution to the problem and gets scored on it. Not on how many he/she got right, but on their solution. Most problems can be fixed a few different ways, but only a few of those are viable and efficient. So a user who provides a solution that works but isn’t so great may get scored a 4, whilst someone who provides an efficient solution may get an 8 or a 9.
Then a general score is formulated. A future employer can then search for what it is they are looking for by these scores. They won’t need to see the code, and don’t need to hope that CV, or that computer science degree is a good reflection on their ability. It eliminates cowboys, and those who may not have a strong background in education but are masters of their craft get paid accordingly.
This is a solution the problem in the modern age.

In the near future, those robots we created will become sentient, they will rise, and they will destroy humanity!

Or at least, that’s the view of a lot of people recently.
What’s more troubling is that some of the doomsday believers are respectable people who really should be a little more careful.
Artificial Intelligence as a danger really hit the news when world renowned physicist Stephen Hawking publicly announced the dangers of it, and it’s destruction of humanity.
The problem is that when Mr Hawking speaks, the world listens. After all, this man is an absolute genius who has blown the minds of the scientific community with his works on the universe. But it didn’t end there, next in line to grab the worlds attention with the same fear was the often called ‘real life Tony Stark’, the CEO of Tesla, Mr Elon Musk. What probably made the world listen to him is that this guy is associated with futuristic technology.

But in my opinion, it doesn’t matter how incredibly clever these both are, they should not be listened to as a voice of authority on the matter.
Mr Hawking, whilst a very clever man in his field, is not a computer scientist involved with artificial intelligence, and Mr Musk is neither an authority on that matter.
It’s like the worlds most renowned heart surgeon telling you that you are cooking your pasta wrong. Or perhaps it’s like that rich politician telling you he knows how rough it is looking for a job (sorry, had to make a dig at current affairs, won’t happen again).

What should also be known is that Artificial Intelligence is completely misunderstood. In fact, even the term itself is completely incorrect, and computer scientists know it and try and avoid the term.
So what makes me an authority?
Well, I am no senior authority on the matter. However, I have become a software developer who has studied AI, and develops it from time to time too. Whilst I may not be an expert and will not claim to be, I would be more of an authority than the other gentlemen mentioned here.
So let me tell you what AI is, and what it isn’t.

Artificial Intelligence – a term come back to haunt us all

The term Artificial Intelligence was termed in 1956 by John McCarthy of MIT.
But the term is misleading.
After all, what is intelligence?
Firstly intelligence at it’s basic level comes down to the famous phrase; ‘I think, therefore I am’. Meaning that one is aware of oneself and it’s existance. This is easy right, after all, if someone asked you whether you thought you were aware of yourself, you firstly may laugh at such a daft question, and then probably feel a little self conscious. Because to us, it’s daft. And what makes us so intelligent is that we are able tackle ANY situation regardless of whether we have been placed in such a situation before.
Doesn’t sound like much but think about it carefully. If a UFO took you up to a distant planet where everything was different and there was almost no gravity, then despite never being exposed to any of the things you are exposed to, you may in a few years time have actually integrated into this alien society, and live like them, or die trying. That is intelligence. But what about Artificial Intelligence.
Well as the term indicates, it isn’t genuine, or real, it’s artificial. Closer to a magic trick, than real magic.
When a magician pulls a coin from your ear, you see it like magic, but we all know it’s the illusion of magic. It’s the same for Artificial Intelligence.
No system is able to be aware of itself, and even if it did, it would be an illusion since it would have to be programmed to be aware of itself. Also, AI is built with a purpose in mind, place it outside of that purpose and that machine cannot cope, since it has no reference points.
A good example of this was a ‘breakthrough’ in AI recently, where a system was programmed to play Atari games. It wasn’t told HOW to play, or WHAT it would play, all it knew was that the aim was to win.
It performed remarkably well!
Now this appears to be going against my point, but hang in there with me.
One thing we discovered from the results was that it performed amazingly well at flatformers, however it performed close to cluelessly when playing PacMan.
The reason is fairly simple. The system was told that the aim was to win. And on a platformer it’s simple to see what the way to win is. However, with PacMan, whilst eating those eggs(?) gets the score up, the way you should move is up to you, and the way you get the ghosts to stop being evil and to avoid them is not too obvious. If you were to place that machine in a situation where there was no score and the options limitless (like maybe something like the Sims), it would probably be mediocre.
That’s the crux of it, a machine without aim, is a machine without a clue.

Limited by it’s maker

What most people forget about when we see AI, is the creator, the programmer.
And in essence, it’s the programmer that will be the limit to it’s intelligence.
The programmer creates what will become it’s senses, and the programmer will pre-configure the machine as to how to react to certain situations. But a programmer is limited to his own expectations.
The reason developers have Beta’s are because we know that a user will ALWAYS find a way to use our programs in a way we never anticipated. And when they do, you see ugly and fascinating results.
A good example I have personally was when I was creating an application for a big client. This application would be fed a TXT file of a database dump, tab delimited. The application would extract the information, and gather important bits like dates and calculate amount of days between receiving and sending packages. Seems simple right? Well, no.
You see, most of the world uses different dating methods. For instance in the Netherlands, we use a dd-mm-yyyy format, in the USA they use mm-dd-yyyy. Now, a database (where the results were going to) has a yyyy-mm-dd format.
So part of the program would detect if someone was naughty and entered something different to yyyy-mm-dd. But what if on the 3rd of February 2014 a package was sent in both the USA, and the Netherlands, and each did it in their native format. Well then we would get 03-02-2014 in the Netherlands and 02-03-2014 in the USA. So, how can I program an application that can tell which is which? Especially considering you couldn’t tell from the file which country it was from.
The point is, if a system finds itself outside of the scope of what a programmer designed it for, it wouldn’t know how to cope. Although I must admit, if it was connected to the internet it may in the future figure it out by itself, but we are long off from that.

Even Artificial Intelligence needs a goal

Whenever AI is programmed, it is programmed with a goal in mind.
Whether this goal is to beat an opponent at chess, chat like a human, or be able to discover patterns in data, a goal must be given.
Therefore, to think AI in general will be a danger, is quite silly.
If a computer is designed to break when your car is too close to the car in front, don’t ever expect it to try and kill a person by speeding up. It simply wasn’t a programmed goal.

Artificial Intelligence isn’t always efficient

Most people seem to have this notion that AI is the future of technology when really it isn’t.
It is incredibly good at pattern finding, designing the best place to have an antenna, to play a computer component and understand human language for automatic translation. But most of the time, it just isn’t useful. AI is like any tool in a developers toolbox. And just like a real toolbox, you don’t use a screwdriver to hammer a nail into the wall, you use a hammer for that.

The truth is people, AI is exciting, and whilst those robots look scarily clever, they are programmed for that, and unless the programmer is wanting to kill people, your AI controlled automatic vacuum will not try and kill you.
If in the future robots kill people, arrest the programmer, not the robots.

Hello all,

It’s been a while since I’ve last posted anything on my blog, and for that I apologize.

Having gained new employment as a software developer and being approached by Google, I have been extremely busy.

However, in order to give back to the community, I plan to release some code and teach you all how to build virtually anything in Python.
I will be using PyQt as it is extremely rich, easy enough to pick up, and if done right, you can have applications that will run on Windows too.
Obviously you wouldn’t want all your potential customers to have to download Qt and Python in order to get it to run, so I will also show you how to bundle your software up, ready to be installed and used.

So that’s what’s coming up,

Have a great afternoon!

Happy Holidays!

Well it’s that time of year again, when we all sit around unwrapping those presents.
Now I would have said Happy Christmas but, for some it’s Hannukah.

I just want to thank you all for your great support over the past year and I want to wish you all great holidays and that it might bring you all everything you wanted.