Windows 8 Book written in 8 weeks

By kewlniss at August 31, 2012 12:14
Filed Under:

It’s been a while since I’ve updated the blog.  Several things have happened.  On July 1st, I received notification that I was renewed as a Microsoft MVP for 2012.

This made me very happy since I also had just signed a contract with Sams publishing (Pearson) to write a third book for them, and I figure this would mean early access to the Windows 8 bits through a MSDN subscription.  To me, that subscription is the second best perk of being a Microsoft MVP.  The best perk is being able to talk to the product teams and to see conversations by folks that are much smarter than I.

My first two books were on game development using XNA.  This third book is about creating Windows 8 apps.  I signed the contract the last week of June with the plans of writing the first chapter on July 1.  

Around the same time I was invited to participate in an App Excellence lab.  For some reason I thought it was more of a Dev Camp setting.  The lab is really for for folks who have an app that is at least 80% done and are wanting to put the app in the Windows Store.  The dev camps are a full day (or 2) of learning about what makes a Windows Modern UI style app and what is needed to put the app in the Windows Store.  I found out the day before that what I was attending was the “80% app done lab” and not the “training / work day with experts lab”.  So I apologized to the field engineer and we discussed the app and I got some good pointers about the app in particular.

image

My original idea was to create a version of the app for the book and then finish it up to submit it to the store.  I realized the concept of the app was too complex for the book.  There would be too much time spent on explaining the app instead of the technology behind the app.  So going through that exercise allowed me to have my first failure within the first week.

I created my Table of Contents (TOC) and spent that first week (before July 1) mocking up 3 apps.  Two of the apps mocked up I would use in the book.  The third was a good exercise, but proved to not be the right game for the book.  The idea was to create two apps and one games as a “Putting what was learned it into practice” section of the book.  In fact, here is the table of contents in its current state.  Perhaps some of the words will change a little, but this is what we have:

Part I: Building the Foundation
1    Getting a Refresher on JavaScript, HTML5, and CSS3
2    Trying out File | New | Project
3    Exploring the Windows Runtime (WinRT) and Windows Library for JavaScript (WinJS)
4    Creating WinJS Namespaces, Classes and Custom Controls
5    Understanding Microsoft Design Style Principles
6    Customizing the Style of our Apps
7    Debugging, Securing, and Measuring our Apps Performance
Part II: Handling the Hardware
8    Working with Multi-touch and Other Input
9    Working with Location and Hardware Sensors
Part III: Working with Data
10    Binding Data to Our Apps
11    Storing Data Locally
12    Using Remote Data
Part IV: Making it a Windows Store App
13    Working with Fullscreen, Filled, Snapped, and Portrait Views
14    Using the App Bar and Pickers
15    Handling Our App Life Cycle Events
16    Using Contracts and Extensions 
17    Using Live Tiles, Secondary Tiles, Notifications, and Toasts
18    Creating a Trial and Handling In App Purchases
Part V: Putting it into Practice
19    Making an App: RSS Aggregator
20    Making an App: Finger Painting
21    Making a Game: Simon
Part VI: Sending it out to the world
22    Understanding the Windows Store
23    Getting an App Certified
24    Making Money with Windows Store Apps
Part VII: Appendix
         This Book’s Website

Yeah, this book is about JavaScript development and not C# which has been my bread and butter for the last 12 years.  I started working with JavaScript excessively around April this year and  have really come to enjoy the language.  Something I would have never thought back in 1996 when I first used it.  Visual Studio tooling could be better, but it is much better than was in the past.

The table of contents went through a few iterations but not many changes overall.  It is currently being reviewed by the technical editor.  Once I get notes I’ll make modifications and then it will go on to editing (for thing like, gramar, and, speeling, altho I’m a very goood speeler, and, gramarist person).

Writing a book in 8 weeks is challenging.  I did the same thing for my first book on XNA.  Writing a book in 8 weeks and working full-time provides very little time for anything else.  On the flip side, with my second book, I gave myself 6 months of time, plus it was an update to the existing XNA book.  I figured that would be a breeze, but that was a long 6 months.

The 2 month approach wreaks havoc on my family though.  I thought I’d have a better handle on writing  it this time around but I got behind on my schedule after about the 3rd week and was in catch up mode ever since.  That means the last 5 weeks, out of the 8, I was in my “worst case scenario” phase of not going to bed some nights and neglecting time I had set aside for my family.

End result?  The book content is done and the deadline was hit.  My daughters haven’t suffered too much but my poor wife has had to really pick up the slack.  We homeschool our girls, so my doing the book from June 26th to August 27th caused my wife to not really get much of a summer break.

image I kept track of my time for this book and I spent 695.2 hours researching and creating content. Ouch.  Fortunately, the main content of the book is done and now I’m just waiting the for the technical editor to come back.  I’m also going through and updating the first chapters to work with RTM as all the code (and screenshots) were originally done on Windows 8 RP.  I downloaded RTM on the 15th and installed it on Thursday night (16th) while attending my local .NET User Group where Brian Hitney and Glen Gordon talked about Windows 8.  Their boss, Brett Wolfe was also there and I was able to schedule another App Excellence lab.  This time I was prepared and had 2 apps to choose from.  We got it scheduled for Tuesday morning, the 21st.  It passed and, just like Jennifer Marsman, I got a Windows Store token.  This was extremely beneficial as it allowed me to grab screenshots of the Windows Store and submitting apps which was crucial since I had an entire chapter devoted to it.  So I’m very grateful that Brett hooked me up with another timeslot.

One obstacle I ran into was not having Windows 8 hardware.  I didn’t attend Build 2011 so I didn’t get one of the nice Samsung Series 7 tablets.  I had purchased an ASUS EP121 in June of that year and have enjoyed using it.  I installed Windows 8 Consumer Preview on it in March and really enjoyed using it.  I then also installed Windows 8 CP on my desktop and only used Windows 8 on those machines.  I was booting to Windows 8 CP on a VHD on my Windows 7 desktop, but I never went back to load Windows 7.  That will change this week as I’ll boot into Windows 7 so I can do an upgrade to the final version of Windows 8. 

Anyway, back to my tablet … I used the ASUS EP121 in order to test my code around touch.  Unfortunately, the device only supports two touch points.  During the App Excellence lab, the Microsoft Field Engineer confirmed that the app was working as expected when 8 fingers were being used.  Writing code for the GPS is no problem even for devices that don’t have a GPS so that was no problem.  But the new accelerometer, magnetometer and gyrometer hardware that will be in all Windows 8 tablet and convertible PCs is something I needed to provide examples on.  The Sensor Fusion software that takes those three hardware pieces and provides results is pretty cool.

image

Unfortunately, my ASUS EP121 hardware didn’t support it.  I went purchased a STMicroelectronics Micro-Electro-Mechanical-System (MEMS) which is the piece of hardware that is in the Samsung devices and will be shipping in many of the upcoming devices.  Paying $140 for that was a lot better than shelling out a grand or so on a device that I would loath after October and November gets here and all the new devices start coming out.  Plus, I was able to snag a seat at the Build 2012 conference coming at the end of October.  I’m hoping there will be some hardware goodness there.

Getting information on the Windows Store and the hardware were the only two problems I had with creating the book (other than running into bugs as I was creating the examples and learning the technology, of course).  This book is an introduction to Windows Store app development in the Sams Teach Yourself series.  It was hard for me to not spend time drilling down into topics as much as I did with my XNA books.  When dealing with a framework like the XNA Framework, there is only so much surface area that needs to be discussed so there is some wiggle room to dig down deep on a topic and even spend a chapter or two discussing non XNA related, but game related content like physics and artificial intelligence.  However, when talking about Windows 8 – that is a HUGE amount of API that can be covered with multiple ways of doing the exact same thing.  How does one determine what is included in a book with limited pages and what is not?  Making those decisions was challenging, but I tried to just stick the items that would be most common to folks starting out and needing to get an app or a game created quickly.

The other challenge was that I wanted to have one of the three main example apps be a game.  Game development can be difficult.  How does one teach game development in a single chapter?  It can’t be done, but what can be done is to introduce the topics such as the game loop and game states as well as introduce other game type of items all throughout the book like working with the HTML5 canvas and using the requestAnimationFrame API.  One of the apps created was a finger painting app.  Even though it is an app and not a game, it has certain properties of a game where the screen needs to be drawn at the refresh rate of the display and separating out the update logic (receiving input from fingers, stylus/pen and mouse) and the drawing logic (of actually drawing lines on the screen based on the touch points).

In another post, I’ll list all of the examples discussed in the book, like the Ink example which uses hand writing recognition, and the three (mostly) complete apps, one of which is a game.  I'll be submitting those three apps to the store in the next few weeks.  All of the source code for this book will be put on GitHub once the editing process is complete and the book is sent off to the printers.

So while writing the book was a strain on my family I am still happy I did it.  My wife would most likely disagree but she was and is supportive of my efforts.  I think if I did another one, I’d like to have 3 months to do it.  6 months is too long, but 2 months is too short.  I have the ability to focus on something and push through until it is done, but the down side is that I tend shut out almost everything else as I focus on the task at hand.  It is the only way I know of how to get something done when it is very unlikely to get done.

I’m unsure of what the release date of the book will be at this point, but it should be out before general availability of Windows 8.  So writing a Windows 8 book in 8 weeks was challenging, I learned a lot and realized I could write another 2 or 3 books on the subject.  Could, but won’t … at least not for a while ... and not in a 2 month period.

Up next, I’ll be putting the finishing touches on the three apps created in the book and submit them to the store.  Then I’ll start work on the next 7 apps.  All of these will be released through my company GlobalCove Technologies.  After the first batch of apps are submitted and before I start work on the next 7, I’ll be redesigning the website to better align with the company’s new focus of Windows 8 app and game development.  While the company will still do training and provide consulting services our main focus will be creating apps for the Windows Store.

If you are contemplating writing an app for the Windows Store, don’t delay.  Don’t put it off.  Get it done.  Some of the first apps will have great success as in millions of dollars success.  Don’t miss out.

Happy Coding,

-Chad

Twitter Bootstrap and LESS talks

By kewlniss at May 28, 2012 13:37
Filed Under:

Twitter Bootstrap is great. I’ve given a couple of talks on this subject and am scheduled to give a couple more.  Feel free to grab the presentation and the code for the talks.

I hope to carve out some time in the near future to create a proper blog post about this topic.  Do yourself a favor and grab ‘Twitter Bootstrap with LESS source’ from NuGet and start using it in your projects.  It is really beneficial.

Quick run down to get going with the source code.  If you grab Twitter Bootstrap with LESS source from NuGet it puts the .less files under /Content/less/*.less.  Then in your aspx/php/html/whatever page add a stylesheet reference to the bootstrap.less file.

The bootstrap.less does an import of all the other .less files that make up bootstrap.  (There is also responsive.less which imports all .less files needed to make your site responsive.  Responsiveness in this context refers to rendering your HTML elements differently based on resolution.  So if you are using a tablet your site can look differently than when it is on a phone versus a large monitor with a high resolution.  This is done via CSS media queries.

Twitter Bootstrap (with LESS) comes with the less.js file.  This is fine if you want to bring down the less file and have it generate CSS on the fly on the client.  Another way is to ‘compile’ the less files into css content at development time.  Another way is to add the dotless .net assembly to have any .less GET requests processed from that assembly by changing the web.config and adding a handler for the .less extension.  This is the method the demo code uses.

LESS is fantastic. I highly recommend you look at it and use it instead of CSS.  There are other languages like LESS (SASS and Stylus) but LESS is what Twitter Bootstrap uses and is the most syntactically like CSS.

Another note about dotless: If you are using IIS or IIS Express you want to remove the httpHandler section from the system.web section.  For IIS/IIS Express it only needs (allows) it in the system.webServer section. 

While this just scratches the surface of the talk it should be good enough to get going with these great technologies.  So have fun!

-Chad

Windows 8 Consumer Preview on my Development Machine

By kewlniss at April 06, 2012 16:29
Filed Under: Life, PowerShell, Windows 8

Over the weekend I created a bootable VHD with the Windows 8 Consumer Preview operation system on my development machine. 

My initial reaction on my dev machine on Monday morning was that it was less than compelling.  However, after using it for just a half a day I think it is very compelling.  I’m just scratching the surface but I definitely love this OS already.  I still think there needs to be some instructions for folks that get to desktop mode that may not know how to easily get back to the start screen, but that can easily be done with a short cut on the desktop to go back or even a ‘Start Button’ on the task bar.  Once you know you just have to hover on the side of the screen to hit the Windows charm or hit the Windows Key on the keyboard (which is how I got back) it is no big deal, but for folks who don’t know it could be frustrating.

I also installed Windows 8 Consumer Preview directly on the metal on my ASUS EP121.  Touch is very impressive on the tablet.  I fell in love with it immediately. The key to anyone trying to use Windows 8 Consumer Preview on the ASUS EP121 is to download the drivers from the ASUS website first.  I have Bluetooth working on it and it is great. 

On my development machine, which is what this post is about, I have 2 GPUs. They are both NVIDIA’s GeForce GTX 560 Ti models. I ran into a few issues with the system rebooting on me after displaying RGB dots all over the screen.  Updating the drivers helped but it would still do it.  Then I changed the “Power Management Mode” in “Manage 3D Settings” in the NVIDIA Control Panel to “Prefer Maximum Performance” and I changed the “Multi-display/mixed-GPU acceleration” to “Single display performance mode.”  After making that change the machine still locked up and rebooted once this week but hadn’t for almost 4 days.  So these changes made it more stable but it didn’t solve the problem entirely.

image

Before I get into the actual experience, I figured I would talk a moment about the setup I went through to get the VHD setup.  I started with Scott Hanselman’s blog posts on the subject.  My machine doesn’t like booting from a USB device and I didn’t want to make a DVD so I used the tip from the commenter on the blog post and setup the VHD that way.

I backed up my Boot Manager Database by running the following:

BCDEDIT /export c:\bcdbackup.bak

I gave my VHD 200GB of space but at this point only have used 59GB so far.

When I done installing it came up with Windows 8 with no issues.  I was very happy. I was running Windows 8 from the metal via the VHD.

Now, something that made my move easier is the fact that when I installed Windows 7 on this machine back in June when I bought it I split out my Users folders (and Program Files) to my 3TB HDD instead of my 128GB SSD where the OS was installed. 

Since I had all the documents on my non OS drive I was able to easily connect to it from my Windows 8 OS.

1

I have two monitors (would like a third but don’t have room on my desk).  Originally the Windows 8 start screen was on the left monitor.  I right clicked the taskbar on the right-hand side and selected “Make this my main taskbar”.  This moved the start screen to the right like you see above.  (You can click the images to get larger images.)

What I noticed is when I started using the metro apps while also doing something on the desktop is I had no idea what time it was.  Currently, the time on the taskbar is put on the same screen as the Windows 8 start screen (so if the start screen is visible, the clock on the taskbar isn’t visible.)  The only way to see the clock on the start screen (or in a Metro app) is by hovering the mouse on the right side of the screen.  This brings up the charms (search, setting, start, etc) as well as the clock in the bottom left quadrant of the screen.  That isn’t acceptable to me.  I want to be able to glance at a clock.

So I made the Windows Gadget clock visible. (I hadn’t ever used the gadgets in the past.)  As you can see I put it on the bottom of my desktop screen.  It has a “Always on top” checkbox, but it doesn’t always work.  So in the following screens you will see that I just made sure the window didn’t obscure it.

4

In the above screenshot you will see that I’m using VS 11 as well as SQL Server Management Studio and a PowerShell window where I’ve utilized posh-git so I didn’t have to use Git-Bash. I really like PowerShell.

2

When I’m not using a Metro app and want both screens to be my desktop I can obviously do that as well.  Here I have two more PowerShell windows opened as well as Windows Live Writer (so I can write this blog post.) One of the PowerShell windows is using posh-hg  since I do a lot of personal development using Mercurial and Kiln from Fog Creek. The other PowerShell window is just for random stuff I need to do on the machine. I created some functions so I can just put “dohg” or “dogit” and it will load up posh-hg or posh-git and set different color schemes. This way I can easily know which window I need to do my work in.

3

The above screenshot shows how I opened up my Metro mail client and then put it in a snap view so I could have that going while I still utilized the majority of my two screens with desktop apps.

I like the Metro mail client.  Being able to see all 5 of my active email addresses is very beneficial.  I found myself using my Windows Phone 7 to quickly check for incoming messages before.  Now, I can easily see it through this mail app.

5

Although the above isn’t very practical if you are trying to do something on the desktop, I found it to be very productive to switch over to filled mode (opposite of snapped mode) to respond to an email.

6

If I made it full screen I would have to snap it back and then move a window on my other screen to get the system to go back to desktop mode with the Metro snapped app displayed.  This way I am able to easily move it from filled mode to snapped mode.

Unfortunately, I had to revert to using Outlook again as I just couldn’t easily add attachments and my exchange contacts (i.e. coworkers) wouldn’t automatically populate in new messages.  All my contacts from my hotmail and gmail accounts were fine, but not from my company’s address book in Exchange.

So when I brought up Outlook it started to sync.  I didn’t want it to do that since I knew my Gigs of emails were on my D drive.  So I exited Outlook and ran the following command to have Outlook point to my existing file (after deleting the .ost file it was making):

cd "C:\Users\Chad\AppData\Local\Microsoft\Outlook\”

mklink "Outlook Data File - ccarter@robertsonmarketing.com.ost" "D:\Users\Chad\AppData\Local\Microsoft\Outlook\Outlook Data File - ccarter@robertsonmarketing.com.ost"

Then when I booted up Outlook it grabbed my existing file and only had a day of emails to retrieve.  (I tried the Metro mail client for a full day before reverting back to Outlook.) I still use the Metro mail app for my other 4 active email addresses though. I do like it.

7

The above screen was when I ran the basic Direct3D template and then put it in fill mode.  So I was using VS 11 to run/debug the Metro app that was in fill mode.  Still having my email up.

8

9

Those final two images show the Metro Reader application.  The writing is too small to be useful when it is in a snapped mode but I did enjoy using it in the fill mode.

Once I had the machine the way I wanted it.  (I LOVE IT!) I wanted to create a restore refresh point.  I followed this article and had it created in about 35 minutes.

image

It takes a long time to get past that 0% though so don’t give up.

image

My next steps will be blowing away the VHD and reformatting my SSD that has Windows 7 on it to use Windows 8 Consumer Preview.  I’ll be using this restore point once I get it installed.  I like using Windows 8 that much.  I’ve not lost any productivity in using it and using VS11 in Windows 8 is excellent.

image

Just some quick tips from my using Windows 8 Consumer Preview this past week:

image Corners are important!  Hovering your mouse on the  Top Left of the main Metro screen (in Desktop mode or Metro mode) brings up previously used Metro applications.  Handy!

Moving your mouse to the Top Right (or really anywhere on the Right edge) and you will get the charms.

image

Windows +  .  (period) Will alternate your Metro app from Full screen to Filled to Snapped.  Very handy.

Semantic Zoom: On the tablet you can do the typical pinch zoom gesture but with a mouse and keyboard you select a little magnifying glass on the bottom right of the Metro screen.

I enjoy using IE10 as well (in Metro and on the Desktop).

I’m glad we can still pin things to the taskbar on the desktop as that is very handy.

I love the lock screen. I like how integrated everything is from my Windows Live ID, .NET Passport, Windows Account to my Facebook and Twitter accounts.  It is all very nice.  It is like my Windows Phone 7 has grown up and become a full blown PC.  Go Figure.

 

So if you are debating on jumping in on the Windows 8 Consumer Preview hopefully this will help you make that decision.  I love developing on Windows 8 Consumer.  I think you will too – especially if you have two (or more) monitors.

-Chad

Alcohol and Geek Conferences

By kewlniss at April 05, 2012 18:20
Filed Under:

So there was a lot of tweets today about alcohol at conferences and folks feeling left out.

The original post was actually making a point about not being able to have meaningful conversations with smart folks once they get sauced.  I’ve definitely ran into that at some conferences.  While at the Microsoft MVP conference last month there was someone who had consumed too much and abruptly interrupted a conversation I was having with someone else.  I’m always opened to including anyone in any conversation I’m having at a conference, but this was overbearing and obnoxious.  It wasn’t the conference’s fault but the person who consumed too much.  Now that I think of it, this happened twice on two different nights at the conference by different people.  Hadn’t thought about it much before.

A lot of the article seemed to address something that I haven’t ran into – conference organizers talking up the booze.  Most of the conferences I have gone to are Microsoft conferences.  From Convergence with big budgets for their partners and customers who spend millions of dollars on different ERP systems (like Dynamics AX, GP and NAV as well as Dynamics CRM) to Gamefest which has just a few hundred game developers (mainly guys from AAA studios and some indie folks like myself) along with those in between.  I’ve also been to some community conferences like Codestock.  There was alcohol available but it wasn’t a drunkfest – or at least I didn’t see it if it was.  So perhaps it is just the JS conferences where this occurs or perhaps I’m too blind to see it.  There typically is some party event but it seems that most folks leave those to go to a bar to hang out and/or really get hammered.  I’ve not joined anyone at the bar after the main event closes down at 10 or so.  It seems it is common for folks to not come back until 2AM or so.  They typically miss the sessions the next morning.  I’m not going to miss a session when I’ve paid money for the conference.  Some folks go just to socialize and have those conversations while sessions are going on.  I typically don’t.  I could see great benefit in that, but unless there is no topic I’m interested in or the speaker is having a hard time I tend to stick to sessions.  I do like open spaces for the times when nothing else fits.  

Regardless, I didn’t feel excluded because folks were drinking and I wasn’t.  I chose not to go to the bars in wee hours of the morning but even if it wasn’t at a bar I’d probably not go anyway since I’d want to get to the sessions in the morning.  I’m definitely not a Brogrammer. Oh well, wasn’t cool in high school, why should I start now?

Warning: Contains Offensive Language

This has nothing to do with conferences, but when thinking about feeling left out I recall going out to dinner with some coworkers and their wives about a decade ago.  We all had a good time, I thought.

A couple months later I found out that the group had done a couple more of those dinners but I hadn’t heard about them.  I was confused as to why I wasn’t asked to join them again.  When I asked a good friend why we weren’t invited he told me.

It seems that my wife and I were the only people that didn’t order any alcohol. I was shocked to hear this was why I was excluded.  I asked if I came across as descending or anything. I was assured that I wasn’t but they didn’t feel comfortable drinking around us.

That blew me away.  So I felt left out but it was because I made them feel uncomfortable.  I didn’t say anything about them consuming the beverages.  Just the act of me ordering a Mountain Dew instead of a Budweiser caused discomfort with my coworkers.  I still don’t understand this.  Regardless, you won’t hear me passing judgment on someone who is drinking beer or wine. I hope people don’t pass judgment on me because I prefer carbonated drinks.

So I guess when it comes to drinking at conferences I think the thing I try to do is make sure I’m not making someone else uncomfortable.  I’m not uncomfortable talking to someone with a beer or wine glass in their hand. I don’t want them to be uncomfortable with me because I have a soft drink in mine.

There are better ways to have meaningful conversations than at a loud bar or party event.  I typically don’t stay at those too long because you can’t have a good conversation.  I’ll go back to my room and write some code and reflect on the things I learned.  I hadn’t really considered those events really part of the conference so I didn’t mind.  Of course, open bars have got to be expensive.  I sure hope I’m not paying for that in the price of my conference ticket.

In my opinion conferences are there so we can learn and be around folks with the same interests. Meaningful conversations are easier to have when someone isn’t plastered but I’ve only seen that a few times.  Of course, I head back to the hotel room around the time folks are looking for a bar after the party so I probably avoid seeing a lot of it.

As with everything, moderation is the key.  Anything to excess is bad – including coding non stop and constantly thinking about work.  That is excess and it isn’t healthy and I constantly do it.

XNA Game Studio 3.0 Unleashed Source Code Released as Open Source

By kewlniss at March 30, 2012 17:47
Filed Under: XNA

I’m pleased to announce that the XNA Game Studio 3.0 Unleashed book’s source code has been released under the Ms-PL license on CodePlex.

So you can use Git and create a clone locally to start working with it or you can fork it and update it for XNA 4.0.

Have fun with it!

-Chad

God Loves PowerShell (and you too)

By kewlniss at March 29, 2012 22:08
Filed Under: Life, PowerShell

I’ve been wanting to work with PowerShell for a long time.  I’ve brought it up a few times but just played around with it.  I never actually did anything with it … that was until a couple of weeks ago.

Our church, Central Baptist Church, records the Sunday morning sermons and puts them online.  However, the sermons weren’t being uploaded. They were being recorded, but weren’t being uploaded and posted to the website.

So I grabbed all of the mp3s from the church's AV computer and brought them home.  I then opened them in Audacity to chop of any excess content on the beginning and end of the sermons and re-exported them into the /processed/ subfolder.

As I exported them I set the MP3 tag properties like Album, Title, Year, Artist, etc.  This process definitely took the most time – opening each mp3 and normalizing them, stripping the beginning and/or end if needed and exporting them took the entire afternoon.  And now it was almost time for me to head out for the evening services.

Now I needed to actually open up Windows Live Writer to create the blog posts to save each of these sermons.

So my initial problem was that I just created these 49 files with their new filenames, title of the track (Sermon Name) and artist (Speaker Name) but I didn’t have an easy way to get that information back out when I’d create each individual blog post other than right clicking on each one and looking at the file details to see the MP3 tags.

I figured this would be a good problem for PowerShell to solve so I did a quick search for “get multimedia file details in powershell” and the first link that popped up in Bing was:

http://powershell.com/cs/blogs/tobias/archive/2011/01/07/organizing-videos-and-music.aspx

Using this as the starting point I created the following script:

$shell = New-Object -COMObject Shell.Application
$folder = 'D:\Users\Chad\Documents\cbcsermons\processed\'
$shellfolder = $shell.Namespace($folder)
$sermons = dir $folder

Which produced the following results:

image

I followed that up by

foreach($sermon in $sermons) {
    $shellfile = $shellfolder.ParseName($sermon)

    $shellfile.Name + ' - ' + $shellfolder.GetDetailsOf($shellfile, 21) + ' by ' +
        $shellfolder.GetDetailsOf($shellfile, 13)
}

And those results were:

image

I then just exported that to a text file I was able to read and then copy and paste the values I wanted.

I’m sure there is probably a pretty easy way to generate the blog posts with PowerShell itself either by interfacing with Windows Live Writer or Orchard CMS but I was in a hurry and didn’t have time to look at that.  I was happy with the time I was able to save by getting the data I needed.  I didn’t mind copying and pasting the data from Notepad to Windows Live Writer as I created the individual blog posts.  It would have been cooler to do it via a script, but I was more concerned about getting it done before walking out the door (in the next 10 minutes).

The point here is that I was able to very quickly get up and going with PowerShell.  If I had tons more of files to go through then I would have spent the time to figure out how to automatically create the blog post but that wasn’t my main concern.  Windows Live Writer made that process pretty easy to do manually.

Now that I did that small task, I constantly have a PowerShell window open now (and normally I have 3 different ones opened).  At work and with my personal projects I use Mercurial for source control and always used the command line but now I use PowerShell along with Posh-Hg.  I’ve been digging GitHub recently and am using PowerShell with Posh-Git to grab code from there.

I’ve noticed a lot of C# Console Apps I’ve made over the years could have been more easily done via PowerShell scripts.  Also being able to easily use .net objects I’ve made via PowerShell is also awesome.

So if you haven’t messed with PowerShell yet, but it is on your “to look at” list, then do yourself a favor and load it up and start using it - even for something small.  When all you have is a hammer, everything looks like nail.  Add PowerShell to your tool belt and you will soon see things you would have done a different way before but can now do more efficiently using PowerShell.

God loves you. But does God love PowerShell?  I don’t know, but I believe He is the Ultimate Engineer and so I think He’d dig it.  What I do know is that folks at my church are grateful to finally have the sermons online.  I’d have to think that would cause God to smile as well.

The entire script (with the core wrapped in a function) is below:

$shell = New-Object -COMObject Shell.Application
$folder = 'D:\Users\Chad\Documents\cbcsermons\processed\'
$shellfolder = $shell.Namespace($folder)
$sermons = dir $folder

function getSermonDetails {
    foreach($sermon in $sermons) {
        $shellfile = $shellfolder.ParseName($sermon)

        $shellfile.Name + ' - ' + $shellfolder.GetDetailsOf($shellfile, 21) + ' by ' +
            $shellfolder.GetDetailsOf($shellfile, 13)
    }
}

getSermonDetails > Sermon_Details.txt

Happy Scripting!

-Chad

From Radians or Degrees to Pi or Tau to a Binary Hand Dance

By kewlniss at July 18, 2011 07:47
Filed Under: XNA, Community, Math, Blender 3D

So last week I wrote a blog post on my XNAEssentials website demonstrating how to create a selection wheel / pie menu in XNA Game Studio 4.  Before I even announced it on twitter, Michael Neel (@ViNull) sent me this tweet.  Then in his @GameMarx podcast on Friday (which I watched on Saturday) he had guest speaker Andy Dunn (@The_ZMan) who he asked if he coded in Degrees or Radians.  It appears both of them code in radians.

Andy then talked about @ViHartViHart of http://vihart.com/ who has math videos including some videos stating that Pi is wrong.  There is this whole movement that I had no idea about.  There is even Tau day (which has good info). So this morning I spent some time looking at a couple of her videos.  They are awesome.  Perhaps I would have done better in Trigonometry if we had used Tau instead of Pi…

If you are interested here are some links:

http://vihart.com/blog/pi-is-still-wrong/

http://vihart.com/blog/pi-politics/

I must say, I’d like to use Tau instead of Pi.

Towards the end of that second video she talks about folks copywriting works based off of Pi and jokingly creates a Binary dance with her fingers.  Her next blog post expands on that and I thought it was great.

http://vihart.com/blog/binary-hand-dance/

So I just tried to add a little humor to my tutorial post about using degrees or radians when calculating angles and as a result I now know about someone I may be able to learn math from in a fun way.

So do a binary hand dance, or write some code, or learn something new …

For me, I’ve been learning Blender 3D.  I’m not an artist by any stretch but I’m able to at least put place holders that resemble the item I’m trying represent in my upcoming 3D game. I’ve learned more in the last 2 weeks about Blender than I have in the last 12 years in other 3D modeling packages. I’m amazed by how quickly some of these folks create things in their tutorials.  There are too many things to learn and no where near enough time. If you are also interested in some good tutorials on Blender 3D, check them out at http://blendercookie.com/

Oh and in case you were wondering … this is what Tau sounds like:

Windows Phone 7 Developer Sweepstakes end June 30th, 2011

By kewlniss at June 28, 2011 02:54
Filed Under: Windows Phone

If you are almost done with your Windows Phone 7 App or Game, you may want to put a little extra effort into finishing it up and get it certified so you can beat the deadline.

Microsoft’s fiscal year ends June 30th and so do this promotion:

Use Code: 5DXDN

URL: http://bit.ly/WP7DevOffer

If you have 1 app in the marketplace you can win a Samsung Focus. (Details & Rules on the site)

If you have 2 apps in the marketplace you get a refund on your Marketplace account fee.

Register on this site for that: http://phone.microsoftplatformready.com/Offers.aspx

If you have 5 or more apps you can get Free Advertising for one of your apps!

Enter in the WP7 Sweepstakes (Code: 5DXDN; URL: http://bit.ly/WP7DevOffer

If you publish(ed) 5 new apps between April 1 and June 30 you get FREE advertising for one of those apps or games.

So if you are almost done – push through and get it done!

Happy Coding!

Empire Avenue

By kewlniss at June 27, 2011 07:48
Filed Under: Games

So what isEmpire Avenue?  Well, I hadn’t heard of it before last week.  I saw one of @alfredtwo tweets asking about it and I filed it away to look at later.  Well, I looked at it last night and decided to join and get going.  It is pretty addicting so far.  It also encourages creating content (on Twitter, Facebook, your own blogs, YouTube, flickr, etc). 

eav-logo-250

I’m still just getting started and can’t comment on how great or terrible it is, but so far I’m enjoying it.  Being able to “play the stock market” based on social media activities is a cool concept for sure. 

So check it out if you are so inclined!

Christmas in June–My new setup

By kewlniss at June 13, 2011 22:39
Filed Under: Life

It had been four years since I bought the Dell M1730 laptop.  At the time I was looking for a portable server.  I wanted a machine that I could do video editing and game development on as well as my core web and silverlight development.  I wanted to be just as efficient “on the road” as I was at my desk.  I’ve always enjoyed full keyboards and fumbled with the smaller laptop keyboards.  So I was happy with my 4GB machine with dual NVIDIA GeForce 8700GT (258MB) SLI.  It served my purposes well.

However, I reformatted the thing about 4 times in the last 4 years.  I tried the original 32bit OS (Vista at the time) and the 64bit and went back to 32bit.  Then I tried 64bit Win7 and backed back down to 32bit Win7.  Besides trying to determine if my machine performed better as a 32bit machine or a 64bit machine I am constantly installing beta software.  Stuff gets left behind and this adds to my need for needing to pave the machine.  Using VMs would have helped here but my machine was already struggling on the main OS with everything I was throwing at it much less if I started allocating RAM to VMs I was running.  Plus with Windows Phone 7 development the emulator runs in its own VM and I couldn’t run the emulator inside of another VM.

I typically run with 30 or so Outlook email windows opened along with tons of web browser windows opened.  I’ll be on twitter and see some link and I’ll click on it so it goes into my “queue” of things to look at later.  My outlook email windows are my “todo” queue for the most part.  Then I’ll have multiple Visual Studio instances going for the different projects I’m working on.  My machine was constantly running at 85% or higher RAM usage.   This, of course, causes a lot of paging in the system and thrashes the hard drive.

Besides the memory cap, the biggest issue I had with the machine was the weight of the thing.  I didn’t travel that much 4 years ago.  (And still don’t travel a lot compared to a lot of folks.)  But when I did travel I had to take that 12lbs machine along with the 6lbs power cord and carrying that around a city or in an airport on a shoulder bag wasn’t very fun.  I finally found a laptop bag that held my 17” screen but I kept breaking the straps from the weight of the thing.

Recently, we were given an iPad. It is a nice toy but I could never be productive on it since I use Outlook and Visual Studio constantly.  Web browsing is nice, but it isn’t enough for my job.  It is a great gaming and entertainment device, but (in my eyes) it is a toy and not something I could use in a business setting.

However, having that little tablet device made me say “This is what I want to do my production work on.  I’m tired of lugging around the ‘20 lbs of equipment’ whenever I need to go somewhere.”  As much as I wanted a tablet device I knew that I wasn’t going to be productive daily if I just used a tablet.

Anyway, it came time for me to pave my M1730 again and instead of doing it I decided I’d take the time to determine what machine(s) I’d buy to be most productive.  So I knew I wanted a lot more RAM so I figured I’d start there.  I started my search on newegg.com.  I have found them to have the best prices overall.  So I started selecting the parts for the machine I was going to build and was surprised to see that 12GB of RAM was only $150.  So I picked up two of those to obtain 24GB of RAM.  I also wanted a great processor so I picked up the Intel i7 990X which has 6 physical cores (12 logical cores) and a EVGA FTW3 Motherboard to support that chip and the RAM.  I bought a 128GB SSD as my primary drive and a 3TB drive for my storage. I also have 2 1GB GTX 560 Ti Graphics Cards with SLI.  I’m happy with the setup.

image

image

I had to start over with my my server at home because I had everything installing to my 128GB drive. My concern was I would fill it up pretty quick if I had all my temp files and my documents, etc all pointing to that drive. So I found a trick that when you are first installing Windows when it gets to the screen where it asks you to create a user name you can hit SHIFT+F10 to open the command prompt. I then used robocopy to copy the program files, program data, user folders, temp folder to the HDD. I think did a mklink –j to make a permanent link to the HDD. So the system thinks it is going on C:\Program Files.. (or whatever) but it is actually going to D:\Program Files.  This is leaving my main drive empty enough for my liking.

clip_image002[7]

Even with buying all of this I still had just enough money in the machine buying budget to also get the tablet device I had been looking at – the ASUS EP121. This Windows 7 slate device is the most powerful on the market. It has a 12” screen and comes with a Bluetooth keyboard which is really great. The battery life lasts anywhere from 2 hours to 4 hours depending on what I have running. Most of the time I’m near a outlet or will be within that time frame so that isn’t a big deal to me. It has a 64GB SSD drive and 4GB of RAM. I asked Newegg to notify me when stock became available. I had been looking at this for the last month and no one had it in stock. While I was at CodeStock I got the email from Newegg and placed the order immediately. The site was out of stock again with 20 minutes.

My goal here was to be super productive at my home office where I spend most of my time.  At the same time I wanted to be able to work if I traveled to the office or at a conference or where ever. 

The thing that surprised me most about this tablet was the handwriting recognition.  The Wacom Digitizer stylus is awesome.  I wasn’t expecting to use it, but I find myself going to it as much as the software keyboard when I don’t have the Bluetooth keyboard handy.

image

I knew I would be able to do XNA development on the tablet but I wasn’t expecting the tablet to be able to support the HiDef profile inside of XNA. Most laptops don’t support it as it requires a pretty decent graphics card.  I was able to run all of my demos I did at CodeStock on this thing after the fact.  The only thing I need now is a Mini HDMI to VGA adapter for when I need to hook it up to a projector and I’ll be set. It is crazy that I was able to get both of these machines for the same amount of money I paid for the M1730 four years ago.

In addition to having these great machines, I just received the HTC Trophy Windows Phone 7.  I use Verizon so I had a long wait when it came to getting a Windows Phone 7.  So far, I like it.  I had a Samsung Taylor developer prototype phone and the screen on that seems to be more crisp.  I had used the blue accent on the dark background and the blue is much deeper on the Samsung and almost a baby blue on the HTC.  Not a big deal, just something I noticed.  The other thing I have to figure out is how to get my games on my new phone.  Seeing “try and buy” instead of the familiar Xbox 360 “Download Again” prompt is scaring me from clicking it.  I’d hate to pay $12 for Harvest.  $6 was plenty, thank you.  So I’ll do some research on that later.

For now, I’m happy that I have my 3 machines ready (for the most part).  My powerhouse machine I’ll use most of the time, my Slate that I’ll use when I want to “chillax” with the family or I’m at a conference or offsite and my phone for all the times in between.  The phone I had before was a Motorola Razr.  This is my first smart phone.  Yeah, I’ve been waiting a while …

So, for me it is like Christmas.  It wasn’t really planned for all of these things to come together at one time, but I’m glad it worked out that way.  Now, I need to determine the best way to keep my documents in sync…

SIEGECon 2010

By kewlniss at October 14, 2010 18:16
Filed Under: Community, Life

I had the opportunity to speak at SIEGECon 2010. SIEGE stands for Southern Interactive Entertainment & Game Expo.  Pretty cool acronym. 

So I drove down to Atlanta on Thursday, September 30th. It is about 300 miles/5 hours from the Greensboro area. I arrived Thursday night late. I stayed at a hotel down the road since it was about half the price of the hotel where the conference was being held. It was only a 3 minute drive, so no big deal there.

I spent an hour trying to get my Xbox 360 on the hotel wireless since I would need it for the XNA session I would be giving on Saturday.  After trying a few things with no success I went to bed around 1:30.

I was up early to attend and the WP7 training with Glen Gordon and help answer any questions on XNA.  The WP7 event was 4 hours of tutorials that was not really part of the actual conference.  There were over 200 high school students brought into sessions that Friday morning.  There were probably 30 that rotated in and out of the WP7 sessions.  Glen did a great job with the presentation and I heard several folks talking very excitedly about the phone.  There was even one person who sent a message to his friend in an Adobe session to come over to hear Glen’s presentation. That was cool.

After the WP7 tutorials, we had a nice lunch provided.  I was able to talk with Andrew Greenberg, the conference’s organizer about the conference.  We had a good conversation about community and the conference.  He introduced me to Noah Falstein, one of the key note speakers for the event.

After lunch, I went to a deserted room to try and get my Xbox 360 on the hotel’s WiFi.  I was making the assumption that if I could get it to work in one hotel, it would work in the other. The problem is that hotels shove a proxy in between the machine and the internet.  This redirects traffic to the hotel’s agreement page (where you may have to actually pay for access).  This is all done through a web browser.  When connecting through a laptop this is no problem.  Enter the credentials in the web form and you are on your way.  The Xbox 360 has no browser and that is the problem.  So I messed with that for another hour and half before the room was being occupied for an upcoming session.  I didn’t make any headway and packed everything up and put it in the car and then headed to the first actual session of the conference.

The first official session of the conference I attended was “Speed Dating”.  No, I wasn’t looking for a date.  I’m happily married.  This was a session to network. It was a lot of fun and I was able to meet a lot of folks in a short amount of time.  I met teams that were just starting up and had a game concept together but nothing else to teams that had everything and were looking for networking support. I met graphic designers, other developers, audio gurus and even cartoonists. It really was a great way to kick off the conference.

nolanbushnellAfter the first session was the keynote.  The keynote speaker was Nolan Bushnell, who co-founded Atari, founded Chuck E. Cheese and founded uWink.  I’m a huge Atari fan. I have wanted a retro Atari shirt for the longest time, but none of those “70’s/80’s” stores ever carried them.  Once I found out that Nolan was going to be the keynoter, I jumped online and ordered 3 Atari shirts.  One is actually a Pong shirt with an Atari logo and the other two have the Atari logo with the word Atari underneath it.  I wore an Atari shirt each day I was there.  I was proud of my nerdyness.  I actually wore my Pong shirt on this day since Nolan is credited for creating Pong.  The actual development was done by his co-worker, Al Alcorn.

Nolan’s speech was excellent.  He had images from the early days when Atari created Computer Space.  He talked about some of the specs for the Atari VCS 2600.  For example, it only had 128 bytes of memory.  That’s bytes – not kilobytes! 

For those that remember the original starter kit that came with XNA called SpaceWar.  That was created after the first ever computer game.  SpaceWar! ran on multimillion dollar mainframes and Nolan played it while he was in college. That is what inspired him to create Atari to sell coin operated games.

Nolan spent some time also discussing some Economic Models like Subscriptions, Buy the box, Download, Free to play / pay to win, and Ad Supported when it comes to games and software in general.  He talked some on Augmented Reality and the future of games.  It was a really interesting talk.

There were some interesting quotes I jotted down while he spoke:

“You should fire 5 to 10% of your people every year.” – I have read of GE doing this. And then seeing the Netflix PowerPoint to their managers on culture and business last year, I really agree with this philosophy.

“Home schoolers get into colleges easier than public school and that is wrong.” – We homeschool our children, but I didn’t see this as a slam to homeschooling based on how he was talking, it was definitely a slam on the public school system.  He definitely thinks that the “problem with schools is 1/3 of the teachers are dumb as a post.”  I believe that is what led into his comment about firing 5 to 10% of employees every year.  I’m not opposed to the public school system.  I think a lot of the success behind home schools comes from the ratio involved.  1:1 or 1:4 is much better than a typical class room of 1:30.  1 teacher for 30 or more students just becomes a lot of crowd control.  People don’t learn the same way.  Folks get left behind because they didn’t understand something that was presented.  When a teacher only needs to worry about a few students they can take time to make sure the student understands before moving on.

Another quote of his was “Privacy – Get over it.” – He mentioned this when talking about Mobile games and GPS / Location aware apps.

“You are smart. Procreate.” was another quote from his talk.  He then went from this into the best quote from the session:

“The best life is a life of balance.”

After his keynote a few of us were able to chat with him afterwards around a table. I was amazed by how he made himself available.  During his talk, I noticed when he talked about Nintendo’s Wii and PlayStations Move that he didn’t mention Kinect for the Xbox 360.   I also noticed he didn’t mention Windows Phone 7 after talking about Android and the iPhone.  Around the table, I asked him if he had any thoughts on WP7.  To my surprise he suggested to not spend any time on that device.  I asked why and he thought that carriers weren’t going to carry the phone.  It seems to me they are, although Verizon and Sprint will be early next year.  Unfortunately, I must disagree with him on this point, but it was definitely awesome to get to talk to him and hear insight on many different subjects.

That evening there was a party by the pool area, but it was entirely too loud so I went back to my hotel to test out the 360 some more for my presentation the next day. Everything worked on the first try, but my TV Card had a device driver failure but I could still use it. 

The next morning, I showed up early to get 360 going in the room I was going to speaking in. I didn’t get a chance to get it setup before the first session started, so I left the 360 in place (behind the podium) and packed up the rest and headed to the Augmented Reality session.  This was a great session and seeing the stuff Georgia Tech and SCAD did with the android and a cardboard city on the table was amazing. 

Augmented Reality

Unfortunately, I had to leave early so I had enough time to setup for my session.

With the 30 minutes between sessions I had just enough time to get my environment setup for my talk on Xbox 360 Programming with XNA.  The 360 was online and I was able to launch XNA Game Studio Connect.  (This was done by sharing my wireless connection on my laptop.) The video card was doing its job (although the error message was on the screen, but I just moved it down toward the taskbar.)  PowerPoint was queued, VS2008 and VS2010 were loaded with my projects.  Projector was display my laptop correctly (for the most part).  So I was really happy.  This had a lot of moving parts and many things could have gone wrong. Fortunately, nothing did.  I had a lot of material to cover and an hour wasn’t really long enough and so I didn’t really get to show too many demos.  However, everyone that talked to me afterwards couldn’t believe just how easy it was to get up and going on the 360.  Mission accomplished.  Now I was going to be able to enjoy the rest of the conference without worrying about my presentation not going to plan.

I put all of my gear back in my car and then grabbed some lunch. The boxed lunches at this conference were nice.  After lunch, I hit up my first Serious Games session.  I was hoping to be able to meet some folks in this area as I’d love to be able to do more game development in the business world.

David Warhol taught the session The Five Ms of Serious Game Development.  It was a great session with student participation. We went through the exercise of designing serious games based off of budget and other restrictions.  It was a great session and I learned a lot.

The next session I went to was also on the Serious Games track and discussed 3D in Serious Games. It was a good session as well. There was some mention of SecondLife and OpenSim.

The Keynote was presented by Noah Falstein. He focused on game design in his talk.  He also talked about The 400 Project which is trying to create a certain number of rules (400) around game design.  The list is currently up to 112.  Take a look at the list if you are designing any games it is always good to keep these things in mind when designing a game or a level.

The first session of the final day was a panel session with Nolan Bushnell and Noah Falstein on “How did we get here”.  This was a fantastic session and I learned quite a bit just hearing these two guys chat.

I then attended the “Not losing your balance: making gameplay fair” from a couple of developers that worked on Sid Meier’s Civilization Revolution.

The last session I attended before leaving was Serious Games in Management and Commerce.  I had just started my GlobalCove Technologies company and one of the areas we want to become more involved in is Serious Games.  All of these talks were excellent.

The conference was a huge success.  I learned a lot and was able to meet a lot of talented people.  The best part was it only 300 miles away from my home instead of 3,000.  Typically I have to head to the west coast to attend a game developer conference like this.  I’ll be going back next year.

Positive Discontentment

By kewlniss at October 05, 2010 10:54
Filed Under: Life

Discontentment is a bad thing.  We should be content with what we have.  No need to envy what someone else has.  No need to keep up with Joneses.  No need to buy that new gadget just because someone else has one.

However, there are times when discontentment is a good thing.  We should always strive to better ourselves.  We should try to be better parents and spouses.  We should try to be better developers.  We should try to be better people.  So, in that sense, we should never be content with where we are.  I’m not suggesting we should always be looking down on ourselves.  Instead we should be happy with the things we have accomplished but never be satisfied with staying where we are.

So if you haven’t picked up a good book in a while, do so.  Spend some time building your relationships and never stay content with your achievements in life.

Keep learning, keep striving and keep achieving.

Red Dead Redemption Effect

By kewlniss at September 29, 2010 07:49
Filed Under: Life

So as I was learning some things about jQuery the other week I ran across this Tetris example.  In the available JavaScript source code the author had a link to watch out for the Tetris Effect.  I thought maybe the Wikipedia link would discuss the number of lawsuits that that occurred from people using Tetris game play over the years.  Instead it said that “the Tetris effect occurs when people devote sufficient time and attention to an activity that it begins to overshadow their thoughts, mental images, and dreams. … People who play Tetris for prolonged amount of time may then find themselves thinking about ways different shapes in the real world can fit together, such as the boxes on a supermarket shelf or the buildings on a street.”

This immediately made me think of Red Dead Redemption.

I put some hours into that game on my Xbox 360 and every time I saw a bird in the air I wanted to shoot it out of the sky. I typically don’t consider myself a violent person, but yet this game made me want to shoot at fowl so I could see them spiral to the ground.

I have experienced the Tetris Effect before when playing Crackdown and thinking about the orbs that would look great on that skyscraper downtown.  Or when playing Assassins Creed thinking about all the places the flags could be placed.

That last game I have spent any significant amount of time on was Red Dead Redemption.  Now there are two additional expansion packs available.  I was looking forward to the multiplayer dice and card games but I haven’t fired it up in a while.  There are a lot of good games coming out in November, not even considering the whole Kinect sensor and it’s launch titles.  Recently, everyone has been talking about Halo Reach and Sid Meier’s Civilization V.

I hadn’t picked up Borderlands before, but yet for the PC it was less than eight bucks last week!  Still, I have refrained from any of these games because I’m holding out for Assassins Creed Brotherhood. I really enjoyed the first two games and am looking forward to the multiplayer addition to Brotherhood.

I would enjoy spending more time playing games, but that is playing and not working.  I’m not good enough to compete in game tournaments so it remains a recreation.  I’d prefer to play a good game than to go see a movie or watch a TV series.  So gaming is definitely a much better entertainment experience for me than just about anything else I can think of.  However, the bills need to be paid and so a limit has to be put on entertainment.  But when I am not refraining from playing a game, I end up with the “Tetris Effect” of whatever game I’m putting hours into.

If you happen to be looking for that next Xbox 360 game, you can save 30% every week on a featured Xbox game at the Microsoft Store.

Happy Gaming!

jQuery Goodness

By kewlniss at September 18, 2010 16:25
Filed Under: Web

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

By kewlniss at July 30, 2010 12:27
Filed Under: Community

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

By kewlniss at July 12, 2010 15:13
Filed Under: Life, Community

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”); }

By kewlniss at July 07, 2010 13:15
Filed Under: Life

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.

Page List