This Guy’s a Competent Communicator

Memorizing an Entire Speech is Difficult

In December, I completed my 10th and final Toastmasters Speech on the path to fulfilling my Competent Communicator certification.

The intention of the speech was to Inspire with the length being between 8 and 10 minutes.

On one hand, I feel I’ve learned a great deal from presenting 10 speeches at my Toastmasters Club. I’ve become much more confident and have a better feeling for what types of stories work when writing my speeches. On the other hand, I still haven’t mastered the ability to speak, and say everything I want, without notes. This was evident in the below speech. 8-10 minutes is longer than any of the others, so my attempts to memorize the entire thing left me pausing to search for the next line far too often. I am sure I can overcome this struggle with more practice.

With the certification out of the way, I can now relax a bit and have some more fun with my future speeches. I’ve got a couple of clever ideas I can play around with. Stay tuned to see them.

Advertisement

2013 New Year’s Resolutions and a Little Friend

Pregnant Women Celebrating ChristmasAs December nears, it’s time to brainstorm my New Year’s resolutions for 2013. The Stuller family is expecting its first baby in that time, so it’s entirely possible that any goal I set for myself will immediately seem implausible, thwarted by a new dependent and many personal misconceptions about the transition to parenthood. Still, naming my goals will be helpful, even if only the most important bubble up to the surface over the next year.

 

Certifications

In Were my Microsoft Certification Exams Worth it I detailed my experience with these types of certifications. My conclusion has been upheld so far, that the certifications themselves do not provide much value once a certain level of experience is obtained. Therefore, I’ve fully abandoned the idea of updating or getting new ones.

“Any sort of certification by a tool vendor is worthless. Any certification created by a methodology proponent is also worthless.” – David Starr on Herding Code episode 150

Despite the quote above, I’ve decided to make Scrum Certification a goal for 2013. I feel I have a good grasp of iterative project management processes but I could benefit from structured training about a specific, standard methodology. I understand that the certification itself is not the end goal, but it is a nice motivation as a milestone of my learning.

“If you go for certifications, remember your goal is not simply to put more letters after your name but to maximize the value of the educational experience. Winning the game requires that you not only keep your eye on the ball but also anticipate what the next pitch will be. Historical evidence suggests that the average lifespan of any system is approximately 18 months, so the planning process for how you’re going to replace what you just built starts pretty much the moment you finish building it. Planning is a lot more effective when you know what you’re talking about. Being informed on emerging trends is a fundamental job responsibility, something in our business that needs to be done daily to keep up.” – 10 Essential Competencies for IT Pros by Jeff Relkin

 

What am I going to do instead?

Yesterday I read Paul Graham’s most recent post, How to Get Startup Ideas. This blog post really cut to the core of me, as it described the best ways to identify startup ideas. While I sometimes come up with ideas for products, they don’t occur to me as frequently as I’d like. Paul articulated what type of people have the most success, namely those who “live in the future and build what seems interesting.” So that’s what I’m going to strive to do. Throughout my career, I’ve done a pretty good job of solidifying certain skills, such as specific technologies (SQL Server, C#, jQuery) or communication (writing and public speaking). However, I’ve been hesitant to jump into new, trending technologies. For a long time, I considered it beneficial to isolate myself from fad technologies, figuring I can save time that way. In 2013, I’m going to try to both live in the future and build what’s interesting. Maybe that means working a little on a mobile app or maybe HTML 5. I don’t want to constrain my options by listing any technologies before the year even starts. If something seems cool, I’m going to come up with an excuse to build something with it.

 

Public Speaking

I’m scheduled to wrap up my Toastmasters Competent Communicator certification by the end of this year (more on this in a later post). In 2013, I’d like to leverage the practice I’ve had toward some sort of speaking arrangement that advances my career.

 

Personal Life

As usual, I don’t just make goals for my career. There are also things I strive for in my personal life. Among those, I’d like to complete 1 big home improvement project (convert our half bathroom to a full or move my home office), get back in shape (how about a half-marathon), get involved (with my alma mater or our neighborhood).

 

The Blog

What should I do with this blog? This is post 45, which means I’ve devoted over 40,000 words to it. My site visitors are steadily increasing and they are even stable when I take an extended break. However, when I started 3 years ago I thought I would have had more traction by now. I enjoy having a forum with which to express myself but a) I’m running out of content ideas and b) I’m losing motivation based on the slow traffic growth.

Traditionally, I tend to bounce back and forth between technical articles and more generic lessons based on personal stories. Which category speaks most to you? I’ve said everything I need to say from a self-expression standpoint, so when I continue to blog, I want to ensure I’m providing something useful for my readers.

 

Bring in the New Year

Clearly, many of my ideas are half-baked. That’s partly because I still have a month to decide on New Year’s resolutions and partly because I have no idea what to expect of life with a child. Still, this post is important as a record of my mindset at this critical milestone in my life. It’s also an open invitation for discussion. What other goals or modern technologies should I be considering? How will a newborn affect my personal goals over the year? What type of content should I be producing?

Thanks for your time. You’ll be hearing from me again soon.

Lessons Learned Negotiating for my First Car

In my early adulthood, I hated negotiating. The process seemed dirty, one which often felt like it required dishonesty. I remember my one attempt to haggle for a $25 t-shirt at a market in the Caribbean when I was 17. My strategy: opening my wallet and saying I only had $5. Somehow the merchant saw through this ruse. I ended up paying full price with the money from my other pocket.

Negotiating down the price of something is uncomfortable for many people:

  • It creates confrontation
  • Logically, items should be marked with a price that everyone pays
  • Even after coming to an agreement, there’s always a sense of wonder if the price could have gone even lower
  • “Professional” negotiators often exaggerate with guilt trips such as “I’ve got kids to feed”

    In Business As in Life, You Don’t Get What You Deserve, You Get What You Negotiate

Immediately after getting my first job offer soon after college, I went with my mom to the local car dealership. She was the negotiator in the family who drove the hardest bargain. I bought a car that Saturday from the first dealership I visited because I needed one for Monday. I went in expecting my mom to work her magic, but I sat and watched while the only additional value we extracted was an extra year of oil changes. Over time, I realized that I basically paid full price for something I didn’t have to, and I became determined to reduce my ignorance of negotiation.

An important concept to understand about negotiation is optimal pricing. Essentially, this means that the dealership wants to charge as much as any individual customer is willing to pay. The price is set to an arbitrarily high amount and each customer negotiates it down to an amount he or she is willing to pay. The dealership would not sell a car below what makes a profit. The salesman’s job is to make you feel like that baseline price is higher than it actually is. Does that make you feel more comfortable about negotiating? The additional money being paid above the baseline is going straight to profit!

The same applies to other scenarios, such as at a street market or negotiating salary. Obviously, there are many additional economic factors to consider, of which I know only a little. However, knowledge of this simple concept can ease discomfort about the negotiating environment.

Reaching the end of a job interview, the human resources person asked a young applicant fresh out of business school, “And what starting salary are you looking for?”

The applicant said, “In the neighborhood of $125,000 a year, depending on the benefits package.”

The interviewer said, “Well, what would you say to a package of five weeks’ vacation, 14 paid holidays, full medical and dental, company matching retirement fund to 50 percent of your salary, and a company car leased every two years, say, a red Corvette?”

The applicant sat up straight and said, “Wow! Are you kidding?”

And the interviewer replied, “Yeah, but you started it.”

-from Recruiters Network

Over the years, I’ve negotiated much more on my own, another car, home prices, salaries, etc. While I’m still very far from as proficient as I’d like to be, these experiences have taught me what to do and what are my weaknesses.

Create Objectivity by Having Someone Negotiate for You

A tip I learned from You Can Negotiate Anything is to ensure an objective party is negotiating for you. Because emotions often get in the way of logic, having someone who is invested only in reducing price can be highly beneficial. Relating this to my story above, my mom should have been objective in the situation but her own emotions were in play. She wanted to make sure I had a car so I didn’t have to borrow hers anymore. She did not want to experience the “pain” of lending her car any longer and was willing to have me pay to get my own.

Willingness to Walk away

The number 1 rule of negotiating is being willing to walk away from the deal. This gives you leverage.

In my example above, my mom was not willing to walk away, because she wanted me to have my own car. In other practical scenarios, this rule means that no one will give you a better price if he or she thinks you are going to buy something anyway. In contrast, if he or she senses your willingness to not come to an agreement, he or she will be more likely to meet your demands.

Collaborate on Less Significant Issues

Sometimes either party will not budge on the main issue, such as price. However, it can be possible to come to agreement on other items that are more significant to one side than the other. In the above example, this meant getting more free maintenance. In salary negotiation, it might mean getting extra paid time off or tuition reimbursement instead of a salary increase. There are many ways to add mutually beneficial clauses to meet in the middle of a negotiation. Additionally, this strategy is much less confrontational.

“If I give one to you, I have to give one to everybody else”

When going into a negotiation, make sure you understand the worst case scenario. Where possible, prepare beforehand to improve the worst case scenario. If missing out on a job opportunity means not having a job, then you can improve the worst case scenario by trying to line up a second job offer. Little tips like the ones above, plus many others, can help to make you a deadly negotiator, and as with anything, practice makes perfect.

How to Generate .NET Classes from a Non-.NET Data Feed

Most people do not realize how much data is available on the web via APIs. Indeed, we .NET programmers tend to be a breed that ignores the trendy new data feeds that are available. Perhaps it’s because it is intimidating to try to interact with sites written in PHP or Ruby on Rails or maybe it’s because the only examples anyone ever shows are for Netflix or Twitter APIs (2 APIs that are not particularly useful for an Enterprise Developer). Now is the time to expand your horizons. As more and more data becomes available, the usefulness increases for all types of applications. I aim to broaden your awareness of the entire domain of public web services (APIs) and show you that

  • .NET can be a great client coding-language for any standard web API
  • There are great online resources to find available APIs.

 

Table of Contents

Before I dive head first into all the details, here is an outline of what I will cover and the basic steps involved:

  1. Purpose/Intention
  2. Choosing an API
  3. Review Documentation
  4. Determine a Sample Query
  5. Generate Classes at Json2CSharp.com
  6. Paste Generated Classes into New Application
  7. Massage Generated Classes
  8. Reference Json.NET
  9. Retrieve Data with a WebClient Object
  10. Display Results within Application

 

Purpose/Intention

At this point, you may be asking yourself, “why do I care about Data Feeds, APIs, and public Web Services”? You should care because it is the technology through which online companies share their data. If you think it might be worthwhile to someday automatically retrieve the weather forecast, stock prices, sports scores, site analytics, etc. and make logical decisions based on the data, then pay attention because the steps that follow are how you get started. A well-known example of a website using a public APIs is Expedia.com, which retrieves commercial flight and hotel information from multiple providers based on a user’s travel criteria. There’s very little stopping us .NET developers from gathering together multiple APIs in a similar fashion.

 

Choosing an API

The first step of connecting to an API is to choose which one you will connect to. If you already know, you need to find out more information about it. To do this, I used ProgrammableWeb.com, an online directory of public-facing APIs. When I started the exercise for this blog post, I did not know which API I wanted to test with, so I just clicked on API Directory | Newest APIs. As tempting as it was, I chose not to use the Stack Overflow API, because it is already built in .NET and is therefore disqualified from this blog post. Instead, the API for the Khan Academy caught my eye.

In case you haven’t heard of it, Khan Academy is a non-profit organization that provides a wide range of training videos and courseware for free online.

The Khan Academy API is perfect:

  • It’s not a .NET service written in WCF (it’s Python)
  • I hear about the site all the time. It’s sexy right now.
  • It follows a web standard, REST formatted in Json.

By clicking the Khan Academy link in the Programmable Web directory, I was eventually taken to the Khan Academy API documentation site.

 

Review Documentation

Many large websites have thorough documentation about their APIs. Still, there is a wide range of information that you may come across when researching them. Some have client-side examples in .NET and others even have 3rd party libraries (e.g. MailChimp) specifically written for them. Khan Academy has a nifty tool called their API Explorer, which allows you to click on different types of REST queries and see example responses. . I’ve seen similar tools on other sites too, such as Yahoo.

 

Determine a Sample Query

To start creating our .NET client application, we need to determine a sample query and retrieve response data. I’d like to generate local, .NET classes to consume the information sent back from Khan Academy.

There are a couple different ways of thinking about this:

If I know specifically what type of information I will be using, I can look for documentation on how to retrieve that narrow result set. In this case though, I want to start with as many classes as possible, to fill out my .NET solution with a large portion of classes.

The playlists/library/ query is great because it returns nested results. So, for example, it has information for playlists, with sub-information about videos, tags, etc.

Having a sample response like this is half the battle, and it’s not that difficult to get for REST services.

 

Generate Classes at Json2CSharp.com

Once we know what sample query we are going to use, we continue to our 2nd big step, where we either paste a URL or Json results into a website named json2csharp.com.

This website converts the sample response data that we entered into .NET class definitions. With this step, we are letting the Json2CSharp website perform a significant step of the process for us automatically.

Why do we go through the effort to generate .NET classes like this?

  • It enabled compile-time checking and intellisense
  • Design-time use in Web Forms Gridviews, etc.
  • Can be used in older versions of .NET (earlier than .NET 4), which do not yet have dynamic objects.

 

Paste Generated Classes into New Application

Now that I have generated .NET classes, I will copy them into my Windows Clipboard (Ctrl-C) for later use.

Let’s keep things simple by creating a brand new Web Application. In Visual Studio 2012, select File | New | Project. Then select an ASP.NET Web Forms Application.

 

With the new application in place, let’s add the .NET classes into the solution.

First, add a class file to the project.

 

In this file, paste (the .NET classes that are in your Clipboard) over the default class. As a quick sanity check, you should be able to successfully compile the solution.

 

Massage Generated Classes

Json2CSharp sometimes struggles with ambiguous responses. As a result, it generates duplicate class definitions as is true in our case.

Still, it’s nice that the class generator got us part of the way toward our final code. Let’s massage our classes to remove any classes that have numbers on the end. Also, switch any reference to the duplicates back to the primary class.

Delete: Item2, DownloadUrls2, Video2, Playlist2, DownloadUrls3, Video3, Playlist3

Alter: References to Item2 -> Item, References to Playlist2 -> Playlist, Reference to Playlist3 -> Playlist

 

Reference Json.NET

In order to deserialize Json results into our generated classes, we need to use another 3rd party tool named Json.NET. To add a reference to this library, we can perform either of 2 methods:

Download and Add Reference

  1. Browse to Json.CodePlex.com
  2. Download the latest version as a .zip file
  3. Extract the relevant version of the Newtonsoft.Json.dll
  4. Add a reference to the dll

Install with NuGet

  1. In Visual Studio, go to Tools | Library Package Manager | Manage NuGet Packages for Solution
  2. Click Online in the left panel
  3. Click Json.NET to highlight that package
  4. Click Install

 

Retrieve Data with a WebClient Object

At this point, we’ve got the framework setup in our solution to store strongly-typed representations of the Khan Academy data. Next, we need to write the code to retrieve that data.

Here is the snippet I put in the Default.aspx.cs file to automatically retrieve the data and format it with Linq.

public static List<Playlist> GetKhanVideos()
		{
			var client = new WebClient();
			var response = client.DownloadString(new Uri("http://www.khanacademy.org/api/v1/playlists/library"));
			var j = JsonConvert.DeserializeObject<List<Item>>(response);

			List<Playlist> playlists = new List<Playlist>();
			playlists.AddRange(j.Select(i => i.playlist));
			playlists.AddRange(j.Where(k => null != k.items).SelectMany(i => i.items).Select(i2 => i2.playlist));
			playlists.AddRange(j.Where(k => null != k.items).SelectMany(i => i.items).Where(k2 => null != k2.items).SelectMany(i2 => i2.items).Select(i3 => i3.playlist));

			return playlists.Where(p => null != p).ToList();
		}

 

Display Results within Application

In our last step, we want to see the output of our query, so let’s leverage the drag-and-drop ability of Web Forms to easily visualize the data.

  1. Open Default.aspx in Design View
  2. Using the Toolbox, add an ObjectDataSource
  3. Configure the DataSource
  4. Choose WebApplication1._Default as the business object
  5. Choose GetKhanVideos() as the Select Method
  6. Using the Toolbox, add a GridView
  7. Configure it to choose the above Data Source
  8. Many of the fields will be empty or gibberish, so let’s remove several columns:
    1. backup_timestamp
    2. hide
    3. init_custom_stack
    4. ka_url
    5. kind
    6. standalone_title
    7. topic_page_url
    8. url
    9. youtube_id

To see the new application in action, press F5 to run it.

 

Conclusion

With the help of a few 3rd party tools, retrieving and displaying any REST-based API in .NET can be easy. Not only that, but it’s going to get even easier. In Scott Hanselman’s ASPConf keynote, he showed an extension that is being developed by Mads Kristensen for Visual Studio 2012 that would eliminate several of these steps. It allowed an option in Visual Studio to “Paste JSON as classes,” thereby eliminating the need for the class-generation website. Microsoft realizes that the trend of creating and leveraging public APIs is not going away so they are doing something about it. And so should you.

 

Disclaimer: This product uses the Khan Academy API but is not endorsed or certified by Khan Academy (www.khanacademy.org).

How I Enjoyed the Rock Paper Azure Competition

Rock Paper AzureIn mid-December, I saw an ad on StackOverflow.com and was immediately intrigued. “Rock, Paper, Azure!” was a contest run by Microsoft wherein programmers design bots to compete in a modified game of Rock, Paper, Scissors. The bots had to be hosted in Microsoft’s cloud computing platform, Azure, so you can easily see Microsoft’s motivation to give away some small prizes to influence developers into trying and (hopefully) adopting Azure.

Although I had plenty of things to keep me busy leading up to Christmas, the Rock, Paper, Azure marketing worked on me. I figured I could take 1 or 2 hours out of my time and write the best algorithm I could in that time. Besides, I would be entered into the grand-prize contest drawing just for competing with even the most simple of bots.

Bugs LanguageI was immediately reminded of a school project from an early Computer Science course at Ohio State. The contest back then pitted “bug bots” from teams of students in the course against each other. Each team started out with a handful of bugs on a large virtual checker board. A bug could “convert” another student’s bug by facing it and issuing the “bite” command. The bitten bug would then become a member of the “biting” bug’s army. The game continues until one team has converted all bugs. If I remember correctly, there were only a few possible commands:

  • “Detect” if an object (like a wall or another bug) was in front of it
  • “Move” forward 1 square
  • “Rotate” left or right
  • “Bite”

 

It may have evolved since then, but our bot did surprisingly well back then despite a very simple algorithm:

  1. If something in front, turn left, bite.
  2. Else, move forward, bite.
  3. Repeat Step 1.

 

I’ve often wondered what additional strategy I would write into my bot if given another opportunity in such a competition. Rock, Paper, Azure was the challenge I was looking for.

Microsoft’s version of “roshambo” came with a few twists, such as the introduction of the dynamite and water balloon moves. Check out all the details and rules here. I liked that it was a simple game but with competition against other developers’ bots came many options for creative strategy. Additionally, I was extremely impressed with how simple it was to build the basic bot.

Game Rule Highlights:

  • Bots compete each other throwing one of Rock, Paper, Scissors, Dynamite, or Water Balloon
  • Normal rules apply except that the Dynamite beats everything but Water Balloon and Water Balloon loses to everything but Dynamite
  • Each bot only gets to use Dynamite 100 times
  • First bot to win 1000 times wins the entire match
  • Ties carry over, so the next round could be worth more than 1 win (similar to “Skins” in golf)

 

It took me some iteration to come up with my eventual strategy, which turned out to be admittedly mediocre (98th place out of 162). I realized that my bot can keep track of the history of moves that it has made as well as the moves of my opponent. My plan was to try and detect if my opponent was falling into a sort of pattern. I was especially concerned about the end of the round when we both would be desperately throwing dynamite to close out the match. As you can see, my strategy only had a small amount of success.

Nonetheless, I thoroughly enjoyed my time creating and deploying my bot. I encourage Microsoft to search for more clever ways to get developers interested in learning and using their development platforms. In this contest, I got to expand my mind, learn more about Azure, and I even got a free t-shirt. Here’s to the next competition!

How to Query the Yahoo Fantasy Football API in .NET

The Coveted League TrophyAs technical co-commissioner of my Keeper Fantasy Football league, I perform a good deal of administrative duties during the offseason. I have to sort through all the player transactions from the season to determine which NFL players are eligible to be kept within our league rules. One year, at the end of the 2010 season, I waited too long to gather this data. I normally click through the Yahoo Website to see all the historical transaction data necessary. However, after a certain point in the year, Yahoo removes access to the year’s information.

Luckily, in late 2009, Yahoo opened up their Fantasy Football API. Therefore, I was able to implement a .NET solution to retrieve the data I needed. Below are the steps I took.

The goal of our solution will be to create a simple ASP.NET Web Forms application that authenticates to Yahoo and then enables us to query the API.

Perhaps the most difficult hurdle to overcome is authentication. Yahoo uses a web standard called OAuth, which is a “simple, secure, and quick way to publish and access protected data”. You can find out more about it here, as I do not plan to delve into the low-level details of this protocol. The difficulty I found was that there are not many examples of .NET applications using this technology on the web.

To help us authenticate, we will leverage a .NET library called DevDefined OAuth.

  • Create a new Web Forms solution and add a reference to this project or compiled dll.

In our next step, we will create a simple button (named AuthenticateButton) in the Default.aspx page to kick off the authentication process.

  • Create a click event handler for your button. Enter the following code in the code-behind:

string requestUrl = https://api.login.yahoo.com/oauth/v2/get_request_token&#8221;;
        string userAuthorizeUrl = https://api.login.yahoo.com/oauth/v2/request_auth&#8221;;
        string accessUrl = https://api.login.yahoo.com/oauth/v2/get_token&#8221;;
        string callBackUrl = http://domain.com/Query.aspx&#8221;;

         protected void AuthenticateButton_Click(object sender, EventArgs e)
        {
            var consumerContext = new OAuthConsumerContext
            {
                ConsumerKey = “[provided by yahoo]”,
                SignatureMethod = SignatureMethod.HmacSha1,
                ConsumerSecret = “[provided by yahoo]”
            };

             var session = new OAuthSession(consumerContext, requestUrl, userAuthorizeUrl, accessUrl, callBackUrl);

             // get a request token from the provider
            IToken requestToken = session.GetRequestToken();

            // generate a user authorize url for this token (which you can use in a redirect from the current site)
            string authorizationLink = session.GetUserAuthorizationUrlForToken(requestToken, callBackUrl);

             Session[“oAuthSession”] = session;
            Session[“oAuthToken”] = requestToken;

             Response.Redirect(authorizationLink);
        }

 

To obtain your ConsumerKey and ConsumerSecret strings to place into the above code, go Yahoo’s Developer Projects Site and create a project. When creating your project, enter the Application URL (e.g. http://domain.com) and App Domain (e.g. domain.com) of the deployed location of your web site. Also, make sure to enable access to the Yahoo Fantasy Football API.

Take a look at the value in the callBackUrl string above. This needs to be edited to be an address on your web site. As part of the authentication process, Yahoo calls back to a URL on your site and therefore requires your site to be accessible from the public web.

  • Add a new web page to your project named “Query.aspx”
  • Place the below code in your Page_Load event handler

        protected void Page_Load(object sender, EventArgs e)
        {
            OAuthSession session = (OAuthSession)Session[“oAuthSession”];
            IToken requestToken = (IToken)Session[“oAuthToken”];

             // exchange a request token for an access token
            string oauth_verifier = Request.QueryString[“oauth_verifier”];
            if (!String.IsNullOrEmpty(oauth_verifier))
            {
                IToken accessToken = session.ExchangeRequestTokenForAccessToken(requestToken, oauth_verifier);
                Session[“oAuthSession”] = session;
            }
        }

 

Now that we are finished implementing the authentication code we can write the query submission logic.

  • Add a textbox (named QueryTextBox), a label (named ResultsLabel), and a button (named QueryButton) to the Query.aspx page
  • Add a click event handler for your button. Enter the following code in the code-behind:

        protected void QueryButton_Click(object sender, EventArgs e)
        {
            string query = QueryTextBox.Text;
            IConsumerRequest responseText = ((OAuthSession)Session[“oAuthSession”]).Request().Get().ForUrl(http://fantasysports.yahooapis.com/fantasy/v2/&#8221; + query);
            ResultsLabel.Text = responseText.ToString();
        }

 

You are now ready to query the Yahoo Fantasy Football API. Here is how you use it.

  1. Load the page by navigating to http://domain.com (replace “domain” with your website domain name).
  2. Click the Authenticate button

  1. Yahoo’s site will guide you through the steps to login to your Fantasy Football account and redirect to your site when finished.
  2. Enter an API Query into the text box and click “Submit Query.”

 

There are definitely improvements that can be made to our sample application. For instance, the results output from our query are not easily readable, but they can be simply output to an xml document or some other format for reading.

The amount of data that can be extracted from the API is huge and can be leveraged for some very creative purposes. For more information about the query syntax as well as available data, see the Fantasy Sports API Documentation.

You can download the code for the sample application.

 

Lastly, below are some resourceful links:

http://github.com/buildmaster/oauth-mvc.net

http://oauth.net/code/

http://oauth.googlecode.com/svn/code/csharp/

http://blog.techcle.com/2010/03/20/simple-oauth-integration-for-twitter-in-asp-net-mvc/

http://www.codeproject.com/KB/cs/Delicious-OAuth-API.aspx

http://code.google.com/p/devdefined-tools/w/list

http://developer.yahoo.com/fantasysports/

http://developer.yahoo.net/forum/index.php?showforum=122

 

“6 Simple Steps to Getting Certified” – a Toastmasters Presentation

Since October I have been attending Toastmasters meetings and occasionally giving speeches to improve my public speaking ability.

Below is my 4th speech:

6 Simple Steps to Getting Certified

  1. Ask your boss & peers which certifications are valuable.
    You don’t want to waste time obtaining a certification that will not ultimately help you to achieve your goals. Ask your boss to find out about certifications that would aide in advancement within your current job. Ask peers to find out which would provide opportunity outside of your current employer. Ideally, you should choose a certification about which you have some relevant knowledge already. Otherwise, the preparation process will be significantly elongated.
  2. Research the governing body’s website or magazine to determine what is required. Find out:
    a. The format of the test (e.g. multiple choice, essay, etc.)
    b. Recommended training materials (e.g. text books, practice tests, etc.)
    c. Additional requirements (e.g. years experience, a verbal presentation, etc.)
  3. Study
    a. Obtain the recommended training materials
    b. Review fundamentals
    c. Spend extra time learning new concepts
  4. Practice Tests
    a. Take practice tests to get familiar with the testing environment
    b. Write down notes about surprising answers and concepts with which you struggled
    c. Schedule the official exam when ready and confident. In many cases, your company will pay for the exam fee.
  5. Cram: study for an hour or two right before the test.
    Focus on those concepts you struggled with as well as facts & formulas that will be beneficial to have memorized. No matter how much you study before-hand, always cram. It’s important to have that information in short-term memory going into the test. Trust me, you don’t want to fail a test because of something trivial that you would have known if you had just done a quick review of the material before the test.
  6. Pass the Test
    a. Many certifications last a lifetime
    b. Update your resume
    c. Now you can add those letters after your name on your business card

I have only been attending for 7 months, so I have plenty of room for continual improvement. However, I have already been helped by the members of my Toastmasters club to use fewer filler words and display fewer nervous ticks. I hope to become more comfortable, so that I can focus on my message while on stage instead of being so nervous my mind goes blank.

Toastmasters is useful because of the feedback given at the end of a meeting. It is helping me develop a sense for how long (in time) someone is speaking (including myself). I get to learn what I did well and what are areas for improvement. In the specific video above, I received the suggestion to not look back at the PowerPoint presentation but instead to create speaker’s notes to keep in front of me. My presentation could also have been helped with a personal, specific example.

I am looking forward to improving my public speaking by giving more speeches, receiving the feedback of others, videotaping, and personally reviewing my speeches. In fact, I look forward to improving the quality of my videos. I apologize for the poor video quality this time (I used a digital camera from 2004). To record my voice, the best option I brainstormed (that was mobile and not very distracting for the audience) was to use a blue tooth headset with my iPhone, call into a Free Conference Call number, and record the call. I later merged the audio and video. If anyone has any cheap, wireless recommendations for microphones that will work with my iPhone I am open to trying them.

Drama Queens versus the Status Quo

I realized leading up to my wedding 2 years ago that I have grown up dreading being the center of attention. Throughout my engagement, I held a heavy fear of the wedding weekend because I was nervous about all the attention. I did not feel comfortable giving a speech (the night of the rehearsal dinner) nor tossing the garter. I’d lived my life until then blending in. I wouldn’t say I am a conformist, but definitely someone who avoids confrontation.

Is it possible to be successful with such tendencies? I say no. Well, not unless you’re a rare exception, one who has a mentor that teaches you all the tricks so that you’re never facing an unknown challenge.

The more stories I hear or books I read, the more I realize that folks get ahead in life and business by being consistently more effective than others. What is the best way to be consistently better? By looking for shortcuts, seizing opportunities, and doing the important things that others hate to do.

Apparently, the normal person is like I was. He or she shrinks away from conflict, hides from uncomfortable situations, and refuses to communicate the whole truth. Exceptional people have bucked the trend of fitting in. They challenge assumptions and find that there are often easier ways to accomplish great things.

A number of authors that I’ve recently read use this as their primary thesis. As Timothy Ferriss says in The 4 Hour Workweek, “What we fear doing most is usually what we MOST NEED TO DO!”

  • Tucker Max – I Hope they Serve Beer in Hell
  • Tim Ferriss – The 4 Hour Work Week
  • David H. Sandler – You Can’t Teach a Kid to Ride a Bike at a Seminar
  • Jim F. Kukral – Attention! This Book Will Make You Money

The advice from these books is completely logical, so why are Computer Programmers so conflicted when trying to apply it?

Most computer programmers chose the profession because it does not require interaction with other people, allowing them to continue to avoid difficult social situations. On the other hand, most programmers are skilled at seeing shortcut solutions to problems, optimizing processes, and reducing unnecessary tasks. They just won’t do anything that could be potentially embarrassing.


Drama Queen Developer

Photo by aka Kath

I think back to my childhood, when I socialized with some children like me and some who were drama queens, those who captured all the attention by whining that nothing ever went their way. Did the drama queens grow up with an advantage? They are used to asking people for things, do not take no for an answer, and shine with the spotlight. I contend that as long as a drama queen is not completely unlikeable, it is a great way to grow up with an advantage in our culture.

To those programmers who fit into the above personality, I say to become dissatisfied with the status quo. Learn to do things differently and opportunities will present themselves. Then seize them.

Carpe Diem

Is there any hope for the ideal bookstore?

Borders – My favorite bookstore

Recently, Borders Group Inc filed for Chapter 11 and closed a local Cincinnati store that I frequented. You can find details about the filing here. As I have explained in a previous post, I love to work at bookstores. They offer a great way to stimulate my mind while also offering the essentials (Internet and power outlets) to do actual work if I want to. We all knew that bookstores, in their current form, were going away. However, because I still love them is why I feel compelled to write about the disappointment that comes with their closing.


Borders Bookstore Closing


Photo by Mark Hillary

I remember hearing about Borders’ attempts at changing the layout and offerings of their stores with a new model. They were supposed to open one such store here in Cincinnati (the Kenwood area) about a year and a half ago. I waited with excitement to see how they attempted to approach a changing information market, but never was able to see it for myself. The construction project became a debacle and Borders, along with other companies, eventually backed out.

Borders realized that people are becoming less likely to purchase full-priced, bound books at the store. The demand is clearly not enough to warrant thousands of square footage for store space. People can both browse the information at the store for free (and then not buy anything) and find the exact piece of information needed online. It is rarely necessary to take a book home, and when it is it can usually be shipped home more cheaply.

Drastic changes must be made to save the bookstores…

Is there any hope?

Is there any way to fix the dying bookstore industry and make a brick and mortar store work? After all, there are an increasing number of people who can work without an office. Does that mean there is a growing market of people who would pay for a workplace at a bookstore?

Let’s analyze the benefits of bookstores versus other similar establishments (e.g. Libraries and Coffee Shops)…

Bookstore Pros

  • Social gatherings – bookstores are a great place to meet with friends to chat.
  • White noise – they realize conversations can get loud, so they try to please those trying to concentrate by piping music over the speaker system to generate white noise.
  • Food is served – is there any reason to leave when there are vital nutrients and caffeine within a cricket pitch from my table?
  • Research – bookstores have magazines and a wide variety of recent non-fiction books with which to perform research. When a topic can’t be found, just go online (with the free Internet service) and try to fill in the gaps.
  • People watching – for those of us who get a little more enjoyment occasionally working around people.
  • Store hours – bookstore hours are not usually as flexible as coffee shops but are much more so than libraries.

Library Cons

  • Less Noise – theoretically, loud library-goers are supposed to be shunned. At least, that’s how they were when I was growing up. Nowadays, with constant cell phone interruptions, it seems people no longer treat libraries as a quiet place for reading.
  • Food/Caffeine prohibited – I am getting sleepy, very sleepy…
  • Obsolete resources – most libraries now have free Internet, which is a savior because very few of their nonfiction books are useful anymore.

My ideal bookstore

I don’t know if it can make any money, but as I alluded to in a previous post, I have an idea for the ideal bookstore.

It would combine all the best aspects of current bookstores, coffee shops, and bars.
 

  • Books/Resources/Internet – this is a great benefit to current bookstores. If a goal is to reduce floor space, then books can be made available in electronic form but can only be accessed from within the bookstores’ provided Internet connection.
  • Coffee/Food/Alcohol – follow a similar formula to normal bookstores but provide alcohol as well. If Chipotle can serve beer, can’t a bookstore too?
  • More people watching – current bookstores are pretty good social environments as they are. However, for those people who want to be around others but not subject to their noise, there is no solution. My ideal bookstore would have social (loud) and focused (quiet) gathering areas. The quiet area would be surrounded by glass walls so as not to carry sound but to enable visibility.
  • Great location – a nice perk would be to have an outdoor seating area or a window that overlooked heavy pedestrian traffic.

As I have never been employed in the bookstore industry, I do not know if my concept could even make money, but that is not my concern. I just want someone to build it so I can live/work/play there.

 

 

Ponderous Thought: I have found that I often get “in the zone” during .NET User Group meetings and Firestarters, which leads me to believe that if my bookstores could somehow incorporate training or presentations that they could be even more valuable!

Were my Microsoft Certification Exams Worth it?

As important as it is for Software Developers to keep current with emerging technologies, it is equally important to choose wisely when it comes to learning them. Indeed, there is a finite amount of time to devote to self-improvement. This truth became evident most recently while I’ve been thinking about my personal goals for the year and trying to decide whether or not I should try to obtain the more recent Microsoft certifications on .NET 4.0, such as Web Developer or Azure Developer on Visual Studio 2010. It got me to thinking about all the time I spent at the beginning of my career getting certified and whether or not that investment has paid dividends.

As described in Contrasting 2 Job Rejections, I was scared about my job prospects after graduating college. Once I got a job, I felt that I needed to ensure I had opportunities going forward and figured getting Microsoft Certifications would be the best way to differentiate myself from the candidate pool. I took 14 tests in less than 3 years, passing 12 and failing twice. I obtained the status Microsoft Certified Systems Engineer (MCSE), Microsoft Certified Database Administrator (MCDBA), and Microsoft Certified Solution Developer (MCSD). You can see my transcript here (enter transcript ID “677424” and access code “insights”).

Some of the tests were paid for by my employer, some were not. I usually studied using the officially released self-paced training kit for each test, but I’ve also purchased expensive training videos, exam crams, used free web casts, etc. I was completely immersed in the certification process. I actually understood all the options and the Microsoft certification path, of which there are now many. Since it’s been almost 2 years since I’ve taken any, I find myself out of the loop, wondering if it makes sense for me to re-enter this world.

At the time of this writing, I have about 7 years of professional software development experience, enough to significantly reduce the amount of studying required to pass a certification test compared to earlier in my career.

Microsoft
Certifications
Expected Study time (hours) Completed Study Time (hours) Practice Tests (hours) Days Studying Hours Per Day Test Date
70-270 (Microsoft
Windows XP Professional)
45 51.00 9.50 35 1.73 February 12,2004
70-290 (Windows Server
2003 Environment)
31 28.00 3 23 1.35 March 10, 2004
70-291 (Windows 2003
Network Infrastructure)
47.5 78.00 11.5 122 0.73 July 9, 2004
Took Test on July 9th 9 4.5 12 1.13 July 21, 2004
70-293 (Windows 2003
Planning a Network)
22 12 4 15 1.07 August 5, 2004
Took Test on August 5th 30.50 8.5 64 0.61 October 8, 2004
70-294 (Windows Server
2003 Active Directory)
21 14.08 4 31 0.58 April 2, 2005
70-297 (Win2003 A.D.
& Network Infastructure)
16.5 16.92 2.5 17 1.14 April 19, 2005
70-228 (SQL 2000
Administration)
55 53.42 5.5 72 0.82 May 27, 2005
70-229 (SQL 2000
Development)
24 23.50 3 151 0.18 October 29, 2005
70-315 (Web Apps with
Visual C# .NET)
34 45.50 13.5 81 0.73 January 24, 2006
70-320 (XML Web Services
with C# .NET)
40 34.00 3 42 0.88 May 2, 2006
70-316 (Windows Apps
with Visual C# .NET)
14 15.42 3.25 22 0.85 June 6, 2006
70-300 (Solutions
Architecture & Req’ts)
12 7.58 9 47 0.35 September 28, 2006
70-553 (Upgrade MCSD to
MCPD : Part 1)
82 16.00 4 428 0.05 April 12, 2008
70-554 (Upgrade MCSD to
MCPD : Part 2)
55 0.00 5 22 0.23 May 5, 2008
Took Test on May 5th still counting 0.00 February 28, 2009?
70-502 (.NET 3.5 –
Windows Presentation Foundation)
14 14.00 6 108 0.19 December 13, 2008
70-561 (.NET 3.5 –
ADO.NET)
12.25 12.50 0.5 18 0.72 May 2, 2009

Would obtaining more certifications be valuable? Looking back, I feel that it was worth it to work towards achieving the certifications that I did. They served 2 purposes:

Milestones for Self-Motivated Learning

By deciding to get certified, I was declaring a personal goal that was tangible and had benefits other than just self-improvement. Many of the topics involved in certification were topics that I wanted to learn about anyway, especially early in my career. For example, I was assigned to my first professional web application project about the same time that I was ready to begin studying for the related certification. Since my professional life and personal interests were colliding, I found it much easier to be motivated to study and create small side projects to practice what I had learned. Better yet, knowing the milestone of passing the test would aid in job security added to the incentive to learn.

Measurable Proficiency

I have heard people in the IT industry downplay the significance of certifications, especially those from Microsoft. Some have argued that the tested topics do not accurately reflect skills that are required to perform well on the job. Others state that the proliferation of “brain dumps,” practice tests that have actual questions from real exams (and are considered cheating), marginalize what the tests represent.

My feeling is that there is a lot of truth to these points. However, employers still seemed to have placed some value on certifications. They may have asked, “If certification tests are so trivial, why doesn’t everyone have them?” I found in the years after my achievements, that it did help in my job search. I believe it exhibited measurable proficiency in topics that I claimed to have experience in. This differentiated me from others who could merely state something to the effect of: “Experience = ASP.NET – 2 years.” The achievement generated conversation in interviews. When asked about my certifications, I got to explain how I set personal goals and followed through on them, learning a great deal of relevant skills in the process. @MikeWo also reminded me on twitter that companies need certain certification requirements of their employees to keep partner status, yet another benefit to hiring someone who has them already or displays the ability to pass them quickly.

Having established that it was worthwhile to get certified in the past, does that mean I should set a goal for future certifications?

It is yet to be determined, but I don’t think so. The direction I am trying to take with my career is not to spend focused time learning the details of the next version of ASP.NET, for example. I have also already built my resume to a point where “getting my foot in the door” is not the problem it used to be. Therefore, the benefits listed above do not quite align with what I want to achieve going forward. I could always afford to learn more about Microsoft technologies, such as .NET, but I already know enough to be effective. I am more interested in learning non-Microsoft technologies these days, like jQuery, Mercurial, or anything Google, so I may be convinced to take a test for a new, interesting technology once it is released and known to have value throughout the industry. Lastly, I believe that the best way to get a great job is a great network and by establishing the ability to get things done.

Time to buckle down and get things done then…

Exam Tip: No matter how much you study before-hand, always cram: it’s important to have that info in short-term memory going into the test. It’s also highly beneficial to gauge your readiness by taking a practice test with a company like Transcender.