The Game’s Afoot

This week and last week have been the two most stressful weeks of my time at CodeClan, because the way the timetable is structured it results in a perfect storm of competing priorities:

  1. We are learning two crucial bits of programming – Ruby on Rails and React JS. Maybe the most important two bits of programming if we want to do full stack web apps.
  2. We are coming up with a brief for and carrying out a final programming project. Mine is to put together Skillz – a web app to coordinate volunteers for a charity with projects that require particular skills. I’m using Ruby on Rails to build a back end database that will deliver an API of data for a React front end to consume and display. I’m hoping to get to the point of using the GoogleMap API to be give a location-based view of projects and suitable volunteers. (GitHub repo for the Skillz app.) At the time of writing this blog I am still very much in the requirements gathering, planning stage. No code as yet written.
  3. We are studying for, taking tests and code tests for, and gathering evidence for the PDA qualification CodeClan offers in Software Development.
  4. And last but certainly not least we are looking for work – refining our CVs, writing cover letters, attending employer networking events, going on site visits, going to interviews, taking code tests, ironing shirts and polishing shoes.

Added on to all that is the sadness that Cohort 7’s time here is coming to an end. I’ve gone from writing down everyone’s name and desperately trying not to get them wrong (not always succeeding), to feeling bosom buddies with all of them – Adrian, Alex, Bertie, Bobby, Carlos, Claudia, Cookie, Cyrus, David, Diana, Ewan, Jo, Kate, Kyle, Matthew, Pavlos, Ross, Tom B, Tom C and Max. We’ll no see their like again.

Advertisements

Bear in a card-game shop

This week has been quiet, mostly stress-free and successful in terms of finishing a project brief with some suggested extensions. So why then do I feel dissatisfied?

As a reminder, I have just finished my 8th week as part of Cohort 7 at Codeclan in Edinburgh, doing a 16 week course in programming. We’ve learned about Ruby, SQL, Sinatra, Java and Android development. This last week we worked individually on our own Java/Android projects.

I chose probably the most boring of the briefs:

Shop

Goal: Practice OO modelling in Java (unit tests, no UI)

You are required to build an app that allows a Shop to sell goods to a Customer. Stock and items are not important.

The Shop must be able to:

  • Make a Sale
    • The customer funds go down, shop sales go up
  • Give a refund
    • The customer funds go up, shop refunds go up
  • Report on income
    • Total sales minus total refunds

The Customer must:

  • Have a collection of possible Payment Methods:
    • CreditCard (default), DebitCard
  • Be able to select a Payment Method to pay at any Shop
  • Be able to select a Payment Method to receive a refund onto a given Payment Method

(You may find HashMaps useful for this project)

And they were right, I did find HashMaps useful for the project. In fact I probably spent the majority of time during the project week learning about and using Java HashMaps.

Briefly a HashMap is a set of key/value pairs. As an example I used one to keep track of the stock in my store, so “‘dancing bear’, 3” would be one of the set of the HashMap of items in stock, with the name of the item as a key and the number of items in stock as the value. (The shop “BearsRUrsus” does a fine line in dancing and fortune telling bears, as well as the more ordinary varieties.)

See, I told you it was boring.

So I got through the week and on presentation day I was blown away by all the cool Android projects the others had done. I was most impressed by those who were doing purely Java projects but finished early and went on to put their code into an Android app when they didn’t have to to meet the brief.  It made me feel like I didn’t really do enough work.

It’s not unusual to be dissatisfied with the work done; in fact most of the people I spoke to felt they could/should have done more, so it’s not just me. It’s a normal reaction among ambitious people who want to push themselves. I never would have put myself into that category, but I do feel like I’m taking on a new work ethic since starting here.

I added fireworks to my presentation, and showed off some nifty reworking of code I was particularly proud of, but the highlight was this vintage postcard I found that sums up our cohort pretty well, at least in terms of project themes (in which bears and card games feature heavily).

card00468_fr

I wonder which bear ordered the delicate glass of wine?

A nation of shopcoders

So we are back into another individual project week. We have had a week of learning basic Java, followed by a week of learning basic Android development, leading into a week of individual project work.

None of the suggested options were particularly inspiring at first glance, so I went off on a slight initial tangent thinking about what else I could do. I did think of a fortune telling app using Tarot cards, then I thought of a card playing app using Tarot cards (there are a million Tarot games). Then  I thought that was too complicated, so I was thinking of a simple trick-taking game like “The Cow Game“, a simplified version of “Aluette“.

But in the end I thought I wouldn’t go the trouble of writing my own brief and decided on one of the suggested ones:


Shop

Goal: Practice OO modelling in Java (unit tests, no UI)

You are required to build an app that allows a Shop to sell goods to a Customer. Stock and items are not important.

The Shop must be able to:

  • Make a Sale
    • The customer funds go down, shop sales go up
  • Give a refund
    • The customer funds go up, shop refunds go up
  • Report on income
    • Total sales minus total refunds

The Customer must:

  • Have a collection of possible Payment Methods:
    • CreditCard (default), DebitCard
  • Be able to select a Payment Method to pay at any Shop
  • Be able to select a Payment Method to recieve a refund onto a given Payment Method

(You may find HashMaps useful for this project)

Project Extensions

  • Add stock tracking

I thought, let’s just go boring. But I had a half hour planning session with Bobby, the other cohort members who is doing this project, and it got pretty complicated pretty quickly.

slack_for_ios_upload_720

 

It’s going to be a challenge, but boring though it sounds, I’m getting a bit excited about working on it.

Maybe another extension could be customer complaints?

a-cartoon-jesus-moneychangers

It’s Java: Deal with it

It’s Java – deal with it

This weekend we’re building a card game with Java (see what I did with the title there? Never mind …)

If you want to read a clever and accurate emotional reckoning of the week that rings true to me, read my classmate Claudia’s post for this week: Java(aagh?!).

I’m so glad we started to learn programming with Ruby, though. She was the first girlfriend who was so easy to be with that you didn’t realise you were also learning life lessons that would stand you in good stead when you tried to form a relationship with somebody new.

gathermethod

Oh Ruby, you were so beautiful … what happened to us?

The new cohort, Cohort 8, started this week and it’s really interesting seeing them going through the same experience we did not so long ago – five weeks, to be exact.

And, as set down by time-honoured tradition, this week Cohort 7 hosted a “pub quiz” for Cohort 8 as a social mixer. I managed to get a few very out-of-focus shots that I won’t bore you with here. Needless to say it was nothing like this:

atlantaball

The ladies and gentlemen of Codeclan enjoying a decorous evening’s entertainment?

Just imagine the opposite of that and you won’t be far off the mark.

MSDNALA EC021

There were definitely no togas.

I was on the organising committee and snagged the easiest round for myself, a general knowledge round. I made up for it on the night by hogging the microphone and making a general arse of myself which deflected some of the attention away from the shyer members of the organising committee.

I’m happy to report the night went with a swing, and unless everyone was lying to spare our embarrassment, a good time was had by all.

I could post some footage of our instructors dancing up a storm, but that wouldn’t be kind on my part. However, if it makes it onto YouTube I’ll update this post with a link. I’m not as kind as all that.

Coding Dreams

It’s a real thing, and I’ve had a couple this weekend. I’m surprised it’s taken so long, given the intense coding we’ve been doing on my Codeclan course.

On Friday night I decided to re-read The Hobbit after many years. In my previous post I mentioned that I had been caught out in an incorrect Lord of the Rings reference, and that put it in my mind to revisit that world.

In The Hobbit, the intrepid clan of Dwarves can only enter the secret door on the Lonely Mountain on “Durin’s Day”, which is described as the first day of the last moon of Autumn. (I’m sure I’ll be corrected if I’m wrong there.)

pp-hobmap-anim

Feel free to read the description of Durin’s day here if you want to check my accuracy.

So after starting the book that evening before bed, I had a dream about using a Ruby program to calculate when Durin’s Day would fall every year and to send out a notification. I can’t remember any of what I thought would be in the program, only that I would need an API of moon phases, or something like that. But looked at logically, if you have a table of moon phases you wouldn’t need a program. But that didn’t enter my nocturnal calculations.

I had another one this morning, not really connected to anything, just a (probably imaginary) method running around in my head about how to use an .each method to iterate around something and do something terribly important. Pity I can’t remember more, it might come in handy when next I write something in Ruby!

Trial by fire

Cohort 7 has been working on their first solo projects this week.

Painting by Sergey Tyukanov

Cohort 7 tackles their individual project assignments.

We were presented last Thursday with a list of five projects we could choose from. Typically I and two others chose one of the more difficult ones* – gather votes for a Pub of the Year contest and creating a leaderboard.

leaderboard

I originally had the “Dancing Pony” at the top of the leaderboard until corrected by a classmate who has a better memory for Lord of the Rings trivia than me.

Other projects included complex tables and data coming in from every direction – one was making a site for the winter olympics that kept track of athletes and events, medals and points and made a results table – sounds a lot more complex, doesn’t it?

But appearances can be deceptive. It didn’t help that after spending Friday doing a load of planning, I didn’t really have any time at the weekend to work on it. So I felt like Monday morning I was just getting going, which, given we were presenting our work on Thursday, meant I effectively had three days out of the original seven to actually do any coding.

I admit that come Tuesday morning I was ready to throw in the towel. I felt that I had done almost nothing, having been delayed by my own inability to remember any of the Ruby code we had spent two weeks learning. Much of my time was spent looking up things I should by rights have committed to memory.

But one of the instructors at our regular morning stand up meeting said “You may think you’ve not done very much, but you probably really have done a lot.” And looking back, I think that’s true. But I wasn’t using my planning tools very well. I had set up a Trello board to plan out my work and keep track of where I was, but in truth I forgot about it over the course of a couple of days so I didn’t give myself that reassurance that I was indeed progressing, boxes were being ticked and issues resolved, slowly but surely. Lesson learned for next time.

And speaking of next time, it’s coming up again in 2 weeks time. We have a week of Java coming up, a week looking at the Android platform, and then the next week is our next project assignment.

Although in the end I was happy with the work I did on this project, I will need to learn some serious lessons if I want to make the next project week less stressful.

More planning, more git commits, more Trello, and more collaboration. Yeah, looks like a doddle, really …

* — Not that the others weren’t difficult, they were all bloody difficult. But this one seemed different enough that you couldn’t really learn much from the logic others were using on their projects, if you see what I mean.

Coding, games in a cave, and real ale

It’s been a quiet week in Lake Wobegon – aka Codeclan Towers in Edinburgh.

After the alligator wrestling of the first three weeks – Ruby and Sql mainly, all foreign and scary for me – we came to html, css and the Sinatra web framework. (Except it’s not a framework. Except that it is, really.)

Having worked with HTML since the web’s inception in 1996, and CSS from the early part of this century, I was finally in my comfort zone. That meant I had one less thing to worry about than the others in my cohort, and I could concentrate on getting the trinity of Sinatra/Ruby/Sql to spit out some database-driven web pages, complete with forms for adding stuff to the database – our model was a record collection, so adding artists and albums and linking them all together was the goal. I was able to do a credible job and layer some unobtrusive styling on top of it all.

screenshot of a demo music library website with content superimposed over the image of blank record sleeve.

Homepage for the website I built for homework at Codeclan

album page from a music website

Album page for the music library website I built.

Another cool thing that happened this week was a Thursday night foray to “Games are for Everyone”, a games night at The Caves in Edinburgh. This event was in its fourth edition, put on by We Throw Switches, who I admit is an outfit I’d not heard of before. But some of the games looked amazing, even if the number of people there meant I didn’t really get much hands-on time for any of them. Still a good evening out, and I’m going to download a free version of one of the games I had a look at, a text-based game called The House Abandon.

So that leads us on to the end of the week and we have our first major individual project to work on. We were given the choice of five briefs to work on and present what we have accomplished next Thursday. Wow, a whole week to work on something by ourselves! Exciting and scary at the same time. Well, “scary” may be overstating it, but sobering.

My brief is to build a web app that allows the entry of pubs and pub voting for a “Pub of the Year” competition. Pubs voting for other pubs. The app allows the registering of voting pubs and giving votes to other pubs, and compiling a league table as a result. The more I look at the complex relationships involved the more I wonder if this was the wisest choice. But at least I will enjoy the research!

I’ll report back next Friday and let you know how i got on…