Sunday, February 27, 2011

What is Web Camp?

Web Camp is a Microsoft hosted web development coding camp with presentations on current Microsoft technologies and coding practices. They offer one and two day camps which cover different topics from HTML5 to WebMatrix. The topics for the web camp I attended were ASP.NET MVC3, and the jQuery javascript library. You can check for locations and topics for upcoming web camps here.

Preperation – After registering for the event, there are several things you can do prior to the actual camp in preperation. The first thing to do is install Visual Studio Web Dev Express, and Web Matrix from the Web Platform Installer found here. Don't forget to check that you also have the .NET and MVC3 libraries installed as well. Next, if you are unfamiliar with MVC, you can download the Web Camp Training Kit and walk through some of the introductory labs to get a loose grasp of the fundamental concepts.

ASP.NET MVC3 Fundamentals – Walking into the conference room with my limited web development experience compared to all the other working professionals in the room was pretty intimidating, but then we had the ASP.NET MVC3 Fundamentals presentation! Michael Palermo's presentation on MVC3 Fundamentals brought me up to speed on MVC as a programming model, as well as Visual Studio's own implementation of the MVC3 framework. Building his registration application on stage really showed how these introductory concepts are used in practice.

HTML Helpers and Validation – After going over some of the fundamentals, Dan Waters took over to cover some more advanced topics such as HTML helpers and Validation. Dan walked us through the creation of his own example project, an account management system, while explaining more advanced data access and modeling techniques.

jQuery Fundementals – This talk was a nice short introduction to most of the great element selection and manipulation features of jQuery. As a veteran jQuery user, I was pleasantly surprised to learn about a few new features of jQuery that are currently in Beta. The first new feature is called Templating, a feature similar to creating templates in XAML, for those of you who're more familiar with the .NET framework. The second feature is Data Linking, a Javascript implementation of binding fields of one object to fields of another object, also known as data binding in the .NET world.

jQuery, Odata & MVC – This presentation featured a walk through of a very cool Netflix project by Doris Chen. She goes over how to leverage Netlix's Odata service in order to grab movie and television data, template the data in a nice layout using jQuery, and even how to get developer codes from Netflix allowing you to play the movie right there from your own application!

Labs – The above presentations last until a little past lunch, the rest of the time is used for hands on lab work. You can pick and choose between beginner labs (mvc3, mvc3 with razor), and advanced labs (mvc and jquery), or even work on your own projects. They have plenty of staff there to give hints and answer questions.

Summary – Overall Web Camp was really fun and a great experience. I would definitely recommend this for anyone who's tired of hacking their projects together (like me), and wants to make that move to a consistent programming pattern. It's a great opportunity to work, and make friends with other professionals in your area.

Wednesday, February 23, 2011

Book Review: Oh, The Humanity! A Gentle Guide to Social Interaction for the Feeble Young Introvert


I am an introvert. And like most other introverts, I sometimes find it hard to survive in a world that seems to cater to the all mighty extrovert. As a result, I'm always on the lookout for good books on how to make things a little easier on myself. Flipping through Jason Roeder's, “Oh, The Humanity!”, I thought it might be useful to read, so I gave it a shot.  You can also see a list of other books I've reviewed on the “Book Reviews” of the site.

Part One: Essential Qualities You Lack

Confidence - Confidence doesn't necessarily mean acting without fear. If you had no fears, you wouldn't need confidence. Confidence, according to Jason, is taking action despite that fear. Jason touches on some tips for improving your confidence. My favorite tip from this section is keeping a pride journal. This is done by jotting down any small accomplishment, or maybe a small compliment someone gave you that day. Then, when you're feeling like you can't do anything right, you have this entire journal you can flip through to get back up and going again. Other tips include: Changing your inner monologue, taming your self consciousness, looking like you matter, and changing your environment.

Humor - Nothing can win people over faster or more easily than humor. This chapter guides you through some of the rules for using humor and, “harnessing your inner Wayans Brother.”

Curiosity - Everyone wants their thoughts and feelings validated just as much as you do. If you want others to be interested in you, then you're going to have to return the favor, because everyone else is just as self-centered as you are. The best way to get people interested in you, is to be genuinely interested in them.

Empathy - If you want to be the kind of person that a friend can go to and open up about private matters, you need to be able to put yourself in the other persons shoes. Some of these empathy rules include, not judging the other person, keeping the focus on them, and facilitating an appropriate environment.

Part Two: Conversation for People Who'd Rather Be Home Fondling Their Record Collections, Kniting Berets for Pets They May or May Not Actually Have, or Just Sitting in a Dark Room, Dreaming of an Even Darker Room

Small Talk - This topic is by far the most interesting for me personally, as I have the most difficulty with this in my own life. Jason does a nice job here explaining how easy it is to find shared interests and experiences that make for comfortable small talk, when using personal and situational observations. He also includes several nice tips on extending these starter topics into the types of conversations you can make friends with.

Difficult People and Topics - This chapter seems silly at first, with tips such as using hunger or restroom urges to excuse yourself from painful conversations. However, politely exiting yourself from controversial conversation or difficult people is definitely a good skill to have. This chapter offers some help with how to navigate through these difficult conversations and people.

Nonverbal Communication - Everyone knows that verbal communication is only part of the equation when it comes to how you express yourself. In fact, your body language can communicate as much, or even more than what you're speaking with your mouth. Following Jason's hints on smiling, eye contact, nodding, posture, and physical contact, should bring you a step closer to a relaxed, friendly and genuine first impression.

Effective Cross-Cultural Communication - Jason makes a great point here that not everyone you meet will come from the same culture or ethnic background as you. This chapter offers some tips on how to use some extra caution when dealing with cross-cultural communication, as well as some common values and customs that vary with ethnic diversity.

Part Three: Making Friends That Last a Lifetime (Or Until Things Just Kind of Drift)

How Do I Know If Someone's My Friend - A friend is someone who puts up with your flaws. A friend encourages you. A friend is honest with you. A friend is someone you can confide in. A friend is fun. A friend will happily drown for you.

Where Will I Find My Friends? - I had never really thought about this question until reading this chapter because up until now, I've always had plenty of opportunities to make friends in school with classes, intramural sports, clubs and other events. Once I graduate however, I will no longer have such easy access to making friends. Jason offers some great tips on how to go out and meet people. My favorite of these tips is joining an adult education class or volunteering. This way, you already know you have at least one common interest to talk about with everyone around you.

Will You Be My Friend? - This isn't my top choice on the topic, but overall, this is nice short, and to the point book, with plenty of tips getting you started with overcoming shyness or introversion. There is plenty of humor throughout the book keeping it fun and easy to get through in one sitting.   

Sunday, February 20, 2011

Lessons in Manliness: My Little Brother

      There's a little writing project going on over at, “The Art of Manliness” blog, where readers are able to submit a blog entry about someone they believe embodies what it means to be a man. Some of the early entries have inspired me to write about someone I'm beginning to look up to more and more, as he continues to grow into this awesome young man, my little brother.
      Nolan, is the second child (after me), with two younger sisters right behind him. He is a big time gym rat, participating in football, wrestling, and soccer through high school, and continuing into college with rugby and judo as he makes his way through the physical therapy program at Creighton University.
      As kids, Nolan was the kind of brother who always wanted to follow me around, hang out with me and my friends, and do whatever else he could, to be just like me. Somewhere along the line though, he started to figure out his own thing, and today, it's me who looks up to him. Here are a few lessons in manliness my younger brother has taught me.

Don't worry about what others think: I love my brother, but that doesn't stop me from pretending I don't know who he is when he embarrasses me on a daily basis. My brother takes longer than my sisters getting ready to go out, and can't walk past a mirror or reflective surface without looking at himself. The thing is, Nolan cares about his physical appearance, and when he cares about something, it doesn't really matter when others tell him it's dumb, or that he looks stupid when he's staring at his reflection in the car window. Don't get me wrong, I really do think he should get help with the whole checking himself out thing. But then I'll watch him bring our little sister to his judo practice because she wanted to try it out. Nolan cares about our sister just as much as he cares about his reflection, and he didn't even have to think twice about it, even when all his buddies were snickering at the sight of him hanging out with his little sister the entire day. Now that is definitely pretty cool.

Speak what's on your mind: Every holiday season, a bunch of long time friends and I get together for our annual Christmas dinner. This past winter, as I was getting dressed for this dinner, Nolan came up to me and basically told me I wasn't going out dressed like that. When he was done giving me a hard time, he took me to his closet and helped me pick something out that was a bit more reasonable to him. When Nolan thinks something is wrong, he's not afraid to speak up. Once he speaks his mind though, he lets it go, he's not really there to judge. The thing that separates him from most criticizing assholes is his ability to easily empathize with almost anyone. He's experienced countless struggles with others (including me) laughing at something he cared about or thought was really cool. So in turn, he understands he shouldn't be judging anyone else when they may seem a little different or odd as well.

No one is perfect, but try your best: After a long first semester away from home at college, my brother decided to come home for Christmas break and party with his friends. I don't usually really care what Nolan and his friends do when they go out, but I can remember his reaction when my dad found a bunch of empty alcohol bottles littered on the family car floor the next morning. I've never seen anyone so scared for his life before. Even though I have plenty of nice things to say about my brother, he is far from perfect and has done some incredibly stupid things in the past. The thing is, he's not afraid to admit it. Instead of trying to hide it or allowing it to linger, he's eager to accept it, learn from it, and move on.

      All these traits are what make up this very confident young man my brother has grown into. I feel very proud when I see him out there not desperate to please anyone other than himself, and the people he loves. His many quirks and screw ups are what makes it easy to feel he's not there to judge any of yours. I hope to one day learn to live with his great understanding that your friends and family don't want you to be perfect, and that your faults are what make you endearing. I think everyone can live a little happier when they can embrace any mistakes, instead of being afraid to make them.

Sunday, February 6, 2011

What is Net Neutrality?

The Issue – Net Neutrality is the term used to describe the issue of whether an Internet Service Provider (ISP) should have the ability to shape or control the data usage on its own network. The internet currently acts as a neutral medium, where people can access or distribute any service through the internet, without having to worry about traffic from other services taking higher priority over its own (with few exceptions). However, major ISPs want to change the way this works. They want the legal ability to implementing techniques such as bandwidth throttling, or even outright blocking certain types of content. For example, they could cut down the max transfer rates on email in an attempt to clear up bandwidth for other types of traffic such as video, or completely block any torrent traffic tying up its network.

The Argument Against Net Neutrality – Internet and Cable Providers argue that the quality of their service will degrade without the ability to shape internet traffic. They currently lack an efficient technique that allows them to accommodate the resent surge in data heavy services such as Hulu or Netflix. ISPs feel they have a right to do whatever is beneficial to their own company. The free market should allow them to act as they want and allow users to vote with their dollars, by either choosing to stick with a provider that interferes with traffic, or move to a competitor that does not.

The Argument for Net Neutrality – Supporters of net neutrality believe that internet service should be treated as a utility, and a provider should not care about the traffic going through its wires. An ISP should not be able to prioritize its traffic, because doing so can lead to the elimination of competition between those content providers who can pay for higher prioritization and those who can't. For example, a small start-up wanting to stream television over the internet would not be able to compete on a Comcast network who is blocking any television streaming service other than its own.

Current Rules – On December 21, 2010 the FCC approved new Net Neutrality rules defining what an ISP can and cannot do. The rules state that all there will be no shaping of legal content over wired infrastructure. The rules are slightly less strict on wireless networks however, as wireless carriers such as Verizon or AT&T are able to transparently interfere with certain content or services as they see fit. This means that as long as wireless carriers are open about what traffic they chose to discriminate against, they can do it.

My Opinion – I look at it this way, would you rather have competition between internet services providers, or individual content providers? Large ISPs have such a strangle hold on the industry that a consumer will usually only have one or two decent options in a give area. This undermines a huge chunk of the anti-Net Neutrality argument. An ISP that can manage it's network by throttling certain types of traffic can just sit there without improving infrastructure when it's users don't really have another option to turn too.
Adding regulations will keep a high quality of competition between content providers. Instead of large established companies being able to pay for high priority traffic, they will have to compete with any small start-up on a level playing field, leaving innovation the only choice to improve and beat out the competition. And when ISPs aren't able to shape traffic to their needs, the only other choice they have is to improve their current infrastructure.
Verizon is currently fighting the rules set by the FFC, however I feel that strict Net Neutrality regulations will prompt innovation and improvements in both the quality of the service and content providers, leading to a win for the average consumer on every front. 

Thursday, February 3, 2011

Resolution Update


It's been about three weeks since I'd shared my resolutions for this year so I thought I'd give a quick update on my progress.

Graduate Project

This is the goal I've probably had the most success with so far. I hope to soon have a review up on Javascript the Good Parts, by Douglas Crockford, as well as Beginning Javascript and CSS Development with jQuery, by Richard York, the two books I read through as preparation for this project. I also want to post a few jQuery tricks I've found most useful so far, along with a screen shot or two of my progress.

Windows Phone 7 App

I would say I'm having medium success with this one so far. I already have a review of .NET Book Zero, by Charles Petzold posted, with another one on Programming Windows Phone 7 by the same Arthur coming soon. The disappointment comes with having jumped into the programming without a full understanding of the code I was writing first. After reading through .NET Book Zero and most of Programming Windows Phone 7, I can already spot several critical flaws in my first app including window navigation, tombstoning, and data passing, bringing me right back to where I started. I will definitely do my part in trying to prevent others from repeating my mistakes by posting the previously mentioned flaws, and how to properly correct them (until I find out that my new fixes are not the most efficient methods either of course).

Guitar Performance

I've had the least luck with this one so far as I can start to see my dreams of becoming a rock star slowly melting away. I've been practicing the most challenging piece I've tried to date, an arrangement Joan Osborne's “One of Us” by Ulli Bogershausen. However I'm beginning to think that I'm not going to be able to impress any strangers with it, and I may need to step up to an even more advanced version, or drop the song all together.

So that's what I've been up to so far this year. Hopefully I can keep the momentum up through another month, and come back with better results next time. Its felt great to get through all of the reading material while getting most of the design docs out of the way, but I'd be lying if I told you I wasn't worried about the lack of code I have down so far. Alright, here's to round two!


Book Review: .NET Book Zero

I read through this book in preparation for my resolution of writing applications for Windows Phone 7 devices. This book is a great starting point for anyone looking to get involved with .NET or Silverlight programming. .NET BOOK ZERO started out as an introduction chapter to .NET, trying to cover some of the key differences between C++ and C#. However, it soon became obvious that this single chapter was trying to cover too much and turned into an entire book of it's own, going over the very fine details of objects and structures, to string manipulation and nullable types.  You can also see a list of other books I've reviewed on the “Book Reviews” of the site.

Chapter 1: Why This Book – The latest version of this book is available for download free of charge at www.charlespetzold.com.

Chapter 2: Why .NET? - This chapter reviews the basic requirements of .NET programming including CIL and CLR. The first important difference between c++ and c# is pointed out right off the bat: no pointers!

Chapter 3: Runtimes and SDKs -You'll need the .NET runtime components and SDK (available here) in order to program and run .NET application. .NET namespace, class structure, and api documentation are available here.

Chapter 4: Edit, Compile, Run, Disassemble – This chapter takes a look at how namespaces are used to organize code, and the syntax used in method calls. The chapter continues to go over where namespaces fit into the compilation process.

Chapter 5: Strings and the Console – This chapter introduces the concept of static vs instance methods while reviewing the strings class.

Chapter 6: Primitive Data Types – C# supports short, int, and long integers just like C++. C# also supports boolean, character, string, floating point, double and decimal value types. Many of these data types can be used with the Math class.

Chapter 7: Operators and Expressions – Primary, unary, multiplicative, shift, relational, equality, logical, conditional, and assignment operators are discussed in this chapter.

Chapter 8: Selection and Iteration – C# supports the same selection, iteration, and flow control statements used in C++, with some restrictions. These restrictions are intended to help you avoid common coding mistakes.

Chapter 9: The Stack and the Heap – One of the most helpful chapters in this book. This chapter covers key differences between structures and classes, including what these differences mean during memory allocation, along with very clear explanations of the stack and heap.

Chapter 10: Arrays – One of the less useful chapters in the book. We go over multiple ways of initializing and filling arrays, including multi-dimensional arrays. If you have any experience with c++ you can completely skip this chapter.

Chapter 11: Methods and Fields - Most of this chapter goes over syntax of defining methods and fields. There are some notes of interest in this chapter as well. This chapter introduces c#'s alternative to using pointers by taking a deeper dive into the differences between classes and structures, and what these differences mean during the parameter passing process in c#.

Chapter 12: Exception Handling – A very short and concise review of structures of exception handling including try(), catch() and throw().

Chapter 13: Classes Structures and Objects – This chapter re-visits classes and structures, while adding some new concepts as well. The bulk of this chapter is spent on how memory is allocated on the stack and heap for different data types, and what this means for efficiency.

Chapter 14: Instance Methods – Any instance method in a class has access to the instance fields of that class. This greatly simplifies code by reducing parameters that need to be passed between functions. Instance methods can also call any other instance method, static method, or static fields of it's class. A static method has access to none of these.

Chapter 15: Constructors – This chapter goes over basic syntax for creating a constructor. All classes have a default parameter-less constructor. This constructor is deleted if a constructor is defined by the user and an error is thrown if it is used.

Chapter 16: Concepts of Equality – Every class and structure includes a method named equals. This method is defined by the System.Object class, and inherited by all other classes. This chapter defines what you are actually comparing when you use the equals operator with any class including user defined classes.

Chapter 17: Fields and Properties – In use, properties look and behave just like fields. The major difference is that properties can have code attached to them, which can be used for get and set methods. This makes using properties much cleaner to use in most cases.

Chapter 18: Inheritance – A class can only inherit from one other class, where all non-private fields, properties, and methods are inherited. However, constructors are not inherited. This chapter looks at the order of which constructors are executed from parent to child class.

Chapter 19: Virtuality – getType() and typeOf() are methods that return an object of type Type. This object can be used to determine if two objects are of the same time. Only methods and properties can be declared as virtual.

Chapter 20: Operator Overloading – Any operator can be overloaded to work with a user defined class. These operators include: +, -, !, ~, ++, –, true, false, *, /, %, ==, !=, <, >, <=, >=. This chapter includes syntax for overloading these operators, as well as example use cases.

Chapter 21: Interfaces – Classes can inherit from only one class, however they can inherit an infinite amount of interfaces. A class must include a methods of an interface it is implementing.

Chapter 22: Interoperability – This chapter demonstrates how to use platform invoke, which allows you to use Win32 API functions from your .NET programs.

Chapter 23: Dates and Times – This chapter introduces the DateTime object. Constructor parameters, tick counts, DateTime calculations and TimeSpan are explained throughout this chapter through the DateTime example project. This project is continued throughout the rest of the book.

Chapter 24: Events and Delegates – A delegate is a reference to a method. Handling events across objects is a common use of delegates. An event handler is attached to special delagates called events. These event handlers are called once an event is fired.

Chapter 25: Files and Streams – This chapter takes you through the lowest levels of file input/output with the FileStream class, reading and writing text files with the StreamReader and StreamWriter classes, and finally higher level file reading with the Environment, Path, DirectoryInfo, Directory, FileInfo, and File classes.

Chapter 26: String Theory – All strings in C# are immutable, which means that a string can not be altered once it is created. Instead you must create a new string whenever you need to adjust a string in some way. This chapter covers string manipulation and performance factors when when working with strings.

Chapter 27: Generics – Generics is the C# method for implementing the C++ template. Generics also support defining constraints that restrict the type of object that can be used with your generic.

Chapter 28: Nullable Types – Any value or structure can be made a nullable type. This is useful for defining a way for defining a value as not yet defined.

Summary: If you have a good amount of programming experience, .NET Book Zero definitely has it's share of less interesting material, some of which include data types, arrays and operators. However, I would still strongly recommend this as a starting point for anyone making the jump from C++ or C to C#. The chapters on delegates, properties, and class structures will give you a complete understanding of new concepts with extremely clear and concise explanations and examples. Chapters on stack and heap, differences between structures vs. classes, fields vs. properties, and static vs. instance were like a bonus review that cleared up some concepts that I never completely understood myself. And as a free download available at www.charlespetzold.com, the price can't be beat.