User login

Michael Neel's picture

Back into gaming, thanks to Jeff


Update: The crew have made a video explaining the site!

A decade ago I would have no problem talking about the latest in gaming.  Then I got into MMO's, and that led to me leaving gaming all together.  There is something about realizing "gameplay" is a nice marketing term meant to cover up the fact you're just playing Diablo for $15 bucks a month to turn you off the industry completely.

Then came my Wii, and an XBox 360 followed.  The Wii is great for games with groups and my younger daughters, but games like Legend of Zelda: Twilight Princess reminded me there was another class of games I used to play, before the MMO blight.  Playing Mass Effect, Bioshock, and Gears of War on my 360 reignited my passion for gaming.

I've always hated the mainstream game review sites like IGN and GameSpot - the reviews never feel honest and I have to spend a good deal of time reading user reviews to gauge the game.  I have many things going on in my life; I don't have time to waste on bad games.  I started following Ars Opposable Thumbs and soon learned of the new site Jeff Gerstmann was behind.

Jeff was the editorial director of GameSpot, and was fired for giving bad reviews to games that publishers were advertising on the site.  WikiPedia has some of the details, and Jeff himself doesn't talk about it, but it's pretty obvious what went on.  The fact many editors left GameSpot in protest after the firing speaks volumes.  I found Jeff's podcast, and became instantly hooked.

The "bombcast" is easily one of my top three podcasts - first just Jeff and Ryan Davis then later adding Brad Shoemaker and Vinny Caravella to the cast.  These guys all hail from GameSpot, and are not your polished art critics, but gamers who speak about games the same way you and I would.  They are honest, clear, and pretty damn funny.  These four have also worked on launching a new game review site:

The website is part news, part wiki.  The search feature is slick, and the pages go beyond just the games and into the characters, developers, and concepts.  The amount of user contributed content is staggering, considering the site has been live for little more than a week.  If you haven't checked it out already, and are into gaming at any level, take a look at Giant Bomb.

Michael Neel's picture

The ASP.NET MVC Definition

image A few days ago I posted a question to the community, looking for a definition of the ASP.NET MVC framework that didn't depend upon faults in ASP.NET WebForms - after all, faults can be fixed.  I also do not like the implication that ASP.NET MVC is for those looking to use the MVC pattern, as I've been using that pattern for a decade and I use it in WebForms today.  Credit goes to Lucas Goodwin for helping me with the following definition:

ASP.NET MVC is the evolution of Classic ASP.

I've helped a number of developers move from Classic ASP to ASP.NET, and each one has said to me, "wow, this is nothing like ASP" once they groked it.  This is true, and mostly because WebForms introduced an event based paradigm to ASP.  Classic ASP had problems, but was the lack of events one of them?

Classic ASP's number one problem was lack of separation of concerns.  This is the same reason I don't like PHP, my code is far to friendly with my HTML (gotta keep em' separated).  True you can discipline yourself to provide a separation, but it's not something the framework designers gave much thought to.

WebForms fixed the separation issue, but at the same time brought in the event model.  I liked this "magic controller" approach, because it saves me the time I used to spend wiring up controllers that just ended up back at the same template I started with.  (For the record, I was mostly working with python before moving to WebForms, first with a framework called Albatross and later SnakeSkin)  An event model is not required to have separation of concerns, and this forced an event model on to many Classic ASP developers.  So I will add a bit to the definition:

ASP.NET MVC is the evolution of Classic ASP, adding an easier separation of concerns while not using an event based model like WebForms.

So do you agree or disagree?  I like this definition because it's not claiming either approach is better, and I can look to the pros and cons of an event based model to guide me in selecting MVC or WebForms for a project.  It also is less likely to cause rioting in the streets at your next user group meeting when the topic comes up!

Michael Neel's picture

The MVC Minefield

There is a bit of turbulence in the ASP.NET airspace over MVC (yes, I'm making this post while on the fight back from the ASPInsiders Summit).  Even among the ASPInsiders, who are supposed to be at the cutting edge of ASP.NET, there is little agreement over what is MVC and what it's for.

MVC, or Model View Controller, is an age old pattern found in many places.  ASP.NET providers follow the pattern, as does Service Oriented Architecture.  The general idea to have some code called a Model that works with your data storage, other code called a View that displays the data, and last plumbing code that ties these two together, called the Controller.  I call it a pattern because implementations differ in the details - the View may render a button, but when the user clicks that button should the click action be handled by the View or Controller?  The Model and View should know nothing of each other, but is the Controller allowed to be tightly coupled to them both?  (If your first thought above was the Controller should handle the button action, think now what this means about being loosely coupled between the View and Controller).

ASP.NET MVC is a framework in development that is intended to closely match the MVC pattern.  The minefield lies in answering the pragmatic question of what does ASP.NET MVC offer over WebForms, and when would you use MVC?  In taking with those excited by MVC the reasons range from supporting TDD, clean URLs and avoiding postbacks by sending actions to a controller, better control over HTML output (including getting rid of ViewState), and being closer to the http protocol.

TDD, or Test Driven Development, will always come up in any ASP.NET MVC conversation, but TDD itself isn't an explicit part of MVC.  The MVC pattern is very amendable to TDD however, and thus the association.  I generally support testable code even if there are no tests around the code.  Testable code is much easier to maintain, enhance, refractor, and replace.  I don't find the process of test-first development helpful, but I do write tests in the same session as the code when I know I'm writing some critical piece of functionality that needs to survive multiple versions of the software.  As Hanselman noted, I'm like the "person who goes to church on Easter and Christmas" and I'm sometimes looked down upon by the congregation who attend weekly.  I'm okay with this, but I have some reservations with MVC as a framework for TDD.

To say you cannot test WebForms is a strawman argument; there is no trouble in separating the Model and testing it thoroughly.  Depending on how you go about it, you can also separate the Controllers and test them - I generally have very simple Controllers that pass user input into the Model as is, so testing the Controller is not that important to me.  Testing the View in WebForms is very difficult - and this isn't specific to WebForms.  My objection to claiming MVC has testable Views is the implied definition of testing.  Verifying the output HTML of a View is not helpful at all - it's just string comparison.   I want to write tests like Asset.JavascriptRunsOnSafariMac() and Assert.IE8RendersSameAsFireFox3().  If MVC could do that, then I would be switching to it today!

WebForms provides a very robust SiteMapProvider interface that makes it easy to clean up urls of dynamic content.  Global.asax can be using to control routing of requests (in fact this is how MVC does it as well).  The biggest problem I've had here isn't WebForms fault, but IIS6's inability to allow ASP.NET to handle requests without an ASP.NET extension in them: this is solved in IIS7.

You can get fine grain control of HTML in WebForms, ever with just the stock controls.  There is also an entire collection of HTML server controls to match HTML tags to make it easy to generate HTML from code (I hate seeing tags hardcoded in source file, feels dirty and hackish).  About the one thing that is hard to do in WebForms I deal with somewhat often is controlling the client side ID's, which can become quite long and fugly looking.  For CSS you can just assign a class name instead of using ID references (and there aren't many places I'm using CSS IDs except for layout divs that aren't coming from ASP.NET controls anyway).  Javascript is trickier; you need to inject a reference of Control.ClientID on the server in the client script, and the need is much more common than with CSS.  If you have an external JavaScript file this can get worse, but I believe that an external JS method should take the ID of the control they work with as a parameter making it easier to read the external file without the need to reference the aspx code.  At the end of the day however, I'm not willing to throw the "baby out with the bath water" and will lean more on Microsoft to fix this issue in WebForms rather than jump to MVC.

The last reason for MVC I mentioned, being closer to the http protocol and its stateless nature, I simply don't grok.  Any application with a basic level of user interaction will need to mask the http protocol's implementation details to provide a positive user experience.  Web programmers of all frameworks and languages have realized there are only a few methods to solve this problem; cookies, url parameters, and hidden fields.  Any state solution will involve one or all of these - even if state is stored on the server's side.  WebForms supports all of these methods, and you can disable things like ViewState (hidden fields) if desired.  (I am aware there is also ControlState that will be still emitted if ViewState is disabled, but I'm willing to say that if these few bytes are an impact you are working on an edge case).

I'm not here to bash ASP.NET MVC - to the contrary I'm here to help by outlining the faults in the current arguments for MVC.  If MVC is defined by the features in or not in WebForms, then it's going to be hard for those deep into WebForms to see value in MVC.  It becomes a song of "anything you can do, I can do better (no you can't, yes I can)" and will deadlock when neither side is listening to the other.  ASP.NET MVC need to be defined without claiming faults in WebForms, because that only says use MVC because WebForms is broken - leading one to say, "why not just fix WebForms?"

I wish I could end here with a new explanation of ASP.MVC meeting the requirements I've just stated, but I'm afraid I can't.  This is a fault with me, and not the MVC framework - I'm too close and deep into WebForms to see a need for MVC I can't fill already.  It's my hope and request that instead of seeking to pick apart this post, the supporters of MVC come out to define MVC without attaching that definition to the perceived faults (for that's the minefield) of WebForms.

How Did I Get Started In Software Development? (yeah, me too)

So, I have been avoiding writing this for a while, but since Mike was kind enough to call me out, I guess I had better give it a stab.

How old were you when you started programming?

After reading everyone else's memes, I am almost embarrassed to not be able to say that I have been programming for over a decade.  To be honest, I did not get seriously into programming until I was just about out of college.  It has been a wild ride ever since!

What was your first language?

My first language was the web, ;).  Basically, I started w/ PHP, HTML, and JavaScript.   I distinctly remember dreaming up my first project and simply attacking it w/ a passion.  I bought / read every book that I could get my hands on and practically stayed up all night programming and discovering the thrill of computing (does that seem as lame as it reads?  lol).  My wife was very patient w/ me at the time and would actually suffer through my excited explanations of how I just made text change on the page without having to request the page again.  Craziness! 

function changeLabel(){
if (document.buttonDemo.HelloWorldButton.value==" Hello "){
document.buttonDemo.HelloWorldButton.value=" World"
document.buttonDemo.HelloWorldButton.value=" Hello "

What was the first real program you wrote?

My first program was actually an online DnD engine.  In college, we played DnD all the time, but I ended up moving back to my hometown, which was about 2 hours away.  Due to this, I did not have the chance to play DnD anymore and I really missed gaming with my friends.  Late one night, the idea struck me that I could create an online forum and battle system and role play online.  Not only could I play DnD w/ my friends, but I might be able to charge a very low rate for it and make some $$.  Brilliant!  At the time, I never stopped to consider that there were probably 10,000 other programs out there doing just that, so I took it upon myself to write one. 

I have to admit that I was pretty proud of my work.  I made my own version of forums that incorporated dice rolls, skill checks, etc.  I made a character generator which included all spells, skills, items, etc.  I supported all the main races and classes and even wrote a script that assisted with leveling your character.  Also, I created a DM panel where I could queue battles, create monsters, DM players, etc. 

Finally, I created an encounter system.  I was so proud of this encounter system.  I created an image grid that allowed me to load characters, monsters, objects, etc onto one surface.  Then, in turn, each player could login and attack nearby monsters or players, moving themselves about the grid.  I managed to get the image to load by using nested for loops in PHP and some amazingly fancy JavaScript (fancy at the time at least).  I almost wet myself when I thought to nest for loops in order to construct a grid (almost like the time I first discovered how to use recursive functions).  It was so much fun!

Sadly, I got about 80% through the project and ended up getting a job as a Python / Web developer.  Starting a horrific trend that would carry over to the 10,000 iterations of my website, I decided to re-write the system in Python.  At this point, the project slowly fizzled out and I never saw it through to completion.  :(


All in all, I call the project a success though because it gave me the drive to propel me into being a programmer.  Eventually, it made me money as well - just not quite in the same way I originally envisioned it.

If you know then what you know now, would you have started programming?

Of course!  I have no regrets for the choices that I made while I was younger and the pursuits that I followed then.  However, I would love to know where I would be now if I had started down this road at an earlier juncture in my life.  Que Sera, Sera.

If there is one thing you learned along the way that you would tell all new developers, what would it be?

One thing?  There are about 10,000 but I will try to keep it to three.  First off, have fun.  If you don't have fun, you will burn out and end up hating yourself and your profession.  Programmers tend to take themselves too seriously.  Sometimes you need to back up, have a good laugh at yourself, and allow things to come naturally to you. 

Two, learn!  Never stop learning.  Don't get stagnant and always be pushing that next threshold.  Do you really think that the world will wait for you to catch up?  It won't.  Don't allow yourself to become stagnant.

Finally, programming is about people, not computers.  It took me a long time to recognize that one.  Be social, meet new people, and get new ideas.  Participate in programing events and your local user groups.  Doing this actually brings around to the first tip...  have fun.

What's the most fun you've ever had... programming?

I probably had the most fun as a programmer when I was working with Dylan and Gabe back at Mediapulse.  At the time, I was really learning things by leaps and bounds, pestering poor Gabe to death with a hundred questions a minute.  I love to learn, especially when I have a mentor to show me where I am screwing up along the way.  On top of all that, we really had a great office environment, so it was more like hanging out than working.  We got a lot of projects done (those guys were rock stars!) but, more than that, they quickly became among my closest friends and comrades.  :)

Who am I calling out?

Well, how about....   YOU!  (all the other good ones have already been taken, lol)


Take care.

Michael Neel's picture

Review: The Annotated Turing by Charles Petzold

image Let me start by saying while reading The Annotated Turing: A Guided Tour through Alan Turing's Historic Paper on Computability and the Turing Machine I encountered two other reviews worth note.  The first review by Jeff Atwood  focused on Alan Turing's personal life as a gay man in the first half of the 1900's and is light on reviewing the actual text of Turing.  The second review is by Deirdre Sinnott and does cover the text in depth, but one must carry a certain level skepticism (however undue) toward Deirdre given her relationship to Petzold.  I must also alert the reader to my own bias, as I have written well of Petzold in the past and was sent a (signed) copy of Turing.  I did however purchase the book before I knew a copy was being sent to me.

For the impatient, busy, or otherwise opposed to reading what has become a lengthy review, I will save you the investment of time by saying now I highly enjoyed this book and would strongly recommend it to any programmer, mathematician, or person with an interest for numbers.  I will qualify this recommendation with the disclaimer that if you do not have the time to devote to reading the remainder of this review, you may not have the time needed to read and understand the book's content.  I found myself only able to read 10-20 pages a night of this scant 359 page book due to the amount of mental engagement demanded by the subject matter; which only worked to increase my enjoyment.  Before we get into the content of the book however, let us take a moment to understand the actors involved...

Alan Turing is our hero in this tale, a brilliant young man who leads a troubled life and finds refuge in a love for numbers.   Our narrator, Charles Petzold, shares a great many things in common with Turing, including this love of numbers and the mind to process these numbers in complex ways.  I have read many of Petzold's books on Microsoft Windows programming and one constant is that his examples often use calculus or trigonometry equations in a way that the example itself teaches as much on mathematics as the API the text covers.  Mathematics and computers, I'm learning, are tied much closer together than most would assume.  The last character is myself, the reader, who poses only a basic understanding of college level mathematics (enough to meet CS requirements) and who once wrote a two page mathematical paper that was, in the words of the professor, "an amazing level of insight and effort, but 100% flawed and incorrect".  I mention this because while I was not able to understand every formula and proof covered in Turning, this did not detract from my understanding of its significance to the material.

The events in Turing surround Turing's paper "On Computable Numbers, with an Application to the Entscheidungsproblem."  I will probably offend true mathematicians with the following explanation of the Entscheidungsproblem (and again later in this review), but simply put the Entscheidungsproblem asks for a set of steps one can use to determine if a given formula has a solution (but not what that solution might be).  Consider A² + B² = C², which we know is true because we can plug in 3, 4, and 5 and see that it works. What about A³ + B³ = C³?  Before we start trying some random numbers it would be nice to know if there even is a solution - and this is what the Entscheidungsproblem is all about.  (My method would be to try some random numbers, I'm sure a mathematician  would start with a much more reasonable and fruitful approach.)

Turing proved that no, there is not a universal method for determining if a given formula has a solution.  Turing was not the first to prove this: 6 weeks before Turing's paper was published in 1936, Alonzo Church published a paper that also proved there was no method for the Entscheidungsproblem.  Turing's solution was so novel and unique in it's approach however, that it has the rare honor of also being published, and Turning added a proof to his paper that both methods are equivalent.

Truth.  To normal folk truth has a somewhat soft definition, but to mathematicians truth has strong and rigid meaning.  You may know something to be true simply through common sense, but in the world of mathematics something must be proven in concrete formula before it can be accepted as true; until then it remains unproven and will not even be considered worthy of assumption of truth in all but the most extreme cases.

To tackle the truth of the Entscheidungsproblem, Turning invented (on paper) a machine that could read a sequence of commands that expressed a method to calculate number and print it as the result.  This allowed Turing to work with numbers like π without needing to calculate the exact value (something no easier in 2008 than it was in 1936).  Further, Turing devised a method to give every possible sequence of commands a unique number, called a Description Number, or DN.  The DN for a machine that computed π might be DN 314,257.  Last, Turing invented a machine that could be given a DN and generate the sequence of commands that DN represented, then pass this sequence off to another machine to calculate the result.  Turing's machines worked in binary, i.e. 0's and 1's only, so Turning then proved it was not possible given a DN to determine if the calculation machine would ever print a 0 as a result of calculation, thus proving there was no universal method to determine if a given formula had a solution.

Just reciting the list of actors and events doesn't convey the story, we must also discuss the meaning and impact.  Much of The Annotated Turing is true to the title; Petzold presents the unmodified original Turing paper and provides annotations to help understand the material, while also citing related material and events.  In this capacity, Petzold is unsurpassed - the bibliography for Turing cites over 90 books and papers (including a humble citation of Petzold's own Code) and one is given the impression Petzold read many more books not cited.  Petzold's greatest contributing to Turing's work comes at the end however, when he explores the impact Turing had on the fields of mathematics, computer science, and philosophy.

Any developer reading above recognized that Turing machines are computers running programs.  What may not have been obvious is that Turing's proof also means that no program can be written that will determine the output of another program.  That we cannot break this limitation, and our new platforms, languages, and computers will "at best [...] only do jobs faster."

The philosophic impact is far greater, for we humans qualify as Turing machines.  Other philosophers and mathematicians have come very close to a proof that the universe is fundamentally digital, can be expressed as 0's and 1's, and qualifies as a Turing machine.  If true, this abandons our romantic notions of free will, for as a Turing machine in a digital universe our actions are calculable.  Our perception of free will is merely the misunderstanding of the inability to predict the output of our own Turing machine, the mind.

I do not assert I've laid out a solid argument in the above paragraph - for that you'll need to read Turing and possibly the references cited by Petzold.  Having just finished Turing hours before writing this review, and being a person who has rejected the idea of fate, I'm still a little uneasy myself.  It's as if Alan Turing sat next to me on the airplane and said, "Oh fate?  It exists, I have a mathematical proof here somewhere in my backpack I did last summer when I had some spare time."  At least I don't have to tell the major religions of the world I was wrong about them too...

Last, I'd like to mention that in planning for CodeSock this summer, we were able to get Wiley Publishing (publisher of Turing) as a supporter.  I requested and was granted 5 copies of The Annotated Turing to give away at the end of the conference.

Michael Neel's picture

Knoxville takes part in the Ann Arbor Give Camp

This past weekend Knoxville took part in the Ann Arbor Give Camp thanks to Nathan Blevins.  Nathan organized a team of developers (and one designer!) in Knoxville with Ben Farmer, Jenny Farmer, Dylan Wolf, and Joe Simpson.  The team assisted in two projects for the give camp: Wonder Puzzle and Ann Arbor Hands-On Museum.

Josh Holmes will post more details on Wonder Puzzle, but the idea for the site is simple: make it easier for parents of children with undiagnosed medical problems.  If a child has a diagnosed illness, there are support groups for that illness a parent can turn to, but the parents of an undiagnosed child can find themselves isolated.  To help Wonder Puzzle the Knoxville team updated their site's design and moved the content management to Sitefinity.

Knoxville (through Dylan) was able to assist in the Ann Arbor Hands-On Museum project by providing some PHP support.  The museum's goal is to inspire people to discover the wonders of science, math and technology.  I wish I had more info on what this project was, but I'm sure details will be posted on Michael Eaton's or Jennifer Marsman's blog shortly.

I confess I really hated missing out on the give camp (I was on the road driving back from my speaking tour).  Not because I'm an awesome, caring guy who loves to give back to the community, but because I could have hung out with my peers and wrote code all weekend; charity is a bonus.  I'm glad to see the give camp team isn't stopping to rest and has formed a group to setup future give camps.  Nathan is part of this team, so I know I'll be a part of the many give camps to come!

Ann Arbor Give Camp (Knoxville Satellite) - Wrap Up

It is the day after the Ann Arbor Give Camp and I am finding that I am still reeling from the experience.  In one word, the Give Camp was awesome.

In a previous post, I covered What is a Give Camp and stated that the ETNUG here in Knoxville was trying to set up a remote Give Camp in order to assist our programming brethren in Michigan.  For those of you that don't like links, the basic idea of a Give Camp is this:

  • Find a group of Charities that have need of technical solutions (mainly application development).
  • Find a large group of programmers crazy enough to deny themselves sleep for a weekend in order to work on the charities projects.
  • Get said programmers together, divvy out tasks, and buy lots of Red Bull... lots and lots of Red Bull.

Although it sounds like a crazy idea and organizational nightmare, the organizers of the Ann Arbor Give Camp were able to pull it off (partially due to the fact that they were crazier than the idea itself).  As things turned out, there were some equally crazy people in Knoxville, who were willing to do what they could to assist in the effort.


The Knoxville Remote Camp Team

We issued a call out to programmers here in Knoxville to see if anyone would be willing to act as a remote team and work on some of the projects that Michigan would pass to us.  I am happy to say that we had good turnout.  The Knoxville remote team consisted of 5 people (including myself):

  • Ben Farmer - Programmer extrodinaire and all around swell guy - He mainly assisted with the WonderPuzzle project and worked very diligently w/ Joe to make sure the conversion process when smoothly. 
  • Jenny Farmer - Design connoisseur - Jenny worked directly with Phoebe, one of the creators of the WonderPuzzle concept, in order to make sure that the new WonderPuzzle site would match the overall vision of the project.  Her final design, as anyone in Tennessee or Michigan would attest, was excellent.
  • Dylan Wolf - Programmer and impromptu-PHP-Jedi -  Dylan worked mainly on the Ann Arbor Hands On Museum project.  Although Dylan is a solid .Net guy, his experience in PHP allowed him to assist the Michigan team in working through the project with good speed.  During his down time, Dylan multitasked on the WonderPuzzle project as well.
  • Joe Simpson - Programming guru and man-with-infinite-patience - Joe worked with Ben and I on the WonderPuzzle project.  Along with Ben, he made sure that the new site not only met the parameters requested by the client but also contained as much of the previous site's functionality and data.

I personally want to thank these guys for donating their time and efforts to this cause.  To be honest, time is one of the most valuable things we have and they gave theirs without hesitation.  Thanks guys - you all really made a difference!

The Knoxville Remote Camp Projects

Basically, the Knoxville Team took on one main project, WonderPuzzle, and assisted with the Ann Arbor Hands On Museum project.  Both projects supported very worthy causes and we were delighted to be able to work with them. 


WonderPuzzle is a site that is dedicated to those families who have children with disabilities whose cause cannot be diagnosed by doctors.  WonderPuzzle's main goal is to provide a site for such families to gather information, share stories, and establish a supportive community. 

In regards to their site, our team had 2 main tasks:  revamp the site's look and move the existing site from a dot Net Nuke base to Sitefinity.  For those of you who have yet to suffer through dot Net Nuke, it suffices to say that, although it is a system with huge functionality, it is very heavy difficult to manage and harder to customize.  We were able to complete this project on time, creating new templates for the site, setting up and creating custom controls for Sitefinity, and the moving as much of the previous site's data as possible.


Ann Arbor Hands On Museum

Sadly, I have very little data on this project.  During some email exchange with some of the Code Camp's organizers, I mentioned that one of my guys (Dylan) had some pretty extensive PHP experience.  In response, Mike Eaton sent me the email address of a team that was struggling with working through a PHP project which I passed on to Dylan.  To my amazement, Dylan was on Skype within 10 minutes, chattering away with the Michigan team.  I found myself amazed by the fact that they were working so efficiently despite the distance and the fact that they had just met. 

Special Thanks

The Give Camp can only be as good as the people who participated.  Although everyone is a hero in my mind, there are a few persons who I would like to thank directly for their assistance for getting the Knoxville Satellite camp up and running.  Without further ado:

  • Jennifer Marsman - She was of the organizers of the Give Camp and was an immense help to me in getting the camp running and keeping me sane.  Whenever I need anything, Jennifer was there working to make sure I had what I needed.  Thank you!
  • Michael Eaton - Initially, Mike worked with us in organizing our first project.  Despite the fact that the Knoxville Team ended up with a different project, Mike kept in touch throughout the weekend, making sure we had what we needed and offered encouragement along the way.  Thanks!
  • Josh Holmes - Josh served as our main contact for the WonderPuzzle project.  I am afraid that I ended up pestering him to death while getting assistance with problems that were the result of working remotely.  Despite my constant nagging, Josh had an excellent attitude and did everything he could to make sure our team was up and running.  Thank you.
  • Wally McClure - Wally was the one who originally suggested the Knoxville Satellite Team to the ETNUG.  Furthermore, he was kind enough to swing by Saturday to check on us and make sure that things were going smoothly.  Thanks!
  • Mike Neel - Although Mike was unable to work directly on the Give Camp, he was able to contribute his time and resources to help with getting the word out.  Also, Mike was kind enough to drop by give the team a gift for working on the camp.  Thank you.

To be honest, if this were complete, it would be much much longer.  I specifically wanted to thank these guys / gals because they were to instrumental in keeping me sane and also allowing the Knoxville Team to operate. 

Finally, I also want to thank Alan Stevens, Gabe Cooper, and Wes Idell.  They sincerely wanted to participate with us, but were unable to join us due to unforeseen circumstances that cropped up at the last moment. 

In Conclusion...

All in all, the Give Camp went wonderfully.   I have yet to see official stats' but the Camp completed around 14 projects in 3 days.  That is a feat in of itself.  Furthermore, I got to work with some pretty amazing people and had a blast while doing so.  The group dynamic was amazing in that everyone was so eager to help and so excited just to be working.  I am certainly looking forward the next Give Camp.  How about a Give Camp Knoxville?   ;)

Take care.


There have been quite a few other posts about the give camp.  Here are a few others to check out if you so desire!

DylanW's picture

How did I get started in software development?

OK, Mike just tagged me with this meme, so here we go:

How old were you when you started programming?

I was in 5th grade. (I don't remember my age at the time, but if someone's really interested, I can do the math.) I started out by typing in programs from 3-2-1 Contact magazine's "BASIC Training" column into QBasic. QBasic has a pretty good help feature, so I just moved on from there. Oddly enough, my main drive was to learn how to program video games, which (obviously) never really happened.

What was your first language?

QBasic. I later ended up picking up another BASIC variation called ASIC (because you could compile it), and then Visual Basic 4 from there.

After several failed attempts to pick up other languages (Java, and basically whatever free compilers I could get my hands on), I got into web programming with Perl. From there I went to PHP, then Python (after I took a job with Mediapulse), and finally C#.

What was the first real program you wrote?

I can't remember. I had a couple of little DOS games that I did in QBasic and ASIC that were pretty polished (relatively speaking).

In 8th grade, a friend and I created a customizable quiz program for a school project and we tried to sell that. It was in ASIC 1.0, which kind of sucked compared to QBasic. Didn't sell a single copy, but I eventually wrote a more polished version with mouse support and color after ASIC 5.0 released.

If you knew then what you know now, would you have started programming?

Definitely. And I would have had a better idea of what the next step was after BASIC. (Hint: it wasn't picking up a "Java by Example" book and trying to write graphical browser-based applets.)

Whether I would have made it my career, that's a different story. Likely so, but I might not have felt as sure that it was what I needed to do. (More on that in the next item.)

If there is one thing you learned along the way that you would tell new developers, what would it be?

Software development is a business, just like any other. New developers tend to think they can solve all the world's problems--simplifying and automating business processes, creating applications to manage data that's currently sprawled across several Excel spreadsheets, and things like that. I know; I've been there. The reality is, things are like they are not because no one's ever offered to box them up in a pretty little application. The problem is they're either very complex problems, or they're simple, but people don't take the time and effort to streamline and fix them. And if you want to fix the problem, you'll have to understand why it's like that in the first place, or you'll just be adding to it.

You will have to learn a little bit of business analysis. You will have to deal with people climbing the corporate ladder. It sucks, but just because you're an IT geek doesn't mean you get to live in a world full of nothing but code and idealism. You'll be able to accomplish a lot more good if you prepare for this--just don't get sucked into it.

What's the most fun you've ever had ... programming?

When I was at Mediapulse, they pulled me off of contract work to work on a product called DealStream. Basically, it was a web application that would let funds handle applications for funding. They pulled me in after doing all the high-level planning, so I got to refine the application process and figure out how it translated to a web application. Then I got to code it, and had a lot more leeway to do it right (since it was a product we'd be maintaining and reselling) and make it really customizable. I built the database, then created a Python module to handle the data and process (using a ORM library I'd written), tested the crap out of it (not actual unit tests, but I did step through every possible path in the process), and then built the web application. The great thing was, we'd been working with MySQL, Python, and Apache so long that we really knew our stuff, and so I streamlined deployment and configuration quite a bit.

I worked with our first client to refine it into something that met their needs. Once the first site launched, I took versioning very seriously, since every client had to have their own copy of the software deployed to our web server, and I wanted to avoid branching as much as possible for maintenance reasons. (It's not a product if every instance of the software is a customized version.) I even started writing a full documentation of the object model.

It was one of those projects that I put a lot of effort into, and just turned out great. (Well, from my perspective; I'm not sure how well it actually sold after I left.) Every time I write JavaScript, I wish I had a copy of the code. I had some really sweet text validation and formatting functions in there.

Who am I calling out?

Since I'm not sure who reads my blog regularly, and Mike has called out most of the usual suspects, let's go with...


DylanW's picture


I saw on Twitter today that the KnoxOnlineGamers forum launched. They're wanting to build a community of gamers in the Knoxville area--online, board, and tabletop.

Also, if you're outside of the Knoxville area, check out TVGA. We've got a few members in the Knoxville area, but for the most part, it's Athens and Cleveland right now. (If you sign up, let me know so I can activate your account--we've had a lot of spammers recently so I have to approve accounts before they can post.)


DylanW's picture

The Internet is not the real world

I was talking with one of my friends who's not a programmer today, and mentioned the term "Microsoft Developer Evangelist." His reaction was priceless. "So, what, there's this guy standing on a street corner screaming 'Praaaaayuuuhhs Microsoft!'?"

It's funny, because to anyone in the industry, the term "evangelist" wouldn't even register. Sure, I've thought about how odd it is when you consider the religious origins of the term, but I've been clued into industry marketing--and not just Microsoft, I've seen it all over--enough to know what it means. Or at least enough that it doesn't stir up bizarre images of computer cults.

It's just funny, because I can't imagine anyone on the inside saying that. Not in a blog, not in a forum, and not on Twitter. Hey, we've got an image to maintain here. We wouldn't want people to think we didn't understand the terminology. And we sure wouldn't want to think we weren't passionate by making light of the craft.

It just reminds me that, as great it is to keep up with the community online, and talk the language, and stay informed, sometimes we need to step back and put down the Kool-Aid. At least enough to realize how funny we sound.

(Which reminds me of this blog post I ran across a while back.)