GiveCamp - Knoxville,Tennessee

As most of my friends know by now, I am an active member of the ETNUG (East TN .Net Users Group). If you live in Knoxville, Tennessee and you are a .Net developer, you really should come check it out.  It is a wonderful way to met new people, learn about new ideas / opportunities, and to stay frosty

Anyway, the ETNUG has a lot of events going on this year, one of which is CodeStock but another, which I am working to organize, is the Give Camp. 

Ann Arbor Give Camp

What is the Give Camp?

Briefly, the main goal of a give camp is to organize talented developers and ask them to donate a small amount of their time in order to develop applications for charities.   This particular give camp is located in Ann Arbor, MI and will be benefiting:   Michigan Chapter of the National Children's Alliance, Michigan Humane Society, The Wellness Community, Neighborhood Senior Services, Forgotten Harvest, Ann Arbor Hands-On Museum, and Angels' Place. 

Of course, they say it better than I could - http://annarborgivecamp.org/WhatIsAGiveCamp.aspx .

Personally, I think this is an wonderful idea!  I love to be able to participate in charity events.  Unfortunately, I usually don't have a lot of cash sitting around, so I tend to be able to give little to no monetary contributions.  The idea of the give camp not only lets me give to a charity event but to also do it using something that I love to do and something that (IMHO) I am good at!  This is an excellent idea and I am very excited about it!

What does Ann Arbor have to do with Knoxville?

Since the event is in Ann Arbor, it makes it very difficult to many people outside of that area to attend / contribute.  As a way to answer that problem, the Give Camp is asking people to try to organize remote facilities in which they can gather their own teams.  These remote teams will be given their own tasks to complete and will be able to function as a completely separate unit.  Since remoting is possible, the ETNUG is wanting to organize their own remote camp and gather together the best and brightest of our area to assist in the effort.

What can you contribute?

The Give Camp is not limited to just one field of expertise.  In fact, there is need for Web Apps, Desktop Apps, Database Administration, Design + Layout, etc.  Basically, if you have any programming experience (even if it is not 100% Microsoft), we can use you and would be glad to have you.  Any contributions will be welcome!

What is in it for you?

Truthfully, nothing and everything... lol.  The time spent is completely voluntary.  There will be no monetary gains for any of the participates  However, I am going to make sure that we get some good meals out of it and, hopefully, have a few nice door prizes to give away in the end.  Despite these things, I can think of several reasons why this would be not only a fun event but also helpful to you.

  • You get the satisfaction of donating your skills to a good cause. This way, I get to do something that I love and still greatly benefit the charities.  In fact, the donation of our expertise would equate to a huge monetary contribution.
  • You get to meet new people and learn new ideas.  As developers, we are always on a quest to learn more / get better.  This is a great way to meet that goal and learn about new ideas / concepts.
  • You get to network.  As any person in the industry could tell you, getting good jobs and opportunities is all about who you know.  This is a very visible event that would make an excellent chance for you to get your name out there.
  • Fun!  This is not a work task.  We will be working w/ a great group in a very laid back and enjoyable atmosphere. 

Fun In the Sun

What are the Logistics of this event?

The basic format that is suggested by Ann Arbor is using three days(Friday, Saturday, Sunday).  However, we are free to organize our remote event in any way that meets our needs, provided that we are within the July 11 - 13 time frame.  Once I get a running list of interested parties, we will find out the days / times that will work out for everyone else.  I do want to stress that this will not be like 'going to work' but, rather, a nice time to socialize and work with other professionals within our area. 

Although I have not worked out a location (once again dependant upon interest), I am planning to find a large common space somewhere in Knoxville.  The space will have Internet hookups but we will need to ask everyone to bring their laptops if possible.  If you do not have a laptop, please don't worry.  We will have spare desktops / laptops that can be used.  We can use all the talent we can get.

In conclusion, I really feel that this will be a worthwhile and fun event that will enable us to uniquely assist those in need.  If you are interested in participating, please feel free to post it here or shoot me an email at Someword at nathanblevins.com.

Thanks!


Categories: News / Events

posted by nblevins on 7/2/2008 10:28:42 AM

3 comments

Book Review : Freakonomics

Lately, I have been working to improve my reading habits.  Although I am an avid reader, I tend to read only technical books (programming, design, etc.) or fantasy novels.  Although I certainly find value in reading these 'genres', I have made it a goal to branch out to other topics / fields in order to diversify myself a bit more and to learn more stuff.  With that being said, I took the recommendation of Mike Neel to read the book Freakonomics

Freakonomics

Basic Concept

In a nutshell, this book takes the thrilling subject of economics and applies them to the basic incentives and actions of different groups of people.  Using gathered data and logic, the authors Steven Levitt and Stephen Dubner try to solve one of the most common questions that is asked:  Why do people do what they do? 

As it turns out, the books is primarily a book of cause and effect.  According to the authors, everything in the world is based on incentives.  If you want someone to do something / act in a certain way, give them an incentive to do so.  If you want them to quit a  behavior, offer them a counter-incentive that is greater than the incentive the is driving them to do that behavior.  Conversely, actions that a group (or single person) perform often change the incentives that people are adhering to, often causing drastic reactions.  As a way to prove this point, the authors visit a myriad of topics that range from why legalizing abortion caused a drastic reduction in crime, how charging daycare parents  $$ when they fail to pick up their child may increase the number of late parents, and, my personal favorite, what sumo wrestlers have in common with teachers.

Of course, this concept is much more complex than applying common sense to a problem.  Generally, common sense and conventional wisdom are horrible ways to try to create incentives.  Due to this, intense research and data crunching are essential - as well as patience (in some cases, 10 years worth of patience).  Simply put, we live in a very complex society and it is very difficult to predict even the basic behavior of one person, much less thousands.  Also, relaying on conventional wisdom, the-tried-and-true way, and / or common sense is just another form of assumption.  And, we all know about assumption....

The Good

First off, this book is written in a very clean style, which makes it a very easy read.  Throughout the book, I was able to keep a very steady pace, thanks to the author's wit and ability to convey fact in a very simple and clean fashion.  Really, I spent most of the book being totally amazed as the authors describe amazing scenarios and then defining the cause of those scenarios as things that I would have never associated with the cause.  The information was well presented and, IMHO, as accurate as possible.  In fact, if you purchase the newer addition, the authors spend some time discussing their efforts of keeping the book data up to date w/ the current printing in the forward.

The Bad

Be prepared for shock factor overload.  The book does a great job in presenting amazing facts and figures, but, eventually, you get a little numb to the effect.  The overall lesson of the book never changes - Everyone reacts according to incentives.   Consequently, the books tends to drive that point into the ground, but, at least, with some really good data!

I would liken reading this book straight through to reading the Guinness Book of World Records for an hour sitting.  Eventually, you no longer care about the world's longest measured turd - even if it is 12 feet 4 inches.

Final Thoughts

I would certainly call this an essential read for our times.  In fact, this book has altered the way that I plan / perceive events because it introduced a new realm of possibilities of how to create incentives.   I find applications for this book in just about every aspect of what I do, since everything we do usually involves a 'human factor' at some point.

If you are planning to read this book, I would recommend treating each chapter as if it were an essay rather than a chapter in a book.  Take enough time to read the 'essay' in one sitting, and then take a break from the book for a while.  This way the value of the book is enhanced but you don't suffer from 'shock overload'.

Have fun reading!


Categories: Book Reviews

posted by nblevins on 6/30/2008 11:32:35 AM

4 comments

CodeStock 2008 is coming!

Please come and join me at CodeStock!  It will be well worth your time!

My personal reasons for attending:

  • I will be speaking there!  (Shameless plug - I know)
  • The conference will be covering a plethora of topics, having topics of interest for almost any kind of developer.   They have 30 sessions!
  • The conference speakers and organizers are pretty amazing and really know their stuff. (And many of them are local which means that you can not only pester them at the conference, but catch them at the local users group (ETNUG) or catch lunch w/ them around town!)
  • Jeff Prosise will be there as the keynote.  If you have not heard Jeff speak, he is a very down to earth and energetic speaker.   His presentations not only cover the theory but the practice as well, making them very valuable to the practical developer.
  • Finally, there are some really fun things planned for the day.  I can't say more right now, but, needless to say, it will certainly add to the conference overall.  (I will probably get heckled for saying this much, lol)

But, if you don't want to listen to me, here is what they have say about themselves!


CodeStock's mission is to bring the best and brightest code experts to East Tennessee for a one day conference open to all developers. This is not a trade show with slick salesman giving prepared demos - this is a gathering of real programmers learning about the latest in technology from each other. Sign up now at CodeStock.org and join us for CodeStock 2008!

  • Keynote by author and MVP Jeff Prosise
  • 30 amazing sessions, by industry leading speakers
  • An area reserved for Open Spaces (self-organizing sessions)
  • Great prize giveaways including: VSTS 2008 Team Suite with MSDN Premium ($10,939 Value!)
  • Space is limited, register today!

Register at CodeStock.org

 

UPDATE - Now that they have officially announced the fun stuff - I can post it here:

Attending a conference to learn the latest in development practice and
see up close the new tools available is only part of what makes a
conference valuable. The other part is the time spent socializing and
networking with your peers. That's why CodeStock is throwing an after
party!

From 6pm till 8pm we'll have hot dogs, drinks and live music by
Knoxville's own Hanover Fist - these guys know how to rock (and I have
insider information that confirms some of them are also computer
geeks)! The stage area is located right next to the conference, and
there will be shade tents and tables setup for those not accustom to
Southern Living.

CodeStock - After Party


Categories: Programming ,News / Events

posted by nblevins on 6/24/2008 1:43:27 PM

3 comments

Compile a Web User Control into a DLL ( .Net / c# )

So, for those parties interested, I have recently done some work trying to compile "controls" so that I can begin to have a self-contained code snippet library on my site.  After doing a bit of research, I have found what I feel to be the best way to go about this.  In this example, I am going to create a simple web user control to compile into a dll and add it to a separate website.

First things first...

There is a bit of different between the types of controls that you can create.  The most notable of control types are the user control and the web user control.  The big difference between the two is that user controls require that you either inherit from a existing control class or create a new one from scratch.  This includes hand coding all the front end view properties and such through the render method that all controls have... blah!

Another option is making an web user control (or .ascx file, which is probably more familiar).  The downfall of this control is that it is not edit-proof, and does not allow you to store it in places where it can "auto-refresh" itself.  You only option, if you want to share them cross-app, is to make a separate virtual directory of controls and share them across your sites... blah again...

Anyway...

The option that I like the best takes the best of both worlds.  We will use the awesome fludity of the .ascx file, but also compile them into .dll's (protection and versioning!!), which can be added as a reference, entered into the GAC, and all that other fun stuff.

Without futher ado...

The process is rather basic, but you can build on it as it goes.  Here is the basic steps to follow:

1)  Create a new website.
2)  Add a web user control to the site (.ascx).  You will find this in the "Add New Item" menu of your site.
3)  Do whatever you need to do on your user control.  Remember to make whatever properties you need access on the control declaration public in the C# (just encapsulate your fields!).
4)  Once complete, go to the Build menu and choose "Publish Web Site"
5)  You will be given the option to change some of your setings here.  Naturally you want to select where to build to.  Also, uncheck the "Allow this precompiled site to be updatable" for right now.  Finally, check the "Use fixed name and single page assemblies".  You can do some more fun stuff here, but play with that later when you master the basics.

So now you have your .dll (check in the bin folder of the site you complied).  In order to use it, just do this...

1)  Create a new site or open the one you want to stick it into.
2)  Add the .ddl to the bin. 
3)  Register the .dll on the page.  (do this using the @Register attribute of the page)

<%@ Register TagPrefix="ASP" Namespace="ASP" Assembly="App_Web_test.ascx.cdcab7d2" %>
<%@ Register TagPrefix="ASP" Namespace="ASP" Assembly=" App_Web_amazonservices.ascx.cdcab7d2" %>

*Remember to exclude the .dll from the Assembly name... 

Once you have done this, you will be good to go!

This process has some great advantages, which I am sure you all recognize.  Also, those publice encapsulated fields are now availiable for you to set on the .net side of things. 

I have created a web user control for amazon web services, which I will post a tutorial about at a later time.  Happy coding! 


Categories: Programming

posted by nblevins on 6/9/2008 1:10:08 PM

2 comments

Generic Lists (List<T>) and Predicates

So, for those of you who have much experience w/ C# / vb .net, you are most likely used to the generic list.  List&#60;T&#62;, which is a child of the System.Generic namespace, is a generic container in which you can stuff whatever items you wish, so long they are of the same type.  This includes basic structures like strings and complex objects / class instances. 

This is all pretty awesome, but the fun only increases when you are trying to check to see if one of those class instances has a value you are looking for.  This is where the Predicate Generic Delegate comes into play. In a nutshell, the Predicate "represents the method that defines a set of criteria and determines whether the specified object meets those criteria" (Thanks MSDN, that clears it right up!).  In other words, it lets you delegate an action (like the action of checking an item instance for a value) to a separate function.  This is very good for us!  Check out the following code...

Basic Class...

<code type="c#">

public class AccessItem
{
    private object _objKey;

    public object ObjKey
    {
        get { return _objKey; }
        set { _objKey = value; }
    }

    private string _strKeyName;

    public string StrKeyName
    {
        get { return _strKeyName; }
        set { _strKeyName = value; }
    }

    private string _strAccessLevel;

    public string StrAccessLevel
    {
        get { return _strAccessLevel; }
        set { _strAccessLevel = value; }
    }

    public AccessItem(object Key, string KeyName, string AccessLevel)
    {
        _objKey = Key;
        _strAccessLevel = AccessLevel;
        _strKeyName = KeyName;
    }
}

</code>

Create a List and add some class instances...

<code type="c#">

List<AccessItem> tempList = new List<AccessItem>();

for(int x = 0; x < 10; x++)
{
  tempList.Add(new AccessItem(x, x + "Name", x + "AccessLevel");
}

</code>

Now, lets say that you want to find the access item w/ the key of 5.  If this were a basic int list, you could simply use the Contains bool in the List&#60;T&#62; properties.  In this case (since we are not dealing w/ a basic object), we are either stuck w/ looping through the list and checking values of each instance, or using the predicate.  The syntax for checking w/ a predicate is as follows...

<code type="c#">

tempList.Exists(delegate(AccessItem ai) { return ai.ObjKey == 5; })

</code>

Anyway, it is very painless and very maintainable.  Also, you have full access to your stuffed object, so feel free to drill down as far as you would wish in order to compare values...  Very cool!


Categories: Programming

posted by nblevins on 6/9/2008 1:09:56 PM

0 comments

The Game

If you are like me, you have 10 gazillion movies lying around your house.   In my case, I literally own hundreds of movies that are sitting around, never watched or only watched once.  That is not to say that I do not ever watch movies, but frankly “they” churn out movies faster than I can keep up.  Consequently, certain movies tend to get overlooked and never watched as the blockbusters are released and become the “must-have / must-watch” movie of the week.   Sadly, that leaves quite a few movies that might as well be coasters rather than anything useful.
In the odd occurrence that I have time to watch a movie and the movie choice is not evident, we have problems.  Living in a house with my wife and 3 roommates, it is needless to say that we have different tastes.  I tend to favor the action / adventure (I am also a sucker for the “classics” but I don’t want ppl to know.  I would hate to lose the man-points).  Crystal usually goes for the love / tragedy tear-jerker.  She also loves the classic slapstick comedy, National Lampoons Christmas Vacation being her favorite movie of all time.  Crystal and I both meet in the middle in that we are horror nuts.  Needless to say the choice is very difficult due to the fact that I want to watch Lord of the Rings for the 100th time and that she wants to see Because I Said So or some Lifetime Special (that usually makes me want to stab out my eyes halfway through).

In order to keep the peace, Crystal and I devised a way to determine the movie we want to watch without having to deal w/ the debate of what to do.  We leave the decision making process to a game which we call…  The Game..  nice huh?  Anyway, the rules are simple…

 

  1. The Game is all powerful.  All decisions are final… there can be no exceptions!  (if you violate this rule, you pretty much invalidate the game) On a side note, we have violated this rule before and replayed the game, only to get the same movie choice…  the Game knows!
  2. You chose a set number of movie entries that everyone has.  You can enter ANY movie and the rest of the group is subject to having to watch it.
  3. As just stated, everyone MUST watch the selected movie.  This makes it fun to select choices that only makes ppl suffer
  4. Optional Rule: You much decide a new game for every instance of The Game.  This rule is really fun and requires a bit of thought.  Eventually, you run out of steam though, but I recommend it.
  5. Optional Rule:  Taunting is allowed so long as the movie is not being played.  The selector of the movie can determine whether you can trash talk throughout the viewing (some movies it works, some it does not.

Beyond those rules, you simply have to create / select a game that is able to randomly determine the final result.  Currently we have played house miniature golf, all manner o