Archive by Author | DanTonyBrown

Dollar IDE Screenshots

I realised today that I never got round to posting any screenshots of Dollar IDE, the PHP Integrated Development Environment I made for my Final Year Project at The University of Hull, once I’d finished developing the feature complete version for submission. This meant I couldn’t show it to anyone when I was talking about it, so I’ve posted some below.

Dollar IDE Start Screen

Dollar IDE Start Screen

This is the first screen a user sees when opening the Application. They can create a new project or open one from a git repository or the local computer — a recent project list makes it easy to get back into a project you’ve been working on.

When making a new project inputs such as “Project Name” and “Save Location” are validated as-you-type so a user always knows how to resolve any problems (e.g. invalid characters or selected a directory that you don’t have write permissions for).

The “Project Type” drop down allows you to select templates for your project. E.g. A web template which has an index.html and ‘images’, ‘styles’ and ‘js’ folders included. The idea was to allow this to be extended so you that you could select, for example, a CakePHP project type and DollarIDE would download CakePHP and resolve all the dependencies, however this has not yet been implemented.

Dollar IDE Open Project from Github

Dollar IDE Open Project from Github

DollarIDE integrates with any git repository through LibGit2Sharp, but has enhanced integration with Github through their API. When you create a project you can have Dollar IDE automatically make and initialize a repository on Github for you and even set if you want it to be public or private. In the above screenshot you can see how Dollar IDE allows you to log in with you Github credentials (which are stored securely using Windows DPAPI) and then select from a dropdown which repository you wish to open and start editing.

Dollar IDE Syntax Highlighting & Autocomplete

Dollar IDE Syntax Highlighting & Autocomplete

Of course most of a developers time is spent in the code editing window itself. In the screenshot above you can see DollarIDE’s tabs, auto-completion and syntax highlighting.

Dollar IDE Settings

Dollar IDE Settings

Seen as developers spend a lot of time in their IDE I felt it was important to ensure that Dollar IDE could be customized to suit their needs. For example, in the Colour Scheme Settings window shown above the user can change both the accent colours and background colour of Dollar. This includes the obligatory dark theme.

You can also see the project pane on the right hand side of the background window in this screenshot. The project pane allows the developer to manage folders and files, and open them for editing — all from inside the same window as the code itself. Due to PHP often being deployed in a CGI setting, file locations are especially important.

Finally, this screenshot also shows that Dollar IDE currently makes no attempt to syntax highlight HTML, which is a great shame as PHP is often intermixed with HTML. This will be one of the first features I add when I eventually open source the project.


Formal Specification Module Result – 96%

Z Notation PDF Render

The other module I was working on alongside “Topics in Privacy and Security” was “Formal Specification”.

In this module I used Z notation to formally specify a navigation system for Robot Vacuum Cleaners (A bit of a computer science obsession it seems). I then used the technique of promotion to allow for more than 1 robot vacuum cleaner to be in a room and observed some emergent interaction.

Comparison of the two movement algorithms I formally specified.

Comparison of the two movement algorithms I formally specified.

I really enjoyed this module, I like the challenge of working more on a mathematics level rather than a programming level — you have to work with different ‘data structures’ and work with different operators and structures of notation.

I would recommend for anyone to look in Z as it really makes you think about methods and functons in a different way. In terms of pre-conditions (what must be true for the function to start?), post-conditions (what must be true at the end of the function?) and invariants (what must always hold true?). It strikes me as a very good way to think about testing programs, even if you don’t formally specify them before producing them.

A visualisation of some of the emergent behaviour that happened with two robots -- one robot could effectively trap the other in the middle of the room.

A visualisation of some of the emergent behaviour that happened with two robots — one robot could effectively trap the other in the middle of the room.

Formal specification is probably a bit over the top for most software engineering projects, but if I were to ever work on a Planes autopilot system, or a system which moved the control rods in a Nuclear Power Station, I’d want to know formal specification had taken place. So it’s a useful skill to have learnt. It was also a nice refresh on discrete mathematics.


Topics in Privacy and Security Module Result – 77%

Interactive GUI for Reputation Attack Effect Calculator

Last week was a hectic one. I had a coursework deadline for my Adaptive Learning Agent Systems module, and a exam for Static Analysis and Verification. Amongst all the work I received my results for my Topics in Privacy and Security Module.

The module was assessed by a 100% weighted coursework for which the aim was to develop both a security risk management strategy for a telehealth company and develop some software to determine the best reputation metric for a star-rating system for e-commerce websites to reduce the effect of self-promoting and slandering attacks at different scales.

For the security risk management strategy the ISO/IEC 27002 and ISO/IEC 27005 standards were followed. Assets, user roles, system boundaries and businesses processes were identified, possible violations were considered, threat agents and paths were analysed and critical analysis of which risks had to be managed and which controls to use to mitigate their risks took place.

Identifying Assets can be a Long Process

Identifying Assets can be a Long Process

I used the programming portion of the coursework as an opportunity to learn cross-platform GUI development in Java, using JavaFX. As of the time of writing JavaFX still doesn’t support simple dialog boxes without a host of libraries… which made it interesting. However, it was quite impressive to see ‘write once (carefully), run anywhere (conditionally)’ work in action. I also used it as a chance to try out a form of more modular development, in which all of my business logic was in a library which any GUI could tap into, whether that be a Java Servlet, JavaFX or Command Line program. For the coursework I developed both the aforementioned GUI and a simple Terminal Interface, both running on the same shared .jar library.

Command Line Interface to the Reputation Attack Effect Calculator

Command Line Interface to the Reputation Attack Effect Calculator

Thankfully, now that this week is over, so is the taught portion of my masters degree. For the next 4 months I will be working on my research project, which will be discussed in a future blog post.


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. – 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, is still on track to be released soon. You can aid in the development of the system here:




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 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.


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.


Introducing 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

People who have been reading this blog for a few years will have seen 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 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.



Get every new post delivered to your Inbox.

Join 196 other followers

%d bloggers like this: