Bloat.

Bloat

At least two lunchtimes this week, I have found myself in staunch debate with two of my work colleagues about a certain topic. I was reading the comment discussion on Hacker news on the Favourite Programming Poll and this again re-echoed a lot of the arguments with which I had vehemently disagreed with. The issue is IDE vs no IDE. Its age old, its open to all forms of flame war and trolling, indeed from both sides if not particularly from the no-IDE side.

The deafening sentiment of the majority on the comments which I have linked above chose C# as their favourite language. My problem is not with C sharp, its clearly a very good language, and although I have my problems with some aspects of it, mostly the lack of cross-platform native support. What I found most astounding that failing only a few who complemented its style and how it worked for them, the majority of people cited Visual Studio as the reason they love C#.

This brings me squarely onto the debate. I want to have on record why I work the way I work. We hear a lot of analogies about a workman and his tools, for me I think a programmers tools importance can not be understated and should be something they are proud and most of all happy to work with. With the correct tool, a problem can become trivial, but the same problem faced with the wrong tooling can become a nightmare. We see it very easily with certain algorithms that one algorithm will not terminate within ones lifetime, while the others can finish before we can even say the first letter of the algorithms name. For this reason, I think its important to be passionate about what you use, and have clear reasons in your mind why you use what you use.

My environment

Firstly, I'll discuss my preferences, what I like, what I would like and hopefully through this you can see some merits in the way I work. I am a programmer by trade, I deal with code almost all my working day. Right now, my job has me working with predominately python development, but my work-flow since I have had a job has been largely the same. In the back of my head, I can hear the comments that a different language should require different tooling. I disagree.

My work station is predominantly Linux, to the point (rather foolishly maybe) where I don't have access to Windows on any of my own machines. I have been using Linux as my main desktop for around 4 years now, and 6 months previous to that I played around with some other distributions on virtual machines. Damn Small Linux as far as I recall, because my Internet speeds weren't fast enough to download any bigger distribution.

Linux has its faults, my days as a zealot who denied these are beyond me, I now am enraged when I plug in a VGA/HDMI and it doesn't at least try to show something on the external screen. I don't like that multiple desktops can still cause a problem, and its also not a full solution for normal computer users who I find more and more rely on things like iPhones actually being able to sync without issue.

There is simply no substitute for Linux for me, Windows does the same things, but it doesn't feel the same. It feels laboured, it feels tacked on. I cannot work, or even leisurely use my computer without it. I would put forward to any developer that unless you are programming Microsoft specific code, you should be using Linux as some part of your working life. Whether it be on the server side, desktop or even buy yourself a cloud instance on amazon(first 12 months is free) and play around. There is plenty of Linux propaganda for you to read online, so I will not dwell on it, but it is the main component of my development environment, and the control which it gives me over my environment is next to none in my opinion.

As a programmer, my next obvious tooling is my editor. It is something which I am inappropriately passionate about. I use VIM. I use it a lot. I use it for everything (by this I mean for everything edit-based).

The only other real weapon I use is the command line and its assorted utilities. I love ssh, I love screen. Both of which I use every single day.If you are a programmer, how often do you use the command line? I was shocked to read someone in the same Hacker News comments gets through 90% of the time without it. Maybe it is a part of Linux development, but without the command line, I feel bare and completely powerless. There are a small number of areas where perhaps a GUI makes more sense, in terms of user interface, but for most things developer based, having a program as close to the command line as possible is usually a plus. Having something able to run from the command line offers up so many opportunities. Automating regular tasks with little to no extra coding (cron).

Perhaps you have very good reasons, or perhaps you are just new to it, and are not seeing all the excellent configurable power which awaits. If what you say when you see the command line is that it is an outdated piece of computing history which has been replaced by the GUI systems, please dive in, please get your hands dirty with some shell scripting, write some utility scripts. Become a unix hacker for a little while and delight piping ls' into greps into sorts into tr's. Dizzy yourself with page long one liners wrapped up in aliases.

That is it. That is my work environment. Simple, but nail-bitingly powerful.

Let me give you an example of why I love my above configuration. The flexibility is incredible. In work, I have around 3-4 VM's which I regularly have to ssh into and do some coding or administration work. I have a github folder which houses my configuration files. In less than five minutes I have set up my environment (bash and VIM). It is mine, it is how I like it, it has the quirks and the little bits and pieces which aid me every day. Everything is set up, bash behaves like it always does, vim has numbers on automatically as well as all my favourite plugins mapped to the same configuration. Thats from zero to setup in under five minutes on any UNIX machine. And that is just setup advantages.

But why don't I use eclipse for my main development, Am I any worse off? One thing I concede to the IDE is that in order to get VIM to a stage where it does nice things like generate tag lists for you, it can take a while. It takes reading or knowing someone who uses VIM. Having invested that time, to initially set it up, you get it on every machine you want, and also you get it personalised to you, the way you like it. A lot of articles cite this long learning phase which is involved with VIM, but for the most part I don't think this is an issue. For basic editing, you only need to know about modal editing and how to enter and exit insert mode. Remember this is the means by which you accomplish your work, if it means some time investment for a better experience that is worth it.

Another major win for me is that I have a lot of the "intelligent" aspects IDE's such as eclipse offer without the bloat. Vim starts up in an incomprehensible time. Eclipse last week started up in over a minute for me (That was the best, not the average start up time), It then tried to load a "project" for me, subsequently crashed my computer and had to restart. Many people think this is a non-issue as they leave eclipse open, let me say why I think having an editor which can open files in the blink of an eye is a good thing. Lately, I wanted to open all the files in a directory which contained a certain word or phrase.

vim -p `grep -rl "<some phrase>" ./`

Simple, but I would say quite elegant. I would like to note also that this is as much the zen of grep as it is of VIM, but the idea of UNIX as the IDE coming to the fore. There is an excellent series on this very topic can be found here.

Moving swiftly onto my next issue with IDE's, Code generation. With the exception of language to language compilation code generation, my views on mass code generation are largely negative. I watched a video about removing unnecessary classes recently which can be found here. In the video, the point is made that if we want to be sure about the external libraries which we use, we need to have read and understood their code. Although perhaps this is not practical, I think it definitely stands through for the case of code that is supposed to be apart of your code bundle. If you must generate code, read it, understand it, make sure its not doing anything evil.

IDE's encourage code generation for everything. They will happily spit boilerplate code at you until the cows come home. This leads to badly understood code by its own developers and developers who have effectively just patched loads of boilerplate together. While not always true, this technique will cause far less efficient performance. Many peoples arguments to this would be that this cuts development time drastically. I agree, in the short-term yes, What about when that development move on to "better" things, and some poor developers are left to maintain this structure. With hundreds of lines of code, the ability of a developer to understand fully even one particular section is highly unlikely. VIM discourages code generation, although I have used template plugins for generating HTML boilerplate or even some small things in certain files, hash bangs in python.

This week, I discovered there are GUI's for rest web api's where you point and click what you want and its all just generated. PLEASE NO. Write your own api's, use Ruby on Rails, Django, NodeJS & Express, use raw sockets for all I care, but please do not generate the majority of the workings of your api. You are a programmer, write your own code.

The other thing I hear constantly when this debate rages, Vim cannot autocomplete anything. This is wrong. By default, Vim (From version 7 onwards) offers autocompletition on words in the buffer, It also offers line auto-completion. These are incredible and a thing I use not only hourly when I'm developing but minutely. It is possible to get some form of "IntelliSense" which seems to be the key highlight for so many IDE's but again I have huge problems with this. If you are in the position where you are scrolling through options and auto-completing away your program, you are in the wrong place.

I think IDE's which feature such autocompletion actively encourage poor programming and poor style. If you are scrolling through object methods looking for one which "fits", you are doing something wrong, sit back, get a coffee and work out the best solution. In the comments that I mentioned above, someone put it beautifully, "I rue the day when you could say I built this project from a blank file". Vim encourages this, IDE's go out of their way to discourage this. This sort of mentality, although not fully possible for some projects, in my opinion, encourages good coding.

Written from vim, using markdown.

Functions in Javascript - Javascript Week Off

JavaScript – A language of first-class functions

After a summer of working with a technology, I felt that its important that I try to really fine-tune the knowledge of the language which I have worked with almost exclusively. A language that previous to the summer, I looked on with apprehension, more with a feeling that its power was limited due to the fact that it lived primarily in the browser, and my lack of experience with the language on platforms such as NodeJS was non-existent apart from a hello world http server.

The problem with JavaScript and ultimately why so many people dismiss it as a bit part language is because they know it only from snippets such as:

var x = document.getElementById("form_one_id").val();

The reason why this looks so disgusting and unusable is because its usually crammed in a html file, amongst other markup.

Powerful

JavaScript is a powerful and versatile language, although so often its main use is manipulation of the DOM (which by the way is an awful structure), its better to look at the things it has to its advantage.

  1. In certain environments such as the web browser, the javascript execution model is based around handling events.
  2. You can write it in many ways, classical, functional or a mixture.
  3. It is ubiquitous, any computer which has a web browser has an JavaScript interpreter installed.
  4. Once you learn its quirks (and it has plenty) you can be very expressive and elegant in what you write
  5. With technologies such as Ryan Dahl’s NodeJs JavaScript is a rising technology
  6. Many new interfaces are putting JavaScript as first class citizens, Windows 8 and Gnome 3 both have JavaScript interfaces to their products.

Functions in first class

For this blog post, I hope to go into some of the basics of JavaScript functions, the things I write here are almost entirely inspired and researched from Douglas Crockford’s excellent video series on Javascript, which I recommend you watch now.

The first thing to notice about functions in javascript is that they are objects, they can be passed around the same as strings, integers or in fact any other type of object can. This is very powerful, consider the following code which is possible (and quite common in normal JavaScript code)

function doSomethingWhen(seconds, func) {
    var ms = seconds * 1000;
    setTimeout( func, ms);
};
function sayHello() {
    console.log("Hello World");
};
doSomethingWhen(5, sayHello);

This bit of code here shows how a standard callback system can be set up, it loads in a function as the second argument (this is just the function it is not the result of the function and then sets a timeout for the set amount of seconds and executes the function after that. The setTimeout is a classic example of JavaScript’s non-blocking code execution, using the event loop it will wake up after the given seconds and execute the function while any code after will be executed in the mean time.

Concept of function scope vs block scope

In JavaScript, there is no concept of block scope, i.e loops such as for loops or if loops don’t get their own scope of variables. There is a concept of variable hoisting, any var declarations in a JavaScript function are hoisted to the top of a function, I’ll give you an example now of how this can affect a programmer used to block scope in other languages.

note: Less than must be replaced by the normal sign, but due to a error in posterous markdown I’ve had to do it this way. Apologies.

Taken from Crockford Lecture “function the ultimate”

function assure_positive(matrix, n) {
  for(var i=0;i less than n;i+=1){
    var row = matrix[i];
    for(var i=0;i less than row.length;i++) {
       console.log(i);
       if(row[i] less than 0)
          throw new SomeError("Ugh");
    }
  }
}

This function assumes that the block scope of the first for loop will preserve the i variable and another local i can be created in the nested for loop. In reality this function is interpreted as follows by javascript:

function assure_postive(matrix, n) {
   var row = undefined,
        i = undefined;
   for(i=0;i less than n;i+=1){
    row = matrix[i];
    for(i=0;i less than row.length;i++) {
       console.log(i);
       if(row[i] less than 0)
          throw new SomeError("Ugh");
    }
  }
}

From this we can see, that the I variables are both the same variable so running this function will lead to a function with indeterminable execution (most likely an infinite loop).

What parameters does each function receive

Each function gets with it the following

  1. arguments – this is an array like structure which holds the parameters provided by the function invocation.
  2. this – a pointer to the object which the function is referring to

arguments

An array like object ( be very careful with this ), that holds the functions arguments as passed by the function invocation. It is not a real array, and depending on the JavaScript standard which your interpreter adheres to, it may not have all the array prototypes or perhaps none of them.

  • In ECMAScript 3, this array doesn’t have the array’s reduce and forEach methods which can come in handy
  • In ECMAScript 5, these were added so that the arguments can be reduced like a normal array.

Its best to treat the array like a read only array, as functions such as splicing or rearranging can have adverse affects on the object and can do things that aren’t standard for an array object.

Note: In Node, it runs officially on ECMA 3, although many of the ECMA 5 functions are usable, this is more of a V8 issue I imagine but please look at this thread for more details

this

So the this parameter is quite a complex one, and is also one that causes a lot of pain in many javascript circles, not the parameter itself but more the implementation of it in ECMA 3. We will go into this more in another section of this post.

The this is the object which the function is working on. The this is pivotal to key inheritance in javascript as the this parameter allows a function to modify the object it is meant to be working on. Again there will be more examples of this in the next section.

Function Invocation

In JavaScript, there are four ways to call a function, 1. Calling the function name of an object 2. Calling the function 3. Using the new parameter 4. Using the apply form

Calling the function

Lets define a function sum which takes two parameters,

function sum(a, b) {
  return a + b;
}

To call this simple function we do a normal function invocation as follows:

var result = sum(2,3);

Invoking a function using the new operator

Lets say we want a classical object oriented cat object, it needs a name and it needs a function which says its name.

function Cat( name ) {
  this.name = name;

  this.sayName = function() {
    console.log(this.name);
  }
}

To create an instance of this Cat, we use the new operator, this creates a new instance of the function and sets the this parameter to that new instance, if no implicit return is found, it returns the this, creating a new Cat Object.

var cat = new Cat("rover");

The new variable will now be able to access the object Cat’s functions (sayName) as well as all the normal Object objects methods (these are default for every object)

Calling an objects function

Now leading on from that example we can get our cat to say its name.

cat.sayName();

the sayName function which is a part of the Cat Object is called using the classic dot notation seen in a lot of other languages.

Calling a function using apply and call

Javascript provides two functions which are called apply and call, these allow us to explicitly set the values of this and arguments.

lets define another sayName function outside the Cat creator function.

var sayName2 = function() {
   console.log(this.name);
};

to call this function on our cat Rover, we do the following:

sayName2.apply(cat)

The arguments variable was left blank in this case as no arguments were required.

More to come

Hopefully, this short post on functions opens your eyes to a little of the magic that is held behind this language, and believe me we are only tipping the iceberg of possibilities here, we also have massive area’s such as closures, returning functions, arrays of functions, hashes of functions and a lot more.

I’m only learning, so if I’ve made a mistake in this post please let me know either in the comments section or by email richdel@gmail.com

Programming Selfishly

I read an interesting article lately about the importance of taking different approaches to the style in which you program,

You'll find the article here: http://jameso.be/2011/08/19/coding-backwards.html

Although the article is about writing the code that will use the API first and then the API, it all leads back to how one approaches the actual problem.
Something I have learned recently is the different ways to approach a problem, it may seem shocking that its taken ~ 3 years of solid programming before this penny finally dropped, but I'm talking about the actual pattern of my programming and the mentality which I approach the problem. 

For instance, for a long while, I tried too hard to write an entire section of the program and test it, this is too easy a trap to fall into, you start writing a program thinking you have all the edge cases considered and instead of breaking the program down into separate pieces which are much easy to reason and test. Its a little how when one starts to code, the advantage of subroutines, functions or whatever one wants to call reusable code, is hard to comprehend, but now the opposite is the case (often I over separate things).

I often approach things as too single minded, make it work for a limited number of test cases and assume this is enough, as it works for my application, but it means code reuse is often very difficult or impossible. I have started to write code which is more easily testable, which rather than a convoluted mess of functions, objects and whatever other data structures are needed are replaced by a more generic set of tools, which do one thing well. 

The Unix Philosophy, is sort of what I'm getting at.

To the seasoned programmer, this is common knowledge, and its quite easy to live to this standard if coding with other people, but I'm currently working on quite a significant work, i.e all summer long, and I notice that the code which has remained is the one that is most adaptable. 

When answering to no one, no code reviews and the only demonstrations being the actual live running code, its easy for the code and its structure to become sloppy.

Things like testing, generic functions and code reuse is area's which don't lend themselves easier to my old code, but now as the next stage of my project, I'm designing a node js server to track the buses, I am trying to bring these elements into my design, and although it takes a fraction more time at development, things like testing 

Phase 1 Completed

I'm 13 working days into my summer internship, and for all intents and purposes completed stage 1 of my project.

I thought I would just write down (for my own benefit) some of the technologies and learning that I have encountered thus far:

Proxies are a pain

Notorious as it is, the Trinity College proxy only gets exponentially worse when you start to develop within the college network, this came up in almost every aspect of the project. Firstly, its important to note that on a Linux box your first steps should really be:

  1. export http_proxy="http://<username>:<password>@proxyA.tcd.ie:8080/"
This sets up that bash prompt for internet service although you might consider adding that to your .bashrc file for a more permanent solution.

I work with Ubuntu 10.04 LTS as my development platform, but this applies for any Debian based machine, particularly with a recent version of apt-get. Apt-get does not detect that proxy and requires further configuration to have any joy at all.

  1. sudo echo "Acquire::http::proxy 'http://<username>:<password>@proxyA.tcd.ie:8080/';" >> /etc/apt/apt.conf.d/proxy
Further woe's with the proxy came about when I began to work with the Android SDK, in order to basically start any development, the SDK among other things need to downloaded through an Android SDK and AVD manager.

Its worth nothing that after much effort, and very little progress I eventually went with a squid proxy, (sudo apt-get install squid), 

Edit the squid configuration file located (for me) at /etc/squid/squid.conf

cache_peer proxyA.tcd.ie parent 8080 0 no-query default login=<username>:<password>
never_direct allow all

This will then have a basic HTTP proxy (no authentication) running on 127.0.0.1 (localhost) and port 3128.

The vast majority of programs which need to connect to the Internet will support this level of HTTP proxy, but the results are still incredibly varied at times.

Google and their Wonderful API's

This could be a jump of the gun, but the Google maps API is one of the greatest things I've worked with, a highly intuitive JavaScript system where everything I thought of was provided as standard meant I had a working system and prototype up with minimum fuss or effort.

Things I needed like markers and polygon's were provided so easily, and the access to coordinates as well as plain text geocoding of addresses to coordinates really made the initial prototyping stage of this project an ease to work with.

The docs are elegant although the API's are so easy to use, and return such results that docs visits aren't a frequent occurrence. 

JQuery

Just use it, if you are using JavaScript, makes everything so uniform and continually reduces complex 3-4 liners into a simple one liner. A must for any web app.

Android Development and VIM

I may well do a separate article on this top as the week goes on, but I have been developing for android with vim exclusively without the need for eclipse, and retaining the usage of my favorite editor.

Some things of note:
After the initial setup time, this way has proved significantly quicker, both in development time (thanks vim) and in terms of performance, the emulator stays running all the time, and push changes to it, it also allows me to escape the horrific clutches of eclipse and IDE's in general (some day I will be forced to use them).

Architecture Diagrams are something I still don't understand

In the first 2 weeks and a bit, I have done around 4 separate architecture diagrams, and they all seem to be wrong in some way, there doesn't seem to be a standard for what an architecture diagram consists of, but I'm sure I will learn.

That's about all I can think of for now! Its been an interesting few weeks, and phase 2 promises more fun!

What's an App?

I want to discuss the idea of the App, as made popular by the Apple App Store, Every news site I frequent has at least one or two current stories on this new App form factor which we see. Why should we care, is this not just a layer or disguise for the afore used term program?

No I argue, because now "App" as an idea, spans from a simple fart app to the aviary image creator. This in a nutshell is what I dislike about this buzzword which has come into existence. The reason I feel, that app's have been so successful is two fold, they have an extremely user friendly delivery system (in most cases), if you look at the app store, the android marketplace and even Google's Webstore (the term Web app is used in this context). Each of these have a very friendly interface, full of screenshots, reviews and shiny install buttons, which make the idea of a one click to being in the app a reality.

I do not argue that this is the best way to deliver applications to an end user, and in my opinion this one click to install now 400,000 applications on apple devices is one major factor in its massive success as a platform. There are a lot of similarities in this and the package managers which have existed in certain operating systems for many years, although maybe not as polished, the various Linux distribution's followed a very similar distribution model. 

My next point is that in design, a lot of applications follow a UNIX philosophy,"Write programs that do one thing and do it well.", This may be a far cry from some apps, but for the apps I see my close friends (the non-technical ones) downloading they do one thing well, for example:

Angry Birds - Addictive Gaming
Twitter App - Portal to twitter and twitter only.
Piano - Gives you a portable piano in which to use.

My problem with all this, as so far the points in which I've described aren't necessarily bad things, I agree with the UNIX philosophy in terms of application design, but my problem lies in the interpretation of the end user of what an app is. I feel that through the world of apps we are limiting our users, instead of full blown applications, we minimize them to an App, everything about it is bite-sized, even the word is an abbreviation of the word application. My worry is that through this ideology what we will effectively get is an experience which is limited to lots of small applications which let people consume rather than create. 

I feel the same properties exist in web apps, but I feel that there is more room for expansion, with an app, from the get go, you are restricted in screen space, you need to present a user with the key information, but the worrying thing for me is what do we see in each demonstration of new UI's, just recently in the windows 8 preview demo's, we seen the new tile format feature apps such as weather and time clock, the full screen "apps" were limited in functionality but the thing that impressed was their integration into the new interface. This limitation in functionality is whats slightly worrying to me. 

There doesn't need to be a solution for this, we have now got a wonderful delivery system across a range of services, so what I would like to see is instead some real apps, apps which are fully implemented and serve a real purpose. I would like to see the "Office" app, I want to be able for people to call everything apps, because what this name space has created is a safety and a quality assurance which the days of "download and click to install EXE" days have long time ago lost.

Collaborating on a Book using Git

Today, I have another usage for git, it may not be new, and may actually be already used, I know I have seen many technical books which are distributed using github and use it as a sort of error correction system. I'm trying to come at it from a slightly different angle.

This will be a rather short blog post as the idea is rather simple for anyone familiar with git.

I propose the usage of git as a open source, collaborative novel/short story creator.
It is exciting, let me first articulate a scenario in which I can try to get across some of the main reasons for my blog post:

Git allows multiple branches, a story with which the first 5-6 chapters are written by a single contributor(Alice), this is the master branch, another contributor lets call her Alice, wants to add her part to the story, she forks the repository and can add what she likes to her local copy of the book. Unless she desires this can be her own private book and no one has to see any changes that she makes. 

What if she adds another 2 chapters to Bob's starting chapters and feels they are of a certain merit to the project. She issues a pull request which bob can review and he either takes the new changes or refuses. The other option is for a new branch to be created with Bob's early chapters and Alice's new chapters while the master repository maintains just Bob's early chapters, he is then free to come along and add some new content which alternates from Alice's storytelling. What we have is alternative story's. We have books which fork into many books.

The possibilities here, I feel are bounded only by my imagination, we have a solution for collaborative books which is made for code, but the principles which stand for code sharing and writing sharing have many intersections. I feel this is a nice area and one which I hope to explore more in the not so distant future. I see a real possibility for scaling to many authors and a way to write a new type of book, a community book one with not a single story but a rich choice of story directions which map onto the git branch structure and allow a reader to choose their book.

So start a new book, and see can we get even a short story completed (at least one branch completed) entirely through git (and I propose github).

3 Weeks or 17 Days

To whom it may concern!

Just completed (Thursday at 11.30 am) 11 exams in 17 days, Thats including weekends, I endured last week, 5 critical exams in 5 days. I'm writing this just as an acknowledgement of the insane schedule that entails, so that maybe next years third year's which I hope will not include me, may enjoy an exam schedule which is logical and fair. Certain things strike me about the hell which me and the other 40 odd people who have pulled together throughout the last 3 weeks to endure 17 of the hardest days in my lifetime.

Exams are difficult, no doubt, I have no problem with the fundamental principles which make examinations what they are, a test of a person's knowledge on a subject and a test of a person's ability to think about the material and reason with it. I'm a firm believer in applying knowledge and not just producing a mental photograph of study notes, but the difference in the tests we had were unheralded in years past, and made the intensity of sitting exams back to back, all the worse.

From Tuesday the 3rd of May Until Thursday 19th May, My life followed the following schedule (as did all the rest of my classmates which I talked to):

  • Get into college as close to 9 o clock as possible(meaning a 7.30 departure + a 1 and a half hour commute)
  • An intense study pattern up until the 2 o clock exam, (with a max of 20 minute break for lunch)
  • Complete a 2 hour exam 
  • Get about an hour break for dinner
  • Study till earliest half 9 latest 12 o clock
  • Make the journey home where I would do some last minute study before sleeping.
  • Rinse Repeat for the next day.
This meant that for the entirety of last week, I was working practically 7 until 11.30, with about hour and a half break. This had its effects, and many of my close classmates complained of vomitting, headaches and various other ailments throughout the week. I myself, was continually exhausted, (grounds nearly for a medical certificate in itself) and way below my potential in terms of examination skill. I also came home most evenings with an intense headache.

All this would have been bad enough, If we had seen examinations which seemed in other years to be almost a standard, subjects whose past papers featured no change suddenly introduced new sections, new marking schemes, complete new questions. After this hectic schedule we would come out of an exam deflated, confident that the work we had done, had either be in vain or at least a lot of what we had expected to come from the test had been replaced by unpredictable alternatives, many with ambiguous wording or a direction which was hard to follow.

It was the first year, where I can remember everyone coming out of one exam or another knowing that they have struggled, the usual first candidates coming out saying it was touch and go whether they passed that exam. I think the manner in which these exams were conducted were unfair particularly considering the results of last year's third year exams and I would greatly appreciate if our exams could be marked and come before the examination board with this very much in the forefront of everyone's mind.

Richy Delaney

 

Duck Duck Go ~ My New Search Engine Experiment

My first item to discuss today is a choice I've made concerning my internet usage, I've moved from Google as my default search engine to Duck Duck Go. 

Why Duck Duck Go?

You can read about their mission goals here http://duckduckgo.com/about.html

  • There is no tracking (They don't track you!)
  • Theres a crazy amount of extra syntax (I'll probably use none of them but I like the idea of being able to do a !cpp for searches related to c plus plus) 
So far two things have come to light about it, any searches I've done have been perfectly answered or as good as I would get on Google, secondly the amount of searches I do is almost non-existent. 

I live in the browser and I have set DuckDuckGo to my default search engine in chrome but I rely so much on the URL bar searching that often if I want something on YouTube I'll do start typing You + <tab> and search like that. I would have thought I was a far more proactive searcher although I would think in the last week that my searching has been far smaller than usual as I've been studying for exams so its likely that my searching was quite minimal relying more heavily on notes.

Its interesting how much I rely on the chrome history utility of the URL bar, very often I'll start typing some keywords and chrome will usually find me what I'm looking for. Has this replaced my search? Perhaps its replaced some of the easy searches I would have done previously.

I plan to continue my use of DuckDuckGo into the future and see how it handles my day to day web searching.

In other news, I've been offered an internship within my College (Trinity College Dublin) to do with smart phone development, This is a new direction for me, one in which I can hardly wait to embark on and one which I've been looking to get into for a long time. I think it is a valuable skill, particularly in the current climate and I look forward to it, thats really the only details I have now, but hope to share some of my experiences with it during the summer pending my exam results :)

Short Term Regurgitation

A short morning blog post while drinking my coffee, 

I want to discuss the illogical system through which I've passed, or am currently passing, I enjoyed an article recently which talked with Steve Wozniak, and his take on schooling and the pitfalls of the current system. Next year, I will have to do a final year project on a subject of my choosing, and it seems to me that the logical choice is to make a difference in the area which will make the most difference.

The country in which this article refers to is Ireland, as my travelling has not brought me far outside the island in which I live, ultimately, I have a number of issues with the system. I am passionate about students who not necessarily follow a system but through their own eccentricity, a new intelligence comes out. I have a great interest in encouraging genius, but an even greater interest encouraging unaccepted genius. 

As a training computer scientist, one who works most of the year doing his own thing, while trying to pass the course at the same time so that I can qualify with more than a piece of paper, I will take the example of a prodigy computer scientist in Ireland.

Given the system we have in place, how does one become a computer scientist in Ireland?

For me, a general interest in all things computing, gave away to programming in BASIC, which made me go against a college course in accounting and going for a computer science degree. It was due to my shepherded education that the meaning of Boolean algebra were lost on me for a long time, the wonders of programming even took me a while to get my head around concepts. I am lucky that I purposed to do a subject that I knew I would love, that when it came to exam time that although studying would never be exciting, the things that I would learn would be things that I would have an interest in, and not simply be regurgitation for an exam. What if someone else wasn't so lucky? What if they miss the job which will make them make the difference.

I call for a different academic structure, of course we need to have the core subjects taught, how else can we read, write if not taught the basics, but as Woz would suggest how about practical work. Cramming late nights for subjects which as soon as the pen drops on the exam paper, so too does the knowledge out of short term memory, is not learning. Lets conform to a new standard, a daring practical en devour through which the level of pure theory is dropped. I call for Maths to be Applied Maths, I call for IT to not be a class about Excel and PowerPoint, but rather a exploration of a programming environment. I call for encouraging students to pick a path in which they can achieve excellency. Academically, the world can only benefit from giving the students a free role in which to create and innovate in.

There are counter arguments, constant tutorial's would lead to a much more intense correction scheme from teachers, I say that the effort spent teaching me Irish for 13 years and me still being far from a fluent speaker could be better vested in a practical deep knowledge of useful applied subjects which I can attack the real world with.

About