Fall 2014 Challenge

Fall 2014 Challenge

This challenge is open to the students enrolled in Computer Science & IT programs (during Fall 2014) at Mohawk College.

This challenge is in no way part of any actual course itself, it is provided as a completely optional side project that is (hopefully) fun and challenging.

The challenge isn’t intended to be “Kobayashi Maru” hard. ;-) But it is intended to give you a chance to explore something completely new and different.

Due date

The challenge has to be completed and e-mailed to me at kevin.browne3@mohawkcollege.ca by Monday February 23rd 2015.

Reward

floppydisk

As a souvenir and reward in exchange for completing the challenge, you’ll receive a 3.5″ floppy disk, with a cover signed by me along with the year the challenge was completed, the name of the challenge you completed, and your name. I doubt these things will become like Knuth cheques, but it’s something!

Challenge

Report on Hackathon Participation

Hackathons are 1-3 day events where mixtures of software developers, designers, and others come together to work on software projects. The projects are typically small and done in groups. Group members may not even know each other at the start of the event, as it depends on the hackathon format – for example groups may form around which ideas people would like to work on.

Some hackathons are focused on particular types of applications, for example open data applications or video games. Some “hackathons” include a business component, so for example Startup Weekend involves not only the creation of a product but also a business model to sell the product (typically done by non-developer members of the team). Hackathons may even include cash and/or other prizes for winning teams/projects.

The benefits from a student perspective to participating in a hackathon are: educational, portfolio building, and connective. It’s a myth that you need to know what you’re doing already before you participate in a hackathon, in fact you’ll get more out of it by going in with the attitude that you’re going to learn new things. A hackathon will allow you to work together with people who have different skill sets than yours, and you’ll find yourself learning from each other. Even if the application produced during the hackathon is small, the application, your contribution, and your participation, are all very good from the standpoint of building a portfolio. Finally, you will make connections at hackathon events that can help you find jobs in the future.

Requirements

Participate in a hackathon between now and Monday February 23rd 2015. Send me an e-mail with the following information:

  • Identify which hackathon you participated in.
  • Attach a zip file or somehow otherwise include the source code you or your team produced at the event (e.g. link to GitHub repository).
  • Describe what you and/or your team built.
  • Identify the contributions that you made individually.
  • Describe what you learned by participating in the hackathon.

Some Upcoming Hackathons / Startup Weekends

You can follow websites such as StartupNorth.ca and TechVibes to identify other upcoming hackathons.

 

Summer 2014 Challenge

This challenge is open to the students enrolled in Computer Science & IT programs (during Summer 2014) at Mohawk College.

This challenge is in no way part of the Computer Science & IT program, it is provided as a completely optional side project that is (hopefully) fun and challenging.

The challenge isn’t intended to be “Kobayashi Maru” hard. ;-) But it is intended to give you a chance to explore something completely new and different.

Due date

The challenge has to be completed and e-mailed to me at kevin.browne3@mohawkcollege.ca by Sunday August 31st 2014 Tuesday September 30th.

Entries can be sent as many times as is required to get it right, but I can only look over entries and respond so quickly.

Reward

floppydisk

As a souvenir and reward in exchange for completing the challenge, you’ll receive a 3.5″ floppy disk, with a cover signed by me along with the year the challenge was completed, the name of the challenge you completed, and your name. I doubt these things will become like Knuth cheques, but it’s something!

Challenge

Create an Open Data Web Application

Open data applications are web and mobile apps that utilize open data provided by governments (e.g. bus times). For example, SkateHamilton is an open data application that helps Hamiltonians find a skating rink. The City of Hamilton has released some open and accessible data on the city website: hamilton.ca/ProjectsInitiatives/OpenData.

Open data apps tend to be done on a volunteer basis and provided free for the benefit of the general public, but some apps utilize open data will charge and/or earn a profit (for example Bike Like a Local).

Problem

Build an open data web application using one of the data sets made available on the City of Hamilton website. The open data web application must meet the following minimum requirements:

Requirements

  • Identify target users – who are your target users for the application? Cyclists? Local seeking recreational activities? Public transportation users? You must target a specific group of users.
  • User acquisition plan – how will your target users find out about your application? Can you find a local non-profit, charitable, volunteer or activist organization to link to your application on their website and/or notify their community of its existence? You must present your plan for how you will let your target users know that your app exists. The plan doesn’t have to be anything extravagant, but there does have to be some plan. If you get stuck on this, send me an e-mail.
  • Google Maps API – use the Google Maps API to present the Open Data in a useful way to your target users. You can use SkateHamilton as inspiration – i.e. give more details when the user clicks on an item in the map, make the map searchable, etc.
  • Accessible – the application most be hosted somewhere online and be accessible to the general public.

To submit a solution send a link to the application to me via e-mail, along with some text identifying your target users and your user acquisition plan.

Resources

Notes

  • How and where you host the app is up to you – Heroku may be a good fit.

 

Winter 2014 Challenge

This challenge is open to the students enrolled in Advanced Programming in .NET – COMP-10068 (Winter 2014) at Mohawk College.

This challenge is in no way part of the actual course itself, it is provided as a completely optional side project that is (hopefully) fun and challenging.

The challenge isn’t intended to be “Kobayashi Maru” hard. ;-) But it is intended to give you a chance to explore something completely new and different.

Due date

The challenge has to be completed and e-mailed to me at kevin.browne3@mohawkcollege.ca by Wednesday April 30th 2014.

Solutions can be sent as many times as is required to get it right, but I can only look over solutions and respond so quickly.

Reward

floppydisk

As a souvenir and reward in exchange for completing the challenge, you’ll receive a 3.5″ floppy disk, with a cover signed by me along with the year the challenge was completed, the name of the challenge you completed, and your name. I doubt these things will become like Knuth cheques, but it’s something!

Challenge

Create a Genetic Algorithm Solution to the Knapsack Problem

The knapsack problem is a combinatorial optimization problem with many real life applications related to allocating resources. The problem roughly stated is, given x items, each with v value and w weight, and a knapsack capable of holding max weight m, what is the maximum value of items that we can put in the knapsack without going over the max weight the knapsack is able to carry?

knapsack

One version of the problem is called the 0-1 knapsack problem, where we assume that we only have one of each item, and we can either put an item in the knapsack or not. Other variations of the problem allow you to put different numbers of each item into the knapsack, or a fraction of the item into the knapsack.

The knapsack problem is a type of problem that is difficult (i.e. very time consuming) to solve using a computer, these types of problems are called NP-Complete and NP-Hard. This is part of what makes it a particularly interesting problem – unlike other problems, we can’t write an algorithm that will quickly give us the correct answer every time.

xkcd

One way of finding solutions to the problem would be to use a genetic algorithm (GA). Genetic algorithms are a way to search for optimal solutions to a problem by mimicking the process of natural selection. An initial “population” of solutions is generated, these solutions are tested for “fitness”, the most fit solutions combine and “breed” to produce offspring (i.e. a new set of hopefully improved solutions), and the new offspring is tested for fitness and on and on. There are many different ways to write a genetic algorithm – how to produce the offspring, how to represent solutions, how to combine solutions to produce child solutions (should their be mutations, and how many mutations), how to decide which solutions make it on to the next generation, when to stop the algorithm, etc.

Problem

Write a genetic algorithm solution in C# to solve the 0-1 knapsack problem. Test it with different sizes of the knapsack problem in terms of the number of items, value and weight of the items, and maximum weight of the knapsack. Can your algorithm find the optimal solution? What if you keep increasing the number of items? How close does it get? You can experiment with different solution population sizes and other variations of your genetic algorithm too. Test it against another solution to the knapsack problem (perhaps the brute force solution or a dynamic programming solution). Document these tests and experiments in the comments of your code and explain what you have done.

Resources

Notes

  • Feel free to “explore”. If you aren’t sure you are doing things the “right” way, or if you want to know whether to do something one way or another way, try it out and see what happens. There is no one right answer here and there is room for exploration and experimentation. In fact, that’s what I’d be happy to see!
  • Don’t worry about any scary math you see in articles discussing this topic – it’s not that bad in practice, and you have enough knowledge of C# to code a solution.