jQuery Goodness

I have found that if I don’t give myself a deadline then I have a hard time concentrating on something to actually get it done.  I told Anita Luthra, the chairman of my local .NET user group http://triaddev.org that I’d be happy to do a talk whenever she needed.  She asked what topics and I threw out jQuery along with some others.  She liked the idea and so I’ll be presenting I presented on jQuery on Tuesday, September 14th.

Anyway, I had fooled with jQuery some but definitely didn’t consider myself proficient at it by any stretch.  I wanted to sit down and really pull through it and see what all I could do with this cool framework.  I despise javaScript.  I mean, I really despise it. I did write my own ajax callback code before there were many frameworks like Anthem or the ASP.NET AJAX library. It was doable, but it wasn’t fun – at least I didn’t find it enjoyable.

jQuery is Awesome

jQuery changes all of that for me. I enjoy CSS.  Well, I like the idea behind CSS.  I don’t really enjoy pushing pixels around the screen too much but I like having the control to do so if I need to.  I’ve always liked the selectors and jQuery utilizes those same selectors along with XPath to obtain different DOM elements on the page. This made it an instant win with me. But that is only one part of the story.

jQuery is only made up of one function – jQuery();  All the functions inside of jQuery return a jQuery object.  This allows chaining and it is very powerful, intuitive and just plain awesome. We will talk about chaining a little later.

javaScript allows you to create a shortcut for a certain function.  $ is a shortcut for the jQuery function so instead of having to type jQuery(…); you can type $(…);  Now that is pretty slick.

It is all about selection.  If you know CSS, you know how to use jQuery. Learn selectors because it will save you a world of hurt and lot of programming.  If there are things that just can’t be done with a CSS selector, then an XPath expression may be beneficial. The actual selector engine inside of jQuery is Sizzle. Sizzle was extracted from jQuery to become its own stand alone library if you didn’t want to use jQuery itself.  Check it out at http://sizzlejs.com/ and see all of the cool ways you can select items. Very useful documentation.

CSS Refresher

Now would be a good time for a refresher on CSS. CSS is made up of Selectors and Declarations.

p { color: red; text-align: center; }

p is the selector

There are two Declarations in this example. Each Declaration has a property and a value. The Declaration is what we use to style the HTML. In the above example, whenever a paragraph element is found it will be centered and red in color. Other typical items to select on are ids (i.e. #message) and classes (i.e. .required).

More information on CSS can be found at http://www.w3schools.com/css/ 

Since jQuery is just a framework built inside of javaScript to make working with javaScript easier, it makes sense that we have a basic understanding of a few things inside of javaScript.

javaScript is a dynamic language. Unlike C# you do not need to to associate a certain variable with a particular type. You don’t say this is a string and this is an int and this is a decimal or float, the language determines what the type is based on the data assigned to it at run time. There is no compiling a dynamic language. It is interpreted when it is ran.

JavaScript Basics

Declaring global variables in javaScript is as simple as:

myGlobalVariable = "Some Global Value";

Notice there was no type declared.  To declare a local variable you do the following:

var myLocalVariable = "Some Local Value";

By putting the var keyword in front of the variable, it lets jQuery know this is a local variable that should be disregarded once out of scope.

Functions inside of javaScript can be declared like:

function doSomething() {
    //Do something here
}

And then you call that function by:

doSomething();

Having a function with parameters is simply done by:

function doSomething(someValue1, someValue2) {
    //Do something with the values passed in
}

Again, the parameters don’t need to be typed with any syntax as the language determines the type at runtime.

Anonymous Functions

javaScript also has Anonymous Functions which allows you to define a function with no name to a variable or to be passed in as a parameter to another function.  This is normally used for callbacks much like the event and delegate features in C#. Anonymous functions have no name.

Here is an example of assigning an anonymous function to a variable:

var anonFunctionVariable = function() {
    //do what the functions does best
};
 
anonFunctionVariable();

Where anonymous functions really shine is when we need to pass in logic to another function.  We will see this a little later. We will utilize anonymous functions a lot in jQuery as we do AJAX calls.

Objects

JavaScript is an object oriented programming language. It was hard for me to see this too.  It really appeared like a bunch of procedural code but it relies on the fact that everything within the language is actually an object. But it also has the requirement that code has to be created in order. If you are creating a function to be used elsewhere in the code, that function must be interpreted before the code that calls it.

To instantiate an object in JavaScript you do the following:

var obj = new SomeObject();
obj.val = 5;
obj.click = function(){
    alert(‘hello’);
};

A short hand notation and the basis of JSON and a way consistently done with jQuery is using “object literal notation”:

var obj = {
    val: 5,
    click: function(){
        alert(‘hello’);
    }
};

If we want to select something from the Document Object Model (DOM) then we need to call the following:

document.getElementById('idofelement');

When we use a simple selector in jQuery, it just drops down and calls that function directly.

Needless to say this is just scratching the surface of javaScript but it should provide a nice base before we jump into jQuery. I believe that is enough of an introduction.  I do think it is good to know at least some of the underlying system of any framework being used and that is why I spent the time on it.

Let’s dig into jQuery

To actually use jQuery you can reference it locally or on Google’s CDN or Microsoft’s CDN. There are pros and cons to either host it yourself or link to the CDN. I’m not going to suggest one way or the other but to reference it locally you would do:

<script src="jquery-1.4.2.min.js" type="text/javascript"></script>

To reference it from the Microsoft CDN you would do:

<script src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.min.js" 
type="text/javascript"></script>

I already mentioned that jQuery is only one javaScript function that has a shortcut of a single character $.

The jQuery statements are consistent and are made up of a Selector, Action and Parameters. Some examples:

$(‘p’).css(‘color’,’red’)

$(‘#item’).hide(‘slow’)

$(‘div’).html(‘newly added text’)

All of the functionality within jQuery are handled by properties and functions within the jQuery object. Every jQuery function returns a jQuery object so they can be chained together.

One of the first functions we need to look at is the ready function.  The ready function will get kicked off after the entire DOM is loaded in memory.  This is faster than hooking up a function to the onload event.  The onload event gets kicked off after everything loads – even images and ads – so your javaScript could take a while to load and your page could appear sluggish.  The jQuery ready event can be executing your javaScript code as soon as the DOM is loaded and while images are still being downloaded.

A lot of examples will have everything in the ready event.  While this is definitely fine you can probably get better performance by moving scripts to the bottom of the page and having them execute at that time as long as it doesn’t need the entire DOM loaded.  There are times to use both but for these examples we will put everything in the ready event.

$(document).ready(function() {
 // all code goes here
});

So inside of the ready function we are creating an anonymous function that contains all of our code. We are passing jQuery our document and telling it to execute our anonymous function as soon as the ready event fires.  This is our first callback method.  When jQuery gets to this code it checks to see if the DOM is already loaded, if it is then it calls it immediately.  If it isn’t, then it pushes it on a stack to be picked up later and executed.

Inside of the anonymous function we can have as many other javaScript functions that we want.  We can definitely call other jQuery functions inside of this since it is just javaScript.

Let’s assume we have an h1 tag on our page that we want to change the text on. We can do that by writing the following code:

$(document).ready(function() {
 $('h1').text('My New Text');
});

To reinforce the notion of Selection, Action and Parameters, the above ready function has (document) as the selector. We are selecting the entire document. The Action is the ready statement and finally the parameters is the anonymous function.  Every jQuery statement is made up of these parts.

To demonstrate that we can have other functions within this anonymous function we could do something like this:

$(document).ready(function() {
    function getHeaderText() {
        return 'My Super Text';
    } 
    
    $('h1').text(getHeaderText()); 
});

If you just wanted to retrieve the text that was associated with the h1 tag already you could call the .text function again without passing in any parameters:

alert( $('h1').text()); 

For a complete list of the jQuery functions you can got jQuery’s API page.

jQuery Plugins

jQuery is very extensible. There are tons of plugins available.  Some of the ones I have found helpful are Validate (for form validation) which requires the plugin Form.  The most popular plugin is jQuery UI.

jQuery UI is broken up into 3 parts: Effects, Interactions and Widgets. Take some time to see what all is available in that plugin.

jQuery AJAX

AJAX stands for Asynchronous JavaScript and XML. Nowadays most people utilize JSON instead of XML. JSON is JavaScript Object Notation.  JSON is valid JavaScript. For example:

{ "key" : "value", "key2" : "value2" }

AJAX is used to asynchronously load data.  This can be done in response to a user request (clicking a button, etc) or when the page is loading to let some long running process (perhaps a bringing up a report) be kicked off and not delay the rest of the page from loading.

The most simple ajax statement inside of jQuery is load.  The load function will load a page (or a portion of a page) and put the results where you want.  For example:

$('#result').load('somepage.ext');
$('#result').load('somepage.ext #container');
$('#result').load('somepage.ext', function() {
    myCallBack(param1, param2);
};

The first line is the most simple which takes all of the contents from somepage.ext and shoves it into the #result.  The second line just extracts data from the #container element. The last line actually has a callback function so we know if the AJAX call actually worked.

Besides load there is also get and post which does a HTTP GET and POST respectively.  Finally, there is the all powerful ajax function:

$.ajax({
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json'
    url: '/TaskService.asmx/Delete',
    data: JSON.stringify({ 'id': taskId }),
    success: $.proxy(function (result) {
        if (result.d) {
                  $(this).fadeOut('slow', function () {
                      $(this).remove();
                   });
                 }
        }, this)
});

In our usage we are passing in a type (POST) and the contentType and dataType are set to use JSON.  Then we are stating what URL we want to POST to.  In this case it is an ASP.NET Web Service.  Then we need to pass in the data which in this case is the task id we are wanting to delete.  Notice we are passing that into a JSON.stringify function.  That function can be found in the json2.js file. The stringify function serializes the JSON object as a string.  ASP.NET AJAX can then extract out the object from that string and the webservice doesn’t need to do any kind of parsing.  The Delete method for example takes an integer.

Success is assigned  an anonymous function that is wrapped into jQuery’s proxy function.  Proxy was added recently to jQuery 1.4. Before this existed developers would typically do something like

var that = this;

And then reference “that” inside of the callback function.  Let’s say the task we are adding is in a li element.  We want to modify that li element inside of the callback function.  If we just referenced "this" inside of the callback it would reference XMLHTTPResponse and not the original item.  To try and allow developers to clean up their code the proxy function was added.  The first parameter is the callback function and the second parameter is whatever you want to use as "this" in the method.  Usually it is passed in "this".

The actual success method is only called if the web server responded with a successful response. At this time we check the result.d.  In ASP.NET they wrap all return values into “d” (which stands for Data).  This is done for security reasons.  An excellent video that mentions this is the HaaHa Show from MIX10.

To finish out the code, after we determine the result is what we expected we slowly fade out the element and then remove it from the DOM.

ASP.NET AJAX

To utilize ASP.NET AJAX in a webservice simply uncomment the following attribute:

[System.Web.Script.Services.ScriptService] 

So the question may come up as to why not just ASP.NET AJAX by itself and not fool with jQuery’s .ajax function. The key is to try and avoid UpdatePanels. It can be 50K to 100K of bloat just when you try to grab a small amount of data. This can be fine for prototypes but once you have this ajax skeleton in place, it isn’t really any more difficult than using UpdatePanels.

This was a very brief look at jQuery and AJAX but hopefully it makes you want to go and learn more and to actually try it out.

You can download the ppt and code I created for the talk I gave on Tuesday right here: jQueryPPTAndCode.zip

NOTE: If you are using IE9 Beta, then you will want to run in Compatibility Mode.    Also, the TaskSlip code is a work in progress and shouldn’t be used as a best practice example.

MVP Awarded for 2010

MVP_FullColor_ForScreenOnce again I was given the MVP Award in the area of XNA and DirectX. I’m really excited about being apart of the MVP program again this year. Because of Windows Phone 7 there is a lot more interest in XNA which is great because if you are wanting to make games then there isn’t an easier framework to use. There are tons of 3rd party components and engines being written now.

Writing apps in Silverlight is also extremely easy to develop in. This all stems from .NET in general. Back in 2000 when I first heard about .NET and ASP+ (to be called ASP.NET) I fell in love with it. The turn around time on new technology has been remarkable over the last few years. I believe this is because of the maturity of the .NET Framework and Microsoft being able to build upon that excellent foundation.

I encourage you to download the developer tools at http://developer.windowsphone.com/windows-phone-7

Also, I really encourage you to look at http://communitymegaphone.com/ to determine what community events are going on around you. You will grow as a developer tremendously by connecting with likeminded people and discussing technology that you are passionate about.

Also, and most importantly, get involved in your local user group. INETA has a great tool for this: http://ineta.org/UserGroups/FindUserGroups.aspx

I’m really thrilled that I received this award for 2010. I’m really looking forward to going to the Summit again next year. Being able to talk directly with the teams that create the technologies I use every day is outstanding.

The last thing I want to mention is that if you attend a user group and you have never presented on a topic before then I strongly encourage you to pick a topic you are passionate about and talk to your user group leaders about presenting. I really enjoy hearing folks who are passionate about a technology even if they have never spoke publicly before. Get active!

CodeStock 2010 Experience

I drove to Knoxville on Thursday and checked in to the hotel at about 6:30 PM.  I didn’t stay at the Hilton even though there was a nice discounted rate for the conference.  I was just too cheap and stayed at a hotel with a number in the name.  It was probably the worst room I have ever stayed in but it allowed me to stay an extra night which turned out to be great.

Hotel wasn't quite this bad After checking into the hotel I drove downtown to meet up with the folks at a local grill. I arrived about 7:30 because I was driving around to find a free place to park – are you seeing a pattern?  We all knew ahead of time that we had to be out by 8:00 because of another party coming in.  So I just ordered a Mt. Dew and got to talk with Rafe Kemmis which I met in Raleigh one year at a CodeCamp.  I said hi to Alan Stevens and Rachel Appel and met some new folks.  We then moved to Market Square and sat on a patio and talked some more.  Michael Neel, the conference organizer and all around superman, dropped by and I got to see him for a minute.  I then headed back to the hotel to put the finishing touches on my XNA Crash Course presentation.

PreStock Dinner

Back at the hotel room I realized that I couldn’t access the net.  I had to go into the breakfast area to be close enough to their router it seemed.  Not a huge deal but they said they had WiFi in the rooms.

The next morning I drove downtown and parked in a place I knew I was going to have to pay for, but I didn’t want to chance being late. Later that evening I realized that if I just drove down one more block I could have saved 10 bucks. I broke my cheap pattern but didn’t want to drive around downtown and increase my chances of going the wrong way down a one way street.

CodeStock RegistrationCodeStock T-Shirt Design Registration was a breeze!  I gave them my name and got a nice badge and a bag and a shirt. Sweet! 

Cicelie did a great job designing the shirts! Make sure to check Rachel’s post (where I ‘borrowed’ the image) to see the meaning behind this design.

 

Friday Session 1

Mindstorm Robot For the first session I went to Mindstorming 101 with Nathan Blevins.  I first met Nathan in Seattle back in February.  I was there for the MVP Summit and he was there for the ASP Insiders conference.

This was the first time I heard Nathan speak and he did a fantastic job. It was a great talk. I came in with only the knowledge that Robotics Studio existed and downloaded it once.  I hadn’t looked it for more than 2 hours.  I left this session with a renewed desire to download the new R3 version and try out some things.  Nathan did a fantastic job in this session. I really want to fool with the manifest files to fool with the virtual worlds that are rendered with XNA.

Friday Session 2

I was caught in the hallway and was talking so I was a little late for this talk but I was really looking forward to it.  The session was 7 Easy Steps to Becoming an Independent Consultant with John Feminella.  He had excellent real world information from budgeting to determining your rate based on current salary to tools used to get the job done.  It was another fantastic talk.

Friday Session 3

I actually talked during this session.  The slides can be found on my XNA Essentials site.  This talk could have gone better.  I ran out of time because I dove too deep into the XNA Framework’s Content Pipeline.  I must really like the content pipeline because I tend to get bogged down talking about it a lot.  It just wasn’t appropriate for an introductory talk.  As a result I didn’t get to demo any of the 3D demos and games.  I was able to talk to some folks later that attended and answered questions but I was aggravated with myself for not leaving time for questions.

Friday Session 4

Codestock was setup so that you could either do lunch during Session 3 or Session 4.  I didn’t think about it later but the folks that attended my talk must have really wanted to be there to wait for lunch.  Lunch was catered and it was fantastic.  You basically made your own sandwiches and had choices of different salads on the first day.  They also had a wide variety of deserts as well.  I opted for the strawberry pie and it was excellent.

During lunch, I had a good conversation with a couple of folks from Cadre5. 

Friday Session 5

Architect Hand

This was a fantastic session from Jennifer Marsman, a Microsoft Developer Evangelist located in Michigan.  She talked about the new Architecture tools in Visual Studio 2010 Ultimate.  These tools are fantastic at helping you keep to your original architecture but also shows the existing architecture for existing assemblies.  The source code isn’t required as it inspects the .NET Intermediate Language (IL).  She has a lot of entries regarding these tools on her blog so make sure to check them out.

Friday Session 6

The last session I attended for the day was WCF Data Services – Making Data Accessible to Everyone by Don Browning. The session was great and I learned a lot about OData. I think I may practice by consuming some Netflix data. 

Keynote

Rachel Appel did the keynote.  The topic was community. I have never seen anything like it. Instead of taking the opportunity to talk about the subject for an extended period of time she opened up the stage to folks in the community to talk about the community. A couple of folks who talked were pre-planned but the majority were pure impromptu.  It was great.

CodeStock Keynote

Rachel Appel hands the mic over to Jennifer Marsman to talk about the WIT community.

Friday Night

After the keynote I ate dinner with Rafe Kemmis at the same grill we all met the first night.  I didn’t grab any dinner there the first night due arriving close to the time we were going to leave.  However, I was really wanting a cheeseburger from the night before so after trying to get into a couple of other restaurants down in the Market Square area we settled on the grill. The burger was fantastic and the conversation was awesome.  If you get the chance, ask Rafe about his travel experience to CodeStock last year in 2009.

After dinner, Rafe and I headed back to the Hilton as we knew they had a room reserved for “Playing Guitars and Socializing”.  We walked in and Alan Stevens was standing up jamming on his guitar with several others playing right along with him.  I had good conversations with Roger Heim and Wendy Czymoch.I left early to work on my Artificial Intelligence talk back at my cheap hotel. Spending the extra time really paid off.  I was able to reorganize the points so they flowed in a more logical manner.

The downside to not doing that before hand was that I left before Wendy and her son (and others) worked on getting the MindStorm robot working.

Saturday Session 1

After parking in a free nights / weekends parking garage close by I grabbed a water in the main lobby area and then headed for the first session.  I didn’t give myself much socializing time before the 8:30 AM session.

Going Independent 101 Michael Eaton did a session titled “Going Independent 101: Lessons learned from a decade of independence”.  It was great to see another perspective from the independent world.  There was tons of great information in this session.  The biggest thing I got out of it was to find the right folks to work with.  It is important to find the right accountant and lawyer to work with you.  Find folks that you get along with and that proactively help you if possible.

The next biggest thing I got was finding the tools that cause you the least amount of friction.  There was absolutely no love for QuickBooks by any of the consultants that did these types of sessions.  It is just too big and bulky and gets in your way. Just like anything in life, finding the right tools for the job is half the battle.

Saturday Session 2

Patrick Foley, a Microsoft employee, had a session called “A little something on the side – starting your own MicroISV”.  He quoted Joel Spolsky when he said an ISV is any software vendor other than Microsoft.  I didn’t know what to expect with this session, but it was very good.  It was interesting to see his take on starting your own software company.  There was great information in this talk and I’m glad I went to it.

Saturday Session 3

Lunch! The lunch was fantastic. There was BBQ and fixings. The food was great.  I had an excellent lunch conversation with Jennifer Marsman, Jason Rainwater, Gary Short, Wally McClure, Jim Wooley and a couple others.  It really was great getting to know others in the community better.  It was very cool to meet someone who actually worked on the .NET Framework back in the 1.0 days when I was first fooling with this stuff.

Saturday Session 4

Windows Phone 7 SeriesJames Ashley presented “Advanced Silverlight Development for the Phone” which talked about using Silverlight and Blend to create applications for Windows Phone 7. The talk was excellent with good information.  It didn’t quite go into advanced Silverlight like I had hoped but the discussion on Pivot and Panaramic was worth the time.  Another plus for attending this session was that I was able to meet Ben Henderson.

I just can’t wait for Windows Phone 7 to come out.  Being able to write code with the ease of Silverlight or XNA using a .NET language like C# to create great applications and games for a device like this is simply awesome.  I can’t wait!  Did I say that already?

Saturday Sessions 5 & 6

During my career, I’ve been called a mad scientist as a compliment.  In that same vein, Seth Juarez is truly a mad scientist. He had excellent information on Machine Learning for .NET.  Seth was a very enthusiastic speaker.  He had great information and was almost like a standup comedian up there.  It was very entertaining and very informative.

Seth created a .NET library at http://machine.codeplex.com/.  I highly encourage you to check it out to get some really cool code on artificial intelligence and machine learning.  By the time the second hour was over my head was literally hurting.  This wasn’t good because I had to present immediately following.

Saturday Session 7

I taught the Artificial Intellegence class and had decent turnout for the last class of the day.  Jennifer Marsman and Glen Gordon came by to listen to the talk which was a little intimidating but they both told me later they liked it.  I purposely ended 20 minutes early and left the floor open to questions.  I hated that I ran my first session over and didn’t have time for questions so I tried to make up for it here.  I figured if folks wanted me to dig into the code more then I would, but I got some great generic XNA questions by opening up the floor.

After my session I got Alan Steven’s home address so I could find his house later that night.  I then went back to hotel after stopping and getting some books for my family while I was out. Yeah, I’m a really bad gift giver.  I like books so I just assume my girls and my wife do.  They put up with me.  (Fortunately, they do actually like books. At least I think they do?)

PostStock

I almost said this was the best part of the conference, but it wasn’t actually part of the conference. Alan Stevens was awesome enough to open his home up to the community.  When I first arrived, I spotted Michael Eaton who had the first session of the day about going independent. I was able to pick his brain for about 30 minutes.  I really didn’t mean to monopolize on his time like that, but I learned a ton more during that time and I’m grateful he spent the time talking with me.

Michael Eaton and myself talking at PostStock

After chatting with Michael, I was able to chat with Dane Morgridge, G. Andrew Duthie, Joel Cochran and Glenn Gordon in the living room some more before heading outside.  The conversations went from talking about 100 billion hotdog awesome to the Princess Bride and even technical topics like Continuous Integration and source control.

Chatting on the front porch at PostStock Outside I was able to connect with Jennifer Marsman, Glen Gordon, Alan Stevens, Steve Andrews, Michael Neel and his better half Cicelie, G. Andrew Duthie, Robert Cain, Nick Riggs,Aaron Erickson, Ben Henderson, and Jim Wooley.  The majority of my time at the Stevens household was spent on their front porch talking with these incredibly driven people.  There was some technical discussion, but most of discussion was around how to get other developers involved in the community.  There was opinions on if every developer should be involved in the community or not. I believe everyone would benefit from being a part of the community. If you go to user groups or code camps or conferences like this you will become more engaged.  You will see the things you know that you may assume everyone does, but don’t.  You will definitely learn things you had no idea about. You will be able to build relationships with folks who have the same interest as you and can actually talk the same language.  I think the benefits are enormous, but it does take a time (and sometimes money) commitment to attend these gatherings.  I think it is worth it, obviously.

Once Steve Andrews found out there was wood in the fire pit, he disappeared.  A little later we all moved around the fire Steve got going.  Mind you, it was still 90 some degrees outside even though it was close to midnight. I think the fire actually dried the air or something because it actually wasn’t as miserable as I figured it would be. Who would have thought that hanging around a fire in the middle of summer would actually be comfortable.  Around this time, Alan brought out his guitar and we sat around the fire listening to Alan and Steve play the guitars with Glen singing.  The highlight of this time was definitely them singing Jonathan Coulton‘s Code Monkey.  I called it a night at 2:30 since I was driving home the next day.

Alan Stevens playing and singing at PostStock

General Comments

I just wanted to point out some items I didn’t already mention.  I really liked the venue.  It was fantastic. I think I’ll need to spend time in Open Spaces at future conferences / Code Camps to talk about XNA with others. I enjoyed all of the sessions but there is so much to learn and share in a more intimate setting.

I really liked the fact that keynote was at the end of the first night instead of in the morning like most conferences.  However, the only thing I would change about CodeStock would be adding a Kick-Off meeting at the very beginning of the conference.  Open Spaces may have suffered the first day because there was no announcement, but I imagine that Open Spaces suffered most just because of all of the great session options that existed. Base off of the connections I made at CodeStock this year and the quality of the conversations, I definitely plan on attending Open Spaces in future events I attend.

I’m also grateful for all of the sponsors for CodeStock.  Folks like Wintellect, DevExpress, TechSmith, Microsoft Silverlight, Telerik, Cadre5 ,  the main partner – Recruitwise, and plenty of others. These sponsors basically paid for half of the price of the ticket.

Obviously a huge shout out goes to Michael Neel (@ViNull) who put on a really wonderful conference.  I’m sure he didn’t do it all by himself, but even leading an effort like this is huge much less actually doing most of the work as well.  Truly, kudos to you my friend for putting on an awesome conference!

Michael Neel at Code Stock 

It took me a while to create this post. There was a lot of sessions and I had a really good time.  Such a good time in fact as to this is why I brought this site to life. I needed a place to put down my experience.  Hopefully this reminds you of the great time you had at CodeStock, or encourages you to go to CodeStock next year!

I want to thank Alan Barber and Jason Follas for letting me use their photos in this blog post.  I’ve put the photos on my server, but each picture should link to the original image.

public void WriteFirstPost() { Blog.Write(“Hello World”); }

Hello WorldThis is the obligatory “Hello World” first post.  This isn’t my first blog but this blog will be my main blog that contains articles about technology and life. I will try to keep rants to a minimum.

I currently have the xnaessentials.com site which is dedicated to just XNA development. I want to describe my experience at CodeStock 2010 and thought a more general purpose blog would be a better home. I’ve also done some things with Silverlight and ASP.NET and didn’t ever put those experiences on the XNA Essentials blog because it wasn’t appropriate. Hopefully I will maintain both blogs regularly.  I know of at least 3 more posts I definitely want to write over the next couple of weeks.  I have had this domain for several years but never did anything with it. It looks like life may be changing some for me and I figured now was a good time to actually breathe life into this site.  It will start just as a blog but other things will come in the near future I believe.

Thanks for humoring me on my first post.