Breakerfaire – 14/05/2013 – Why Embedded Security Matters

Embedded Systems are ubiquitous. From the systems that control our cell phones and aeroplanes to ATMs, they’re everywhere. In this Breakerfaire meeting, Irish security enthusiast and Alastair O’Neil will be talking about security issues in embedded systems with an emphasis on router hacking.

Alastair is an inquisitive chap. From an early age, he’s constantly had a desire to take apart things and see how they worked. Now, he spends his days studying Computer Science at Liverpool Hope University and freelancing as a software developer and security engineer.

Breakerfaire is a semi-regular security meetup that takes place in Liverpool, England. The next meeting will be held on the 14/05/2013 at  7pm in DoesLiverpool.

What Now?

I frequent the Learn Programming subreddit quite a bit. I’ve found it’s helped me out a great deal, and I’m always really, really happy on the rare occasion where I’m able to help someone else out. One question I’ve seen crop up time again is ‘What Now?’. ‘Where do I go from here’?

It’s common for people to go through the Javascript course on Code Academy, or to work through Michael Hartl’s Rails Tutorial and have absolutely no idea where to proceed when they’ve finished them.

The (amazing, albeit sometimes frustrating) thing about programming is that it’s huge. Really huge. Just imagine the most incredibly vast thing you can think of, and then double it. That’s programming. When you’re a programmer, you’ve got to accept as a given that you’re in for a lifelong learning experience.

That in itself is really daunting. The vastness of the field of computer science is almost as great as the vastness of space. So, in this blog post I’d like to talk a bit about where you can go once you’ve completed one of the many introductory programming courses that are floating about online.

Foolish Assumptions

Firstly, I’m going to make a bunch of assumptions about who you are. I’m going to assume that you’ve got the basics of programming down (variables, arrays, flow control, functions) and that you’ve enjoyed learning how to code. I’m also going to assume that you want to progress further, and hopefully start a career as a computer programmer. Seem fair? Okay then.

Learn Some (allegedly) Boring Stuff

A lot of these introductory Python/Javascript/Ruby courses neglect some really important stuff. Stuff that isn’t immediately sexy, but is actually really useful. Things like algorithms and data structures.

It might seem a bit tedious now, but you’ll probably benefit a great deal in the long run. Plus, it’s really for learning how sorting algorithms work, and how you can use mathematics to find the shortest path.

Daniel LaMire blogged about the top five algorithms he knows. That article is worth checking out just for the comments. Also, the University of Auckland in New Zealand has some good lessons on their website, where they give an introductory look at data structures and algorithms. Well worth a look.

Hang Around With Smart People

I live in Liverpool, and my local hackerspace is DoES Liverpool. They regularly have events that are open to the public, and they also offer really affordable hotdesking. What’s great about DoES Liverpool is that the people who go there are always friendly and insightful. I’ve learned a lot just by hanging around with people who are older (and smarter) than I.

If your city has a Starbucks, odds are good it has some variety of tech community or a hackerspace. Show up to one, and strike up a conversation with someone who you’ve never met before or attend a talk. You might learn something!

Attend A Hackathon

Hackathons are great ways to meet cool people, and work on cool projects. The way Hackathons work is you crowd into a room that’s stocked with coffee, fruit and pizza, and separate yourselves into small groups. You then pick a project and start coding. Simple as.

Quite often, the motives behind a hackathon are quite altruistic. People work on projects in order to improve the quality of life of other people. Two examples that immediately spring to mind are the Social Care Hack Day and the NHS Hack Day.

incidentally, the Social Care Hack Day is happening next week. If you’re in Liverpool and want to work on projects that benefit that actually help people, drop the organizer a tweet.

Learn A Framework

So, you’ve learned Javascript and you want to expand on what you know? Learn a framework. I’m not much of a Javascript guy, but I’ve heard great things about Knockout, Backbone and Ember. If PHP is your thing, consider Zend or Symfony. Apprentice rubyists would likely benefit from learning  Rails or Sinatra.

Frameworks are good, because you get exposed to a lot of concepts that you’ve perhaps never come across before, like MVC and (possibly) OOP.

Make Something

If you want to be a programmer, you have to practice that skill. If you don’t, your ability to code atrophies. With that said, it can be hard to think of a project on the fly.

If you’re thinking of getting into web-dev, you might want to write a simple web application. An application to make a to-do list, or a Twitter clone, perhaps. If you want to get into games development, have a play around with SDL and create a simple application where you move a shape around a canvas. Start simple, and build up.

Write

So, you’ve made something cool, or learned something new. Tell the world about it! There’s evidence which suggests that writing about a subject aids the learning process, and guess what? Writing is fun. It’s really gratifying to see solidify on the screen, concepts and ideas that you previously struggled with. It’s also really gratifying to help other people.

What About You? 

I’m really interested in how people learn to code. Seriously. It’s fascinating. If you’ve ever been in the position where you’ve completed an online course on programming and wondered where to go next, I’d love to hear from you. Drop me a comment below and tell me about your experiences.

Enjoy This Article?

You might want to subscribe to this fine blog that you’re currently reading. Leave your email address in the box on the sidebar, and you’ll get an email whenever I write a new one.

A Quick Bit Of Code I Hacked Together

I’m currently working on my MVP for my game, and I’m not focusing on artwork, for the sake of getting game mechanics down. I wanted to have a simple CLI utility that could take in some parameters and produce a bitmap image.

So, I wrote one. In Java. It didn’t take me too long.

You can grab it from my Github page. I also included an autogenerated ANT file in case you want to build it yourself. I’ve never used ANT, so it might not work. If it doesn’t, drop me a comment below.

The way you use it is simple. You run it with the following parameters: Width, height, color and the filename of the outputted image. Width and height are both integer values, and color has to be either ‘red’, ‘blue’ or ‘green’ and in lowercase.

So, if you wanted to create a red, 10×10 box which outputted to hello.png, you’d run the program with the following parameters: 10 10 red hello

It’s nothing too flashy. Just a great example of using programming to do jobs that would otherwise be tedious and mundane. It’ll also save me from having to open up illustrator or paint. Which is welcome, indeed.

Adventures Of An Accidental Games Developer – 2 – Source Management

My next blog post will be about the SDL library, But I don’t want to talk about that yet. I want to talk about something really, really important. Something that a lot of programmers don’t do, but really ought to. Source control. Particularly, source control with Git.

If you’re about to start a major development project, such as the creation of a video game, you’d do well to start good proper source control management processes.

Now, there are other source management systems. SVN, Mercurial and Microsoft SourceSafe are two examples I can think of from the top of my head. But I know Git best, so that’s what I’m going to be banging on about. 

So, what’s this Git then? 

Git was invented by Finnish-American programmer, Linus Torvalds. You may know that Linus is also famous for developing the Linux kernel which runs on billions of servers, cell phones and computers worldwide. It was initially created to manage the development of the Linux kernel, which is one of largest open source projects in existence with hundreds of thousands of contributors.

In a nutshell, Git allows for rapid, seamless developer collaboration without the risk of malicious corruption. And it just works.

Why Should You Care?

Are you worried about having your source code corrupted? Are you worried about making a change and it breaking your application? Would you like to be able to roll back your application to a specific period before you made a change? Would you like to be able to work with your code on your local file system, and have your main source code trunk being on a separate device? Or even better, on the cloud?

If you answered ‘yes’ to any of those questions, you probably want to start using source control. And Git is hands down, the best one on the market right now.

Who Uses Git?

Lots of people use Git. Popular open source projects like Gnome, Ruby on Rails, Node.JS and Flask use it to allow for coders around the world to work on one project with absolute ease.

There are some unorthodox use cases for Git too. There’s a guy in the UK called Francis Irving who uses it to track issues with his house, as shown in a recent Wired article .

Thousands of companies use Git internally, and it is rapidly replacing Sourcesafe, CVS and SVN as the source control manager of choice. Git is huge. And it’s not going away.

What is Github?

Github is a site that allows you to freely store open source projects on the cloud. They also allow you to have private projects stored on their servers, provided you are a paid subscriber to their service.

How do I get Git? 

Git is open source and available on most platforms. If you’re using Linux, you can grab it from your  repositories. There are binaries available for OS X and Windows. Incidentally, there’s an incredible metro app for Windows.

Many IDE’s have plugins that allow you to work with Git and Github. My favorite Java IDE, IntelliJ comes with a Github plugin built in. Eclipse has an optional third party plugin that provides Git support.

Whatever your platform or development environment, there’s nothing stopping you using Git.

Learning Git

Git may seem a bit daunting at first. Learning it isn’t hard though, and can be done in 15 minutes. Check out the Try Git course from CodeSchool.

Fin

I hope I’ve convinced you of how awesome Git and proper source control is. If you use a different source control method to Git, I’d love to hear about it! Just drop me a comment below.

Enjoy This Blog Post?

You should subscribe. Pop your email in the box in the sidebar and you’ll get an email whenever I write a new post.

Adventures Of An Accidental Indie Games Developer – 1 – The Minimum Viable Product

Minimum Viable Product is a term that gets banded around a lot, especially in ‘Lean Startup’ circles. It’s not a difficult concept to grasp, and being able to understand, plan and work towards an MVP can make planning and coding your product a much less stressful endeavor.

In this article, I’m going to talk about using MVPs to plan development, and why they rock.

product_donuts-copy

Borrowed from Pando Daily. http://pandodaily.com/2013/02/04/three-reasons-not-to-build-a-minimum-viable-product/

Minimally Viable

So, let’s imagine a hypothetical scenario. Let’s imagine that it’s the early 20th century and there’s been a fire in the offices of Henry Ford in Dearborn, Michigan. It couldn’t have come at a worse time. Henry was about to demonstrate his Model T car to the world, which would revolutionize motoring. Sadly, the fire consumed his only prototype and all his blueprints. He’ll have to start from scratch.

What Makes A Car?

So, let’s pretend you’re in Henry Ford’s shoes. You need to reinvent the car that would ultimately shake up manufacturing and transport and you decide to create a minimum viable product. This contains all the features you need to sell, market and demonstrate your product, and no more. So, what do you need?

  • The ability to increase and decrease speed as required, and to traverse obstacles and roads. 
  • A chassis, to keep out rain and to protect the internal components.
  • Somewhere for the driver and any passengers to sit.

This is the minimum viable product of an automobile. All the other cool stuff like heated seats, bluetooth and iPod docking can come later. For now, this is all he needs for him to call his product a car. 

How Does This Relate To Games Development? 

As someone getting into games development for the first time, I’m constantly aware of the need to have an MVP, and to work towards it.

Having a pre-defined minimum viable product is actually the cornerstone of all my planning, as it keeps me conscious of essential features, and allows me to ignore that pesky little voice in my head that asks ‘what if?’. The pesky little voice that, when obeyed, results in distraction from your main objectives, and adding lots of non-core features before you’ve completed the essential facets of the game. 

In retrospect, someone ought to have told the developers of Duke Nukem Forever about this fabulous concept.

What I’m Working Towards

So, I’m working on a game right now. Here’s what my MVP is.

  • My application will be able to parse a JSON file. 
  • That JSON file will then be rendered in the game as a room.
  • The JSON file will contain information relating to a character, and that character will be able to traverse the room.
  • The JSON file will contain information about events, which will be interpreted by the program. These events will be predefined.

And you know what? That’s all I’m going to do. At least initially. I can add the sparkles later. I can make it look prettier once I’ve got core functionality down.

You can’t build a house without foundations.

Fin

If I’ve piqued your curiosity and you want to read more about lean concepts, I can’t recommend The Lean Startup enough. It’s a fabulous read.

Enjoy This Blog Post?

You should subscribe. Pop your email in the box in the sidebar and you’ll get an email whenever I write a new post.