Sunday 2 December 2012

Test Driven Design and C++

One of my long term projects is to build a simulator for a 6502 custom hardware device that will run on OSX, Windows and Linux.

I have been using Codeblocks and wxWidgets, and was wanting to have the same project be able to compile for all three platforms, ideally on the same machine.

It should be possible, I have successfully compiled under linux for both Windows and Linux on my (sadly departed) Linux laptop (and on a VM on the mac), but needed to compile the OSX version separately on my macBook.  At the moment I'm happy enough with that, but intend to spend a little time seeing if I can get the Windows and Linux versions compiling under OSX too. But not in the immediate future, I currently have too many part finished projects under way.

My aim is to have the cpu libraries working with the tdd structures, so that I know when I manage to break some essential functionality. I am trying to make the difficult decision to either rewrite from scratch, applying some of the design patterns that I've been reading about this summer, or to hack the tdd into the existing design.

I could do with a couple of months somewhere with no distractions to get some of these projects a little closer to completion.

The projects include:

  • The 6502 simulator
    • Comprising a library for a virtual 6502 cpu
    • The controlling general purpose simulator
    • A hardware specific simulator (although the urgency for that has disappeared, the hardware developer I was working with is no longer interested in the project)
  • Learning C# (a little difficult, my VM's run way too slow to be effective on the macBook)
  • Learning Android - and getting to grips with Java
    • I have two or three little apps I will be building
  • Working on my Ruby on Rails skills
    • And building an api for Android to access the app
  • Working on Python
  • Working on PHP
  • Finishing the hardware for my laser fence


Monday 21 May 2012

Configuring CakePHP for an OSX local install


I am currently learning some of the technologies involved in building web based applications, following ideas from the Software as a Service course.

Currently I'm looking at PHP and the CakePHP frameworks.

Obtain the source

Download and unzip the package from the CakePHP website
Rename to a suitable folder, I have put mine in Sites/ScoutCamp.

Set up Apache

Edit your sites file sudo nano /etc/apache2/users/username.conf
   Options FollowSymlinks
   AllowOverride All
   Order allow,deny
   Allow from all

Restart apache sudo httpd -k restart and open a browser to your shared pages.

Lots of errors and messages

First time I fired up the browser I thought “Oh dear me” or at least something along those lines.
Unlike my trial of Ruby on Rails, there were loads of errors and configuration changes that were required.

I have solved most of the problems, but still have one left to suss out.

Timezone settings

In app/Config/core.php there is a line (it was 232 on my build)

   //date_default_timezone_set('UTC');

Uncomment and set to your timezone - Newcastle is in the same timezone as London.


   date_default_timezone_set('Europe/London');

Unable to write 'cake_dev_en-us' to File cache

The app/tmp folder needs to be writable by the web user.
To find out who this is, add the following bit of code to app/View/Pages/home.ctp


   


On my system, the web user is _www, so change the owner:
   sudo chown -R _www app/tmp/

This cleared up all the errors above the title.

Please change the value of “Security.salt” and “Security.cipherSeed”

In app/Config/core.php find the lines and change to a more suitable value. I used sha1sum to generate the salt, and pasted for the salt. The Seed I just typed a few numbers at random.


   df  | shasum

Setting the database connection

You need to create your database using mysql (there are other options, but that's the one I went with).

Copy database.php.default to database.php and add your user and database details. Note that for some reason, OSX will not work user localhost (and that took a day to track down).

   public $default = array(
      'datasource' => 'Database/Mysql',
      'persistent' => false,
      'host' => '127.0.0.1', // Note change from localhost
      'login' => 'ScoutCamp',
      'password' => 'yourPassword',
      'database' => 'ScoutCamp',
      'prefix' => '',
      'encoding' => 'utf8',
   );

URL Rewriting

This is the only bit I haven't worked out yet, but I want to make a start developing my site and will come back to this.



Saturday 19 May 2012

Administrating a mySQL database with phpMyAdmin

Just a quick gotcha for OSX, mySQL and phpMyAdmin.

I had successfully set up mySQL and secured the default accounts with passwords. Although shipping a product without passwords may be thought of as a security hole, it is just as bad as shipping with a default password.

Downloaded and installed phpMyAdmin onto the macbook and configured according to instructions. 

Did it work? Did it heck! 

After a while googling for answers, I read through another install guide (although for Lion not Snow Leopard) and found this gem: 

Edit config.inc.php using your favorite editor (I prefer vi) and change$cfg['Servers'][$i]['host'] = ‘localhost’; to $cfg['Servers'][$i]['host'] = ’127.0.0.1′;*Well it sounds stupid because localhost and 127.0.0.1 are same in networking world but phpMyAdmin won’t let you (At least me) log in without this change and keeps throwing error “#2002 Cannot log in to the MySQL server
This is one of the classic IT gotcha's: two things that are supposed to give the same result don't. I'm almost tempted to see if it is the same on a linux machine, but don't want to get diverted.

Next steps will be to start reading up seriously on PHP MVC frameworks - I'm currently looking at cakePHP.

I really can't remember how we did this stuff before the internet was available, and many of the younger developers probably can't imagine the idea. Perhaps that is why I have a largish collection of computing books going back to VB5 and Access 2 in my bookshelves. Although that could just be because I hate to get rid of books.

Friday 18 May 2012

Plurals are important, CSS, bookshops and sniffing books

The usual warning applies: I am writing mainly for myself on topics that interest me. I'm not bothered if you're not interested in them.

When I stopped coding last session, I was sitting with an interesting problem to solve: the code to include the header and footer wasn't working.

After spending too much time going line by line through the code, I eventually noticed something painfully obvious: I had misspelt a folder name and missed the trailing 's' from templates.

Sigh.

When I get some spare time, I'm going to have a long hard look to see if there is a good visual editor for css files. A quick look didn't find one, and I'm more interested in getting to doing some coding.

I do find css more than a little frustrating at times, and I should probably go back to first principles and relearn using the latest standards - this would be a good excuse for a trip to a good bookshop, but both my favorites have closed (that's Borders and the Waterstones branch in the MetroCentre).

When I buy a book I like to hold it and I really love the smell of a new book. It's even more important for technical books to have a look at the actual contents before deciding to buy. Once I've decided I want the book, I'll get it then and there - I don't like the delay between ordering and getting a book delivered (even if it works out cheaper).

Most of my inspiration for the html and css was taken from the "CSS: The Missing Manual" book.

Wednesday 16 May 2012

Learning PHP the hard way

I have been given a challenge: to learn PHP well enough to demonstrate my programming prowess.
Most people will have no idea what PHP is, and probably care less. Not to worry, read on and you will possibly learn more than you are interested about.

Friday 6 April 2012

Fuel on Rails - the Static Pages

Progress!

screenshot of the contact page
I've made a little progress with the app, but it has felt like mostly taking backward and sideward steps working out the differences between erb and haml.
Static pages for the site have been setup, with a fairly plain gray colour scheme that needs something doing to liven it up a little.

A logo

I do have some ideas for a logo, and may resort to watercolours while I create some designs. I'll postpone deciding on a site colour scheme until I do create a logo: it would be a shame to have to change it more than once.
I'm having a debate with myself about the app title - perhaps "Fuel on the Road" might be better. I haven't decided if I'm winning or losing the debate though.

Signing up victims users

Next step is to get a signup and signin process set up. This is going to need careful thought, for the people like myself who forget passwords (perhaps I should just keep to using one password everywhere).

Fuel: a Ruby on Rails app

After completing the Software as a Service course and the Ruby on Rails tutorial guide I thought it was about time to start putting what I had learned into practice.
I'd spent several days thinking about what I wanted to create, had several complicated ideas then (prompted by filling the car with petrol) decided on an app to monitor fuel consumption.
So far I have created some screen layouts while thinking about what I want the app to achieve.

Initial Screen layouts

Homepage

There will be a homepage with possibly some statistics on the data held, although what I don't quite know what - perhaps something line the total spend on fuel in the past month compared to 12 months ago.

Sign up

A means to register on the site. Every site needs one, unless all the data is to be made public. I didn't seriously think about that at all.

Sign in

A means for a user to recover a forgotten password would be helpful here, it's a feature I certainly have used several times on various websites.

Users homepage

To show details of the vehicles operated by the user. Initial builds may restrict to a single vehicle.
Summaries of the fuel usage to be included here.

Vehicle details

The screen to show the details of fuel used for the vehicle.
A history of the fuel used and some comparisons with 3/6/12 months ago might be interesting.

Fuel upload

The means of adding the fuel used to the database.
Not much point without including this!

What else?

The means to allow another user to upload fuel details might be useful (I know it would for me), and that would need some form of authorisation scheme, along the lines of friend requests on social networking sites.

Top Down Design

I intend to use a combination of Cucumber feature lists and rspec specifications to ensure the app is working the way I intend. This will also help reduce the risk of a change breaking the site without being noticed.
I did notice something interesting: I have written one user script for logging into the system, and I currently have 100% code coverage. Although as I don't have any lines of code in the system, that's quite easy to achieve.

The next steps

They are going to be to create further rspec and cucumber test scripts and implement the user sign in model, followed by adding vehicle details and then adding fuel loads.
I have a fairly comprehensive list of all of the fuel I have put into my current car going back several years since I first bought it (about a week before I started dating my girlfriend).
The source code is currently sitting on a github repository, with the first build pushed to heroku, although I'm not planning on publishing the url for the moment.

Saturday 17 March 2012

Ruby on Rails

Like many others, I have signed up for the Software as a Service online course hosted on corsera.com, it is my first real look at Behaviour Driven Design and Test Driven Design.

I find it interesting that the IDACS development team I worked with at the turn of the century followed many of the Agile principles, although we didn't have the formal sprints and reviews. We did, however, meet up at least once a month to review our work (and the occasional pint or two was imbibed).

My current project is with coming to grips with the whole SaaS principles.
The first week was learning some basic Ruby (a language I am rapidly coming to love), followed by a trip into Ruby on Rails and this last week with using Cucumber to have test scripts that pass or fail the code that has been written.

I have been having an interesting time trying to get Cucumber to work nicely on my OSX machine (thankfully the SaaS course provided a vm with everything set up ready to rock). Everything in the Ruby world seems to be evolving at a rapid pace, and many of the online instructional videos are a little out of date.

To get Cucumber to run on my machine, I found (after much perusing and changing keywords in searches) that the following seems to work:

In the Gemfile, add the following code:
group :test do
  gem 'rspec', '>=2.5.0'
  gem 'capybara'
  gem 'cucumber','>=1.1.4'
  gem 'cucumber-rails','>=1.3.0'
  gem 'database_cleaner'
  gem 'webrat'
end

Adding
gem 'haml-rails'
will also give you the haml templates instead of erb (wish I found that before I set up my current test project).

Run bundle update at the command line, followed by:

rails generate cucumber:install --capybara

This creates the features folder with the appropriate helper addons.
I did spend some time trying to work out where the web_steps.rb file had gone, but it is no longer included as part of the package. Apparently due to people creating steps files that are over detailled and prone to being brittle and breaking with relatively minor changes to the codebase.

Now all I need to do is to start building apps using the tools. One is going to be a blog type facility based on the Railscasts videos, and the other is to make a waiting list management site.

Monday 20 February 2012

Imagine Cup NE: The rest of the world, BEWARE!

Just over two weeks ago, James asked at the last minute if I could go with him to an information event about the ImagineCup; I had already committed myself that evening so sadly couldn’t accompany him. 

He returned home, and was just a little bit enthusiastic. I got an email saying “You’ll be a mentor for the ICNE hack, won’t you? I’ve told them you would” I said yes, signed up and wondered what I was letting myself in for. 
 
Today Ben asked me to put together a few words on what I thought of the ImagineCupNE event last weekend from a parents perspective. Foolishly, I said “yes”, then sat staring at a white screen for twenty minutes without anything useful appearing. This is what eventually (and after too much MacDonalds coffee) emerged:

 
To have the opportunity to mentor some of these young people has been an incredible honour for me. The amount of enthusiasm and passion shown by all of the future developers show me that the industry had better beware: the next generation of developers are ready to rock the IT world.

 
At the start of the event they organised themselves into teams and started discussing ideas to propose for their entry into the ImagineCup North East heats.

 
Every team came up with several ideas, and the various mentors pointed out good points and areas to improve and change. Every team I talked to had several good ideas knocked back, but they kept persevering and improving and adapting their ideas.

 
As well as discussing how they were going develop something to improve the world, they spent time in workshops covering a wide range of topics, from Presentation Skills to Sales and some fairly technical topics too, and the ideas gleaned made dramatic changes to some of their ideas and proposals.

 
I've watched the IT industry from the early 80's, when I got bitten by the computing bug, and the change I've seen is nothing to the change that the ImagineCup developers are going make over the next ten or fifteen years.

 
I will openly admit to being in tears of pride at the end of the event, my son and two of his friends from college came up with a proposal (after many, many changes and knockbacks from the mentors).

 
One of his team (and I don't have my notes as I write this) got nominated as the most supportive developer, and the tears were caused by Ben's comments that my son was most highly commended for his attitude and knowledge.

 
Several of the other mentors had told me during the event about James' interest, knowledge and persistence in asking questions on the workshop topics: James told me later that he had three pages of questions that he did not ask about the cloud workshop.

 
I only have one complaint about the event: only one of the teams will get through the regional heats to get to the country finalists. From what I have seen they all have the potential and ability to be very successful in the finals.  

 
What were the highlights for me?

  • A 2am run to MacDonalds and a £90 bill. The parcel shelf of my car was packed with drinks, and the two developers were buried in MacDonalds packages.
  • Going to bed at 3am listening to them discussing their projects and waking at 6 still hearing them discussing and improving (no namby pamby hotel beds - sleeping bag and carrymats for the mentors was the order for the day)
  • Running out of petrol on the way home - I did make it home (just), but was only the fuel in the lines and the car didn’t want to get as far as the petrol station the next morning.
  • Watching the pleasure James has had from his new phone - the prize he well and truely earned.