Archive by Author | DanTonyBrown

A Reading List

One of the things I’ve always tried to do is learn stuff outside of my university studies. Its nice to have a multitude of views about any given subject, from different people with different experience. Besides, university isn’t there to teach you everything you need to know — just to give you a very good foundation from which to progress.

I thought it might be a nice idea to note down what I’ve been reading recently, mainly so that I can refer back to it later, but also because it might be of use to someone else.

  1. Coding Horror – Lots of opinions and strategies for dealing with User Experience
  2. The Joel Test – List of things your Software Projects should be aiming to utilise by a former Excel Developer
  3. Slashdot – A website which aggregates general tech news
  4. Daring Fireball - Tech opinions from the guy who *invented* Markdown
  5. dev.ghost.org – Notes and information about the development of the Ghost blogging platform, especially interesting if you’re using that system, but also interesting for insight into how modern open-source development works.

As you can see its not a huge list, but I think its full of interesting opinions and news. If you have any publications you think your fellow computer scientists should be reading feel free to comment below.

One of the things I noticed whilst writing this list is how much I am missing reading HullCompSciBlogs. Don’t worry, CSBlogs.com is still on track to be released soon. You can aid in the development of the system here: https://github.com/csblogs/

Danny

HackTrain

HackTrain

This weekend I was lucky enough to be part of The HackTrain.

HackTrain is the first ever train hackathon in Europe targeted to #HackTheRails! An unforgettable experience where 40 of the best developers from all around Europe will revolutionize the world! Jump on board the HackTrain for a once in a lifetime journey, travel to the top tech spaces in the UK, hang out with the market makers in the Startup ecosystem, and create startups that will revolutionize the world!

The journey started out in London where National Rail Enquires, The Association of Train Operating Companies, East Midlands Trains and Virgin Trains East Coast all gave talks about their technology stacks, public APIs they had made available and challenges with technology they were trying to overcome. The sponsors for the event, including financial computing company Bloomberg also spoke about their APIs and what they do.

The first train we got took us from London St. Pancras to Sheffield via the Midland Mainline. During this time we had icebreaker sessions to get to know our fellow hackers, including having to come up with a pitch for a company whose name was an amalgamation of two random words. My team got Snickers Jacuzzi, so we pitched an idea for advertising jacuzzis on the inside of Snickers wrappers. Mad, I know.

Once we arrived in Sheffield we went to Electric Works — an office full of tech startups and home to Europe’s largest indoor slide — this was where each of the 40 participants who wanted to could pitch an idea. I decided to pitch the idea of an application which could dynamically work out any delays happening in real-time to your train (or any subsequent trains in your journey) and alert anyone who might be affected by this, for example a parent picking you up from the train station or anyone subscribed to attend an event on your Google Calendar. In this example it could also inform said parent what time they would have to leave their current location to pick up their child on time. Once everyone had pitched their ideas each of the participants voted for which projects they felt should be worked on. 11 out of 40 people voted for my idea, and so I was able to attempt to form a team to develop it.

However, due to weird team sizes my team had to merge with another team. This was a blessing in disguise as they were nice people to work with, however it meant that only one of our projects could be worked on. I suggested we worked democratically and put it to a vote of the 5 members of the new team and it was decided that we would work on the other idea.

The idea the team I was in developed over the course of the following 48 hours was called Icebreaker. Icebreaker aimed to solve the problem of boredom on long train journeys by matching you up with people on the train who were interested in talking and making friends. People would be allocated travel partners based on their interests and likes on Facebook. You can watch a truly horrifying video of an advert we produced showing how the system works below:

The workflow can be explained as follows:

  • Buy a ticket from TheTrainLine.com or similar
  • They redirect you to Icebreaker
  • If you want to talk, enter your mobile phone number and log in with Facebook. If not, close the tab.
  • Do nothing more, we handle all the hard work!
  • 10 minutes before you get on your train we’ll tell you who you’re matched with. If you still want to meet someone reply ‘yes’. If you’re not in a good mood that day or otherwise don’t want to meet reply ‘no’ or don’t reply!
  • If both people reply with ‘yes’ within 10 minutes, a location is selected for them to meet on board, and some unreserved seats where they could possibly sit together are suggested.

Whilst we were developing the system we were lucky enough to visit the National Railway Museum in York and Tech Cube in Edinburgh. A highlight of the journey for me was going over the Royal Border Bridge (aka the Berwick-upon-Tweed Viaduct).

The Final Judging of the competition happened in the National Railway Museum at York (nice and close to home ;)). Unfortunately our team wasn’t to win anything this time, however I can say I learnt a lot from the experience and made some wonderful connections with people in my industry and that of the train industry. I particularly learnt quite a lot about the Facebook and Twilio API’s, how to develop a business plan in a short period of time, how not to act on video and how important consumer validation is to an idea.

I’d like to take this time to thank the organisers, sponsors and judges of the HackTrain as well as my fellow participants who made it a weekend to remember.

Danny

Constraint Programming Module Result – 80%

MiniZinc code in the MiniZinc IDE on Mac OS X

One of the more challenging modules I’ve taken at York is Constraint Programming. It’s was an interesting module to take because it was much more mathematical than other things I have done before, and also because it introduced an entirely new way to think about programming and problem solving in general.

Most of the programming I have done has been procedural or, in other words, telling the computer how to solve a problem. Constraint Programming on the other hand allows you to specify a problem through constraints and then ask a finite domain solver to solve it.

Important elements of the process that we covered were: Developing an abstract syntax of a problem; converting from an abstract syntax to a concrete syntax (The constraint programming language MinZinc); symmetry breaking, implied and dominance constraints, and configuring search through the problem space.

The complete process came together in the 100% weighted coursework, in which we developed a solution to determine the minimum number of sheets, of a given size, required to satisfy a given demand for certain sizes of ply wood.

I was given a grade of 80% for the coursework, which I was happy with :) This now means that I have all of my grades for the first half of the taught part of my course:

  • Model-Driven Engineering: 80%
  • Concurrent and Real-Time Programming: 99%
  • Evolutionary Computation: 80%
  • Constraint Programming 80%
  • Average: 84.75%

This means that now, short of an absolute disaster, I should achieve an overall mark of distinction in the taught part of the degree.   :-) However, there is no rest for the wicked and I am already around half way through the coursework for my Formal Specification and Topics in Privacy and Security modules.

Danny

Introducing CSBlogs.com

CSBlogs.com Homepage

Between studying hard for my masters degree — and applying for jobs for when it ends — I have managed to find some time to set up a new website called CSBlogs.com

People who have been reading this blog for a few years will have seen HullCompSciBlogs.com mentioned a few times, for those that haven’t it was a service which aggregated all of the blog feeds of computer science students at the University of Hull.

John Van Rij did a great job of keeping that service online, but unfortunately doesn’t have time to maintain it anymore. Since the service went down I have grown to miss it — I guess I didn’t realise how much enjoyment I get from seeing how well everyone is doing from back in Hull — current students, alumni and even lecturers.

In order to resolve this problem I set up CSBlogs.com with the aim of getting all of the Hull Computer Science bloggers and others from around the country onboard.

The project is entirely open source, under the MIT license, and can be forked, modified and improved by the community on Github.

The website itself is hosted on Microsoft Azure and utilises CloudFlare to provide security, analytics and a global content delivery network. Node.js is used as the backend programming language and the MongoDB NoSQL database is used for persistent data storage. Nodes packages are used extensively, including Express.js for routing, Handlebars for data-binding to the front end and LESS-Middleware to improve CSS development.

Complicated acronyms aside I have worked hard to make setting up a local development environment and contributing source as easy as possible for beginners via the instructions I have written on the homepage of the Github repository. I would really recommend any 1st or 2nd year students give it a go — open source development looks great on your CV! And if you need any help contact me as per the instructions.

We are currently in the process of setting up all of the required frameworks and technologies and writing guides for how to get involved (this has actually been one of the more challenging and interesting parts of the project so far) and hope to have a working minimum viable product in the next week.

At this point I would like to thank Charlotte Godley, Alex Pringle & Rob Crocombe for their extensive help in getting the project to where it is now. Charlotte has taken on a role of project management, Alex has developed a rudimentary database controller and Rob has been working on implementing less.js support and developing a theme for the site.

I will keep the blog updated with progress on the project.

Danny

EVCO – Evolutionary Computation Coursework and Module Result – 80%

Robocode

The Evolutionary Computation module I took in my first term of this year was assessed through one piece of coursework worth 100% of the module.

In this coursework we had to design an evolutionary algorithm to produce tanks for a tank battle game called Robocode. The algorithms we designed were judged on their ability to produce tanks which were robust against a diverse range of other tanks — in other words their ability to solve a multi-objective problem evolutionarily.

Many forms of evolutionary algorithm could have been used to develop these tanks, however because all tanks in Robocode are compiled Java classes I decided to use a Grammatical Evolution algorithm. As well as the standard GE algorithm I also produced a coevolutionary algorithm which employed grammatical evolution.

I found the real skill in evolutionary computation was working out which parameters to use in such an algorithm (e.g. What population size, how often should mutation of a gene take place on average, which breeding method should be used, how many codons of genes should there be), and developing a BNF grammar that wouldn’t result in too much recursion and therefore invalid tanks once you ran out of genes to generate code which got you out of the recursion, but was still useful.

The coursework was marked based on the report we produced explaining our decision making processes, analysing our algorithms and using statistical methods to evaluate our algorithms and tanks. By the time I was finished I had written 15 pages and had a further 25 pages of appendices.

Overall I found the coursework quite enjoyable, and the best tank I produced was quite amusing to watch as it flailed around the screen constantly rotating its turret and shooting at any enemy it could find.

I’m happy to say that I found out last week that I achieved a grade of 80% for the coursework, and therefore for the module overall. This keeps me on track for the Distinction I so badly want in the degree overall.

Danny

5 cool reasons to use LaTeX

TexPad on OSX

One of the differences between undergraduate level study and masters level study is the amount of report writing you do. I can only think of two times in my bachelors degree that I wrote a significantly sized report — and one of those was my dissertation. So far in my MSc I am yet to have handed in a coursework without a report.

During he early stages of my third year I discovered a tool (language?) called \LaTeX, however it would be yet another thing to learn alongside my 4 large modules and everything I needed to learn to do my dissertation, so I gave it a miss. This year I decided I would finally give it a go, see what all the fuss was about and see whether it could really replace a Microsoft Word shaped hole in my life.

It did. LaTeX offers a lot of advantages over Microsoft Word, LibreOffice and many other Word Processors, some of the more interesting ones I’ll talk about here. (Note: this isn’t a tutorial, just some observations — so if you don’t know anything about LaTeX I recommend you look it up online first)

1 – Better Source Control

\LaTeX produces full PDF output, including tables images and other complex objects, from declarations made in plain text. If you’re not quite sure how to think about \LaTeX sometimes it’s best to think of it like a Markup language — such as HTML — in which you tell it what you want in plain text and it creates the graphical representation.

Git Diff of LaTeX

Git Diff of LaTeX

Because all of the declarations are in plain text it makes source control really easy. Above you can see an image of a git diff in the Github application on OS X. Showing the difference between binary (.doc) word files is impossible, showing differences between Open Office XML files is difficult to decipher at best.

2 – Include code and automatically Syntax Highlight it

Using the listings package you can pull it code from other files on your system and automatically syntax highlight it using colours of your choice. No more copy and pasting code into your report over and over when you make changes.

First use the listings package, and load the programming language(s) you would like to include in your document. Optionally include the XColour package for some more interesting colours to use to syntax highlight your code.

% In your preamble
\usepackage{listings}
\usepackage[usenames,dvipsnames]{xcolor}
\lstloadlanguages{Ruby}

Then set up the colours you want keywords, comments and strings etc to appear as, as well as some basic settings such as line wrapping. You can redefine these at any point in your document if you need to change the colours for different bits of code for any reason:

\lstset{%
basicstyle=\ttfamily\color{black},
commentstyle = \ttfamily\color{Gray},
keywordstyle=\ttfamily\color{CornflowerBlue},
stringstyle=\color{SeaGreen},
identifierstyle=\color{Mahogany},
showstringspaces=false,
breaklines=true}

Now you can just include any code files…

\lstinputlisting[language=Ruby]{path/to/code.rb}

or any inline code snippets you like

\begin[language=Java]{lstlisting}
//This is a comment in Java
System.out.println("I love printing to stdio");
\end{lstlisting}

I personally prefer to include from files, so that I can edit the code that is being displayed in my preferred editor for that language. Additionally, if you are required to dump all of your source code in a report, as was required of me recently, this is a nice way to ensure any updates to that source code are displayed in your final document without any work on your behalf.

3 – Run a Script from inside your documents

If you run a Unix-like operating system with a bash shall, such as Linux or OS X, then you can compile your \LaTeX documents with the --shell-escape flag which allows you to embed bash scripts inside your document that get run when the document gets compiled.

I recently used this to run a bash script which counted the number of words inside the document that was being compiled, meaning I could have an always accurate word count printed inside the document. Handy.

I could also envisage this being useful to generate pretty PDF reports of services on a server or other systems. An guide on how to achieve something like this is available at CTAN.

4 – Easily cite other peoples work and change reference style

Using the Bibtex bibliography subsystem for \LaTeX you can write your references in a simple, almost JSON like, syntax — as shown below:

@online
{
	demes,
	author = {Vesselin K. Vassilev and Julian F. Miller and Terence C. Fogarty},
	title = {The Evolution of Computation in Co-evolving Demes of Non-uniform Cellular Automata for Global Synchronisation},
	year = 2007,
	url = {http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.33.9467&rep=rep1&type=ps},
	urldate = {2015-01-25}
}

When you come to cite this article in the body of your document you can just write \cite{demes} and it will print out the correct citation style as specified in your documents preamble, and print the full information about the article in the correct style in your bibliography. At York we use the IEEE citation system, and so the above is output like so:

Inline citation IEEE

Inline citation IEEE

Bibliography IEEE

Bibliography IEEE

However, if I change this one line in my preamble from:

\usepackage[backend=biber, style=harvard]{biblatex}

to

\usepackage[backend=biber, style=authoryear-ibid]{biblatex}

Then my references and citations show up in the Harvard style, as I used in my final year project at Hull. No retyping citations.

Harvard Style Reference

Harvard Style Reference

5 – Write and Read Anywhere

Because the ‘source files’ for \LaTeX are just plain text, and the output files are PDF files everyone, on any operating system, can make changes to and read the output of your documents. No more worrying about what version of word someone has, or whether or not they’ll have Calibri in their font library. Furthermore there is a LaTeX compiler available for almost any machine.

There is an abundance of editors for  \LaTeX including features such as syntax highlighting, autocomplete, automatic packing including and simplification of the PDF generation process. My personal favourite is TexPad.

 

I hope I will have convinced at least a few of you to try out LaTeX when you’re next writing a report for university of work. Let me know how it goes if you do!

Danny

MODE Assessment 2 Coursework Result and Module Result

Part of the Graphical Editor for my MODE Media Library Model

Today I received my grade for the second assessment of the Model-Driven Engineering module. In this open assessment we built on the work we had done in assessment 1 by developing a graphical editor for users of our Media Library model, developing two model-to-model (m2m) transformations, and a model-to-text HTML report transformation.

I’m happy to say that I received a mark of 83% for part two of this module, giving me an overall grade of 80% for MODE.

This grade alongside my 99% for CRTP means I’m currently in a very good position to get a distinction in my masters degree, which has always been the aim.

Due to some mitigating circumstances I am still working on my EVCO and COPR module assessments, and expect to have these finished by the end of this week. I will keep the blog updated with information about them (and hopefully some non-academic blog posts once I get some more free time)

Danny

Follow

Get every new post delivered to your Inbox.

Join 185 other followers

%d bloggers like this: