Vince Bullinger's Latest Blog Post
Twin Cities Code Camp 11 Wrap Up
Conference season is really getting under way now. Two big events in a week and a half. This past weekend, I went to the eleventh installment of Twin Cities Code Camp. If you’ve never been to Code Camp, you really should consider going. They’re held twice a year: in April and October. They’re 100% free, and are held on the weekends, so you really don’t have an excuse not to go. I’ve gone to the Chippewa Valley Code Camp and the Iowa Code Camp, both decent drives, so it really doesn’t make a lot of sense to me when developers don’t put any effort into learning outside of what their boss forces them to learn.
The Twin Cities Code Camp is now a two-day conference! On the first day, I got things rolling by going to see Getting Func-y with C# and F# with Keith Dahlby. Keith gives good, valuable talks, so I recommend going to sessions he gives. He started off by describing the basics of functional programming and then showed how we’re using a lot of functional concepts or ideas in C# anyway. LINQ was heavily discussed. Things kind of broke down at that point, with what was meant to be a short Q and A about the concepts turning into an actual debate about whether or not they’re even useful! There were two people actually arguing against LINQ! A small piece of me died. Their arguments were bad and amounted to “I don’t understand it, therefore it’s bad.” Or acting like changing or learning something new is a bad thing. After that finally washed over, Keith talked about why someone would then use F# instead of C#. He listed the following as reasons:
More sophisticated type inference
Immutability by default
Functional data structures
Curried functions and partial application
Computation expressions
The interesting part about that list is that I don’t see these as imperical facts as to how F# is better than C#. It seemed like Keith was just listing off some tenets of F#. Some of us actually don’t think immutability by default is a good thing, for example. I am known to use variables on occasion. Shocking, I know. I do recommend learning functional programming even if you never use it professionally. And Keith’s very knowledgeable on the subject, so this was a great talk to attend.
For the second talk, I went to HTML5 Graphics: Pretty Pictures for Practical Processes by Jon Stonecash. I think Jon wrote a really nice library in C# for creating HTML5 graphics from scratch just for this talk! If he didn’t gank this from somewhere else, that’s really impressive. He went over how he was generating it all and it was very nicely done. He used it to show how you can write real, practical software for the “real world” instead of just making pretty pictures and crappy games, etc. His demo included what looked like tracking products through the order, packing, shipping process. Boxes of steps in the process had the number of items in their queue step, showed where they went, if they were rejected, etc. It certainly was a good example of how this can be used to visualize something in a meaningful manner. Jon’s delivery is interesting. He seems right at home at the University of Minnesota. He both sounds and looks like a college professor.
Next up, I went to Practical Monads in C#: Maybe<T> by Jordan Terrell. I figured he’d start out by explaining what a monad is, but he actually did that late in his talk. Strange. Most of the talk was about his implementation of something called Maybe. It’s something used to represent zero or one value. It works with all .NET types, both value and reference, unlike the nullable types. I’m not going to describe it in detail, but if you’d like to learn more about it, you can do so here. It’s an interesting concept when being introduced to monads and kind of takes you further down the functional rabbit hole.
After that, I attended Building Metro-style applications for Windows 8 by Steve Peterson. He’s a principal architect from Microsoft, so he had a lot of good content. He talked about a handful of interesting things. He mentioned that Visual Studio Designer is now going to share the core authoring UI with Expression Blend. He also brought up “Blend for HTML.” It’s built for Windows 8 applications, not web sites. I had to ask for clarification, if I had heard correctly. You really write HTML, JavaScript, etc. for Windows 8 applications. Very interesting. Other too-complex-to-discuss-here topics included: Client Hyper-V, WinRT asynchronous API design, GPU compute and C++ AMP. Also, the async keyword!
For the last talk of the first day, I went to see Distributed Version Control: Attack of the Clones by Keith Dahlby again. I wasn’t sure what to expect from this talk, but I knew it would be good as Keith was giving it. As he warned, it ended up being a bit of a rehash from a previous talk I had seen from him – git commands like rebase, cherry pick, stashes, reflog, bisect. Still valuable, but I didn’t learn a whole lot of new things to mention. He did bring up whygitisbetterthanx.com.
During the prize giveaway at the end of the first day, I won an XBox 360/Kinect package!
I started off the second day by going to see Level-Up Your Win7 Kinect Apps by Mike Hodnick. On the first day, there weren’t any real conflicts in which talks I wanted to see. Day two started off with a conflict. I also wanted to see Brian Gorman’s talk on design patterns. But I thought this would be too fun to let myself miss it. Mike has done a lot of Kinect development, making demo projects for Avtex, so he could really speak from experience. He discussed some of the major concerns into which he’s run. Background noise is a big issue in Kinect development. You have to figure out what to do with other people in the scene, for example. He also talked about how cursor control is easy but flawed. Cursor control is controlling a pointer or cursor with your hand. It’s more of an out-of-the-box solution, but it’s rough, says Mike. It behaves differently when you have an abnormal body size, it has cross-body problems and he just thinks it’s outdated. A better way, he suggested, would be to use voice commands. Another concern to consider is lighting. He said that an app that he wrote just did not work when they were outside. Pitch black poses no problems, though.
Mike’s talks are always fun, so I suggest checking them out when you can.
Why does everyone code on the fly? Don’t do it. You will always fail, no matter how awesome you are. Your code will fail and you will look dumb. I’ve said it before and I’ll say it again. Just don’t do it. Have all the code pre-written. We don’t want to watch you code anyway. This happened in several of the presentations that I attended.
After that, I went to see KnockoutJS: Web Development Bliss with Judah Himango. Judah put rage comics all over his slides. I had to let him know that this was ill-advised. The fake StackOverflow question was funny, though.
Knockout.js, Judah says, is basically data binding for your HTML. It can be used to employ MVVM for JavaScript. It seemed really slick. I had never looked into Knockout.js before (typed very sheepishly), but I was really enamored with a lot of the concepts. It follows the observable pattern and has functions that use observables, too.
I’m really sold on a lot of what Knockout brings to the table and will certainly be looking into it in the future.
Next, I went to Intro to HTML 5 Canvas by Kevin Moot. This was a really fun talk. Kevin had a nice looking presentation format (using HTML5, of course) and it was really entertaining. The canvas is a 2d surface for drawing shapes and bitmaps and a 3d surface for polygons and shaders. When talking about a canvas arc, he showed a picture to illustrate the concept. Above, it said “canvas arc.” Next to it was a picture of a woman in medieval battle gear. Above it, it said “Joan of Arc.”
Not funny, Kevin. Not funny.
He went through a ton of mini-demos showing how every little aspect of the HTML5 canvas worked. He showed a couple of cool things. He turned a jpg into a drawing on a canvas. He had a video playing and wired up a button to basically take a snapshot of the video and post it as an image to the canvas. Then, instead of taking a single snapshot, he had it take a snapshot every ten milliseconds. Well, that’s basically instant, so it looked like a video was playing on the canvas. The video had a green screen, so he washed away the green pixels and replaced it with an associated pixel from a different background image. It was actually really cool. He topped off the talk with an extremely silly demo of an old guy dancing in a video and being plastered like a wall paper onto the canvas with different effects applied to them, with a bouncing cat with what looked like a pop tart on its back, leaving a rainbow trail around him… yep, I described that accurately. His whole presentation is online. I suggest not using IE: http://moot-point.com/presentations/canvas-part1/index.html. Use the left and right mouse buttons to navigate.
For the last presentation of Code Camp before my presentation, I went to Web Development with CoffeeScript and Sass with Brian Hogan. He’s literally written the book on things like this, and I’d seen him present before, so I knew this would be a good talk. Now, I went into this talk expecting to hear a lot about what CoffeeScript was and learn a lot about it and this “Sass” thing was just a tiny add-in that really wasn’t going to be a big deal. Interestingly enough, while I liked CoffeeScript, the real take home for me was Sass! CoffeeScript is really simple to pick up and hit the ground running. There’s very little to learn. It’s more like an extension to JavaScript with some nice added bonuses. The “fat arrow,” for example, allows us to pass “this” around into different scopes. There are more streamlined ways to do iteration, as well.
Brian said “there is no reason not to use Sass.” That’s pretty bold. But it really does give CSS “everything programmers want.” Iteration, modularization, mixins (functions), etc. Sass is a way to create CSS in a more programmer-friendly manner. You can make variables in your CSS. That’s crazy! Think of all the time you have to write the same color or margin, etc., in a large stylesheet. Instead, you could store it in a variable and re-use it over and over again. If your marketing department decides to change the background of the selected tab from pink to salmon, you’ll only need to change it in one location and it will just work. That’s awesome.
For the last session of the day, I gave my talk on Silverlight 5. Silverlight 5 will be out later this year and I just demo’ed every new thing I could. I included browser in browser, with the webpage in the in-browser browser showing this image:

I also demo’ed the multiple windows concept. The cool part was that you could put whatever you want in the child operating system window. So I put in just a portion of my page. But that page also had the mechanism to open a window. So above the button to open the window I had this picture:

I also did a PivotViewer demo with all the people I follow on Twitter, amongst many others, but those were the fun ones.
One annoying note to add: an 18-year old raised his hand every five minutes (probably more frequently) to ask tangential questions. They weren’t adding or helping with the presentation and made me go over and skip going further into detail on some things. I hope I wasn’t critiqued too harshly for that and I hope that doesn’t happen when I give this talk again.
At the end of the day, I won a grab bag from Telerik. Not an XBox 360/Kinect, but it’s better than a poke in the eye with a sharp stick.
Again, I really can’t urge more strongly to take advantage of learning opportunities like this. It’s not a chore. It’s a treat. And I’m not talking about the free food that they had all day.