The Code Camp scheduled presentations are listed below. If you are interested in presenting but missed the opportunity to get on the official list of presentations there may be an "unconference" where anyone can give an ad-hoc presentation. Contact us at [email protected] for more information.

Download the Columbus Code Camp Program Guide.

Time Auditorium Classroom A Foster Room Beta Box Board Room
8:00-9:00am Registration
9:00-9:15am Opening remarks
9:15-10:30am Keynote:
Evidence-Based Software Development
Websites with Noir
Hybrid Approach to Moving to the Cloud
Scaling PHP
Raspberry Pi Tools are for Smart People
11:00-12:00 Websites with Noir (Continued)
Using BDD to Build .NET Web Applications
Optimizing Regular Expressions
Programming on Bare Metal: Controlling Circuits with Code
12:00-1:00 Introduction to Scala
Fun Obeservational Science with Python and a Webcam
Mobile App Development with Titanium
After the Code: Ops4Dev OAuth for Authentication and Data Access
1:00-2:00pm Woo Hoo! Lunch!


A Rational
Approach to Programming Style
Creating Casual Games on Windows 8 and Windows Phone
Intro to Numerical Computing
Clojure Koans
High Level Language Interoperability
3:00-4:00 A Whole Team Approach to Testing
Failure to Launch: Code, Upload, and Explode
Porting an Existing Embedded System to Linux
So You Think You Know JavaScript
4:00-5:00 The Class that Knew Too Much: Refactoring Spaghetti Code
Understanding and Preventing SQL Injection
NetBeans for PHP
C++ in 32K
5:00 Door prize drawing, wrap-up, and goodbyes


The Code Camp scheduled presentation descriptions are listed below:

Keynote: Evidence-Based Software Development

Most software developers consider themselves to be rational and objective, even more so than the general population. Nonetheless, too many developers maintain beliefs about programming tools, styles and practices for which they have no evidence. They seem to regard these beliefs as articles of faith rather than as testable hypotheses. Thus, they're not interested in conducting experiments and inclined to reject contrary evidence. This session looks at some of these questionable beliefs and contrary evidence in the hope of fostering more evidence-based approaches to software development. If you don't like your sacred beliefs challenged, this session is not for you.


A Rational Approach to Programming Style

Good programming style is an essential part of good programming. Good style leads to programs that are more likely to be correct, and easier to fix when they aren't. Although project-wide style guidelines can improve team productivity, programmers often disagree about what those guidelines should be. This session presents an approach toward achieving consensus on programming style. The key is to base style guidelines on common principles rather than on arbitrary rules. This talk examines a number of these principles and how they lead to specific programming guidelines. Although this session draws most of its examples from C and C++, the lessons are generally applicable in many languages.


C++ in 32K

It's a common misconception that C++ is too complex for small embedded systems, or produces bloated code, when in fact, code written in C++ can have nearly as small a memory footprint as code written in C, and enjoy the stronger type checking and other advantages C++ provides. The speaker dispels some false charges leveled against the language, and suggests methods and tactics useful in leveraging C++ in small spaces.


Websites with Noir

Think Clojure is only for the back-end functional geeks? Think again. Noir is a web application framework written in Clojure.

In this talk we will first look into the main components that make up Noir (Ring, Compojure and Hiccup) and then see how we can create a simple site using Noir.

Finally if time permits we will push the code out to Heroku's Cedar stack.


Introduction to Scala

Scala provides both object-oriented and functional programming paradigms or anything in-between. It runs on the Java virtual machine so you can mix and match libraries with other languages.

This talk will introduce you to the language, cover the language ecosystem, and demonstrate some of the language capabilities.


A Whole Team Approach to Testing

In the old world, software developers would write some code and throw it over the wall to a team of testers who supposedly owned the job of testing.

I'd rather live in a world where developers own the testing process along with the QA team, where developers and QA testers work together, and where automated testing helps drive the team towards more productivity and higher quality. We are making this happen on our team.

Come get some practical, real-world tips on how you, as a developer, can redefine what QA means to your team.


The Class that Knew Too Much: Refactoring Spaghetti Code

The Single Responsibility Principle states that a class should have one (and only one) reason to change. Classes that don't adhere to this principle can result in tightly coupled spaghetti code that leads to more bugs and higher maintenance.

We'll look at how to identify these classes, and how to clean them up using refactoring tools, design patterns, and even aspect-oriented programming.


Hybrid Approach to Moving to the Cloud

Moving to the cloud does not have to be an all or none proposition. Individual cloud services can be used a la carte to add value to your applications. One common scenario is security. Storing user credentials within an application adds both complexity and risk.

A viable alternative is managing this key component in the cloud. We will take a look at doing just this using Microsoft Azure’s Access Control Service. In addition to practical coding examples, we will examine the behind the scenes implementation and discuss the benefits and drawbacks of using such an approach.


Using BDD to Build .NET Web Applications

In this talk I will show you how to use Behavior Driven Development (BDD) to create a web application in .NET. Using the BDD tool SpecFlow and the web automation tool Watin (pronounced What-in) I will show you how these can be leveraged to build web applications in a test first manner.


Fun Observational Science with Python and a Webcam

Python is a great language for exploration and discovery. It is enabler because it makes it easy to turn an idea into reality.

This talk is a "how I did it" talk about how I took an idea, a web cam, and Python and created art, explored science, and illustrated concepts that our ancestors knew by watching the sky but we have lost.

This talk will be a step-by-step walk-through with working code of using Django, PIL, a database, and the standard libraries to implement my ideas and hopefully will inspire others to do the same.


Creating Casual Games on Windows 8 and Windows Phone

The landscape for writing games has changed with Windows 8 RT. Doug will talk about some of the options that are available for writing games. He has written 10 casual games for the Windows Phone and Windows 8 RT.

This talk also cover issues involved in migrating your Windows Phone games to the Windows 8 RT platform using MonoGame and WriteableBitmapEx


Failure to Launch: Code, Upload, and Explode

Before you load your valuable ASP.NET application into a rocket and aim for the cloud, let's do a sanity check. How do you handle bandwidth shortages that never let your app reach orbit? What happens if you need more speed to haul all these users up? If your uptime flames out, how can you easily plan for splashdown?

Moving an ASP.NET application to the cloud may not be as difficult as putting someone on the moon, but there are a lot of places where something can go wrong. In this session you'll learn how to handle the limitations of a purely virtual environment, measure performance and identify bottlenecks, and deal with the changing availability of resources.


Understanding and Preventing SQL Injection

Over the past several years, hacktivists, criminals, and people just "out for lulz" have managed to find sensitive data owned by companies like Sony, Yahoo, and, among many others. In all of these cases, the attackers exploited websites using SQL injection attacks.

SQL injection is at the top of the Open Web Application Security Project (OWASP) top 10 list and is an important part of one of the SANS 20 critical security controls. This talk will go into what SQL injection is, how attackers can use it, and how to secure your sites so that your CIO and CISO never show up on the evening news.

This talk will focus on using the Microsoft stack (IIS, ASP.Net, and SQL Server), but the lessons will apply to all web systems everywhere.


Optimizing Regular Expressions

Optimizing for big data, extensive benchmarking, unicode support, and cross language comparisons are time consuming and complex tasks on top of building a working regular expression.

This session will disseminate information on quickly and properly handling these tasks in real world situations. Each example will have extensive benchmark data and code so you can be confident in selecting a solution to meet your performance needs.


Mobile App Development with Titanium

Mobile applications have been hot. Companies want to take advantage of mobile platforms to accomplish critical business missions. Many individuals entertain the thought to create something cool and put it into the app store and millions of people would download or even pay for it. The problem is each mobile platform is different in operating system and programming language so requires different skill sets.

Titanium is a platform that enable developers develop applications using JavaScript and compile the code into native Android and IOS applications.

This presentation will talk what is Titanium and how it works to solve the problem. Accompany the talk will be real time demonstration in developing an application and run it on iPhone/iPad, Android.


Intro to Numerical Computing

This talk will explain the programming challenges specific to numerical and scientific computing, where speed is often of the utmost importance.

Writing code for computational speed often requires a mindset that differs from what is necessary for conventional, general software development. General knowledge of CPU architecture, use of appropriate programming languages, design paradigms, and the details of numerical algorithms will be discussed.

The audience should leave with a better understanding of the solutions necessary to author fast, maintainable numerical code.


Porting an Existing Embedded System to Linux

Starting with an embedded system running on a 32-bit microcontroller and no operating system, the speaker relates the experience transitioning to a single-board-computer-based system running Linux.

Included are thoughts on kernel development, debugging, toolchains, pitfalls, and advantages.


NetBeans for PHP

Demonstration of NetBeans as a PHP development IDE: Installation and Configuration of NetBeans for PHP Editing / Running / Debugging / Unit Testing a program Database (MySQL) support.


Raspberry Pi

This is an introductory look at the Raspberry Pi, a $35 single-board computer that boots Linux from an SD card and includes USB, Ethernet, audio, composite video out, HDMI video out, and several general-purpose I/O lines (GPIO).

With a 700 MHz ARM processor and 256MB of onboard RAM, it's powerful enough to use as both a development environment and a target platform.

We'll go over some of available ready-to-use Linux distributions and the hardware capabilities of the Raspberry Pi with an eye towards embedded computing projects.


Programming on Bare Metal: Controlling Circuits with Code

The Arduino is the present day equivalent to the Altair 8800 and it deserves your attention.

In this session you will learn how to program this remarkable little device, learn a little electronics, and watch me control something in the real world with code.

But don't be surprised if, after attending this session, you have an urge to go buy one yourself and start hacking.


OAuth for Authentication and Data Access

Utilize OAuth to Authenticate users with Facebook, Twitter, LinkedIn, Google+, and other Social Services.

We'll discuss the world pre OAuth and the needs that drive OAuth adoption. OAuth 1.0 and 2.0 access methodologies will be presented and compared, along with Client vs. Server side implementations.

A sample Rails application accessing Facebook, Twitter, LinkedIn, Google+, Yahoo, and Windows Live will be demonstrated.


High Level Language Interoperability

Working well with others is sometimes difficult, but most problems are not insurmountable.

We will take a look at various strategies of talking between systems and languages such as Java, C, and Python as well as several others.

Serving as an introduction to some of the concepts and common pitfalls, this general talk should be applicable to artists and hobbyists as well as specific platform, web, and enterprise developers.


So You Think You Know JavaScript

Many folks think they know JavaScript. They know the syntax and can manipulate the DOM. Maybe they have even used jQuery. But do they really know it?

I thought I did until I started digging and discovered that JavaScript is more than just a toy language for web pages. It's a full-fledged functional programming language chock full of richness.

In this session, targeted at false beginners, you will be introduced to some of this richness in an exciting game show format -- complete with prizes.

You will learn about functions, objects, closures, and revealing modules. And you'll leave a more informed JavaScript programmer (unless, of course, you already knew JavaScript in which case you'll just leave with a prize).


After the Code is Done: Ops4Devs

You've written the code; you have a great product. Now it's time to release it to the world. However, too many developer's look at the world like this:

1. Write Code
2. ?
3. Profit

Ops4Dev helps developers fill in step two, and along the way improve stability, repeatability, predictability, and sleep through the use of techniques and best practices for operations.


Clojure Koans

The Koans walk you along the path to enlightenment in order to learn Clojure. The goal is to learn the Clojure language, syntax, structure, and some common functions and libraries. We also teach you culture. Testing is not just something we pay lip service to, but something we live. It is essential in your quest to learn and do great things in the language.


Scaling PHP

Overview on how ApproveIO (A payment gateway startup in Columbus) uses PHP to build a highly scalable infrastructure for a payment gateway.


Tools are for Smart People

Software projects are filled with repetitive processes as well as new and familiar problems.  Smart people use tools to eliminate monotony, leverage existing solutions, and overcome new challenges. There is an increasing array of tools available to today's web developers. We'll delve into the growing importance of tools in web development and how they help developers work smart, not hard.