Blankenblog Windows Phone and my musings on the world around us.

1Jun/1114

Mobile games should revisit the past…

I’m sure there’s a reason, but why is it that the most popular games on mobile devices are mindless efforts like bird-flinging?  Don’t get me wrong…Angry Birds is addictive and fun, but it’s also generally mindless.  Games like Plants vs. Zombies are slightly better, because they require a bit more strategy and planning, but they’re still not on par with some of the games from the past.

What happened to the amazing games of our childhood, though?  Games like the original Super Mario Brothers series, or Baseball Stars (quite possibly the greatest baseball game ever created)?  Most of these games are far superior to today’s mobile offerings, and are generating little to no revenue for their owners.

How hard would it be for SNK to take the original codebase for Baseball Stars, slap it inside some native container, and port it to iPhone, Android, and Windows Phone?  I mean, perhaps I am missing something, but if you had a wildly successful game on the original Nintendo Entertainment System (something high school seniors have probably never ever heard of), why wouldn’t you continue to push that game onto other platforms?

This post was meant to start a discussion.  Why do you think we’ll never see some of the amazing games of our childhood on our mobile devices?  You can’t tell me that Atari wouldn’t want to sell a couple hundred thousand more copies of Adventure to mobile phone users, right?

What do you think?

Filed under: Uncategorized 14 Comments
3Apr/1126

A Call For “Friends”

This is an essay on the meaning of the word "friend."  It's not going to be about technology (but it is), it's not specifically about me (but it is), and it's not meant to sound whiny or pathetic (but it does.)

I've been on Twitter for years.  Like 4 years.  And I've got over 2,000 people following me.  Two Thousand People.  That's more than many small towns.

I've been on Facebook, LinkedIn, TripIt, Plaxo, Live Spaces, Google Whatevertheycallit, FourSquare, and just about every other social network for years as well.  (Except for MySpace.  That place just always seemed scummy to me.)  And I've got thousands of contacts on those places.  Some people I see regularly, some I've never met in person.  But we're digitally connected in such a way that I have passing knowledge of their interests, their families, their hobbies, and more specifically, "the stuff that's easy to share."

I'm not tooting any horns here, I promise. I'm writing about what it means to have friends.  I have this vast wealth of people circled around me at all times, and to be honest, I've never felt more alone.  Don't get me wrong.  I have a wonderful family, and I socialize relatively often (compared to an agoraphobic, for example).  Perhaps I'm just affected by the abundance of television shows that feature three or four couples that do EVERYTHING together.  The women are the best of friends.  The guys seem to have known each other since they were in elementary school.  (I'm looking at you, Perfect Couples, Better With You, Cougar Town, Happy Endings, The Big Bang Theory, How I Met Your Mother, Traffic Light, It's Always Sunny In Philadelphia, and my new favorite, The League.)  And every day, they have some new amazing (yet funny) adventure. Together. 

I.  Want.  That.

(No, I'm not so deluded as to think that television is anything like real life.  But relationships are relationships, plain and simple.)

Perhaps it's also because I have "the luxury" of working from home.  Working from home certainly has its benefits, but there are also consequences.  Access to a refrigerator full of the food you love isn't exactly a blessing.  At least not for my waistline.  Sitting silently in an office by yourself every day only seems good because you hate the guy you share a cube with.  I truly miss the watercooler conversations, as empty as they may have seemed at the time.  They were connections, and as social networking has shown us, connections are gold.

For every new "friend" I make on Facebook, however, I feel like "friendship" has lost its luster.  I DO want to know about your kids, your latest vacation, and your new found love for the game of golf, but I want to know it because we sat in a sportsbar and watched our favorite team get slaughtered.  Again.  We sat for hours and talked about "stuff."  Conversations twisted and turned, contained humorous interjections, and perhaps even had an inside joke or two.  Facebook and Twitter are missing that one key component to a REAL friendship, and that's shared experiences.

Do me a favor...think of your best friend from high school or college.  Now think of an outrageous story that happened to the two of you.  You have that story because you did things TOGETHER.  We don't do things together on the internet.  Sure, we collaborate, or chat, or reply to email, or even go so far as to play World of Warcraft (or some other game, I suppose), but I still contend that you're not really doing that "together."  Never have I told someone about "this hilarious email chain I've been a part of".  I've never said "remember when I ousted you as the Mayor of Panera?"  These trivial factoids and photos that we share on the internet do not strong bonds make.

So, if I seem overly forward the next time we talk, and invite you to grab a beer (even though we may have never hung out before), it's because I'm changing my game.  On the flipside, if I DON'T do these things, don't take it personally.  In fact, call me out on it.  I love people, and getting to know ANYONE is better than sitting in front of this computer for one more evening.  There's one thing my mother told me when I was young that has always stuck with me, and it's only gotten truer with time:

"If you want to do things with your friends, you're going to have to call them.  Sitting home and waiting for an invitation is NEVER going to happen."

I've been waiting on social networks, and I've realized that friendships aren't made there.  They're observed.

Filed under: Uncategorized 26 Comments
8Jan/110

5th Blogging Anniversary

5 years ago, I started writing articles online.  They weren’t good.  Some of them were just wrong.  But they’ve all contributed to the writer I am today.

I hope you enjoy reading my ramblings here as much I I enjoy writing them.  These articles are truly one of my favorite things I get to do as a developer, second only to creating something awesome in code.

Today is article #342.  That’s almost 70 a year, for 5 years.  Here’s to looking forward to the next 5.  Thank you, as always, for your continued support and enthusiasm.









 

Filed under: Uncategorized No Comments
25Oct/1014

31 Days of Windows Phone | Day #25: Talking To External APIs

This post is Day #25 in a series called the 31 Days of Windows Phone.

Yesterday, I wrote about embedding fonts, videos, and images into your Windows Phone application.  Today, we’re going to talk about retrieving data from a web service, and populating your application with it.

Introducing the Twitter API

If you haven’t played with this before, you’ll often hear me refer to a Twitter application as the new “Hello, world!”  The reason is simple:  nearly every application needs to connect to a web service anymore, and Twitter’s API is easy to use, available for free, and doesn’t even require registration.  In other words, there’s nearly no barrier to entry, and it’s a great way to learn a new technology.

The core of Twitter’s API can be found here: http://dev.twitter.com/

We’re specifically going to be looking at the user timeline elements of the API, leveraging this specific URL template:  http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=jeffblankenburg  where my username, jeffblankenburg, can be substituted with any Twitter username.

If you click on the URL I just provided you, you should see a pretty lengthy XML document.  This document contains the most recent messages I have posted to Twitter, with all of the wonderful metadata to go with them.  Here’s one node of that document:

<status>
  <created_at>Sun Oct 24 13:30:04 +0000 2010</created_at>
  <id>28594986565</id>
  <text>Day #24: Embedding Fonts in Windows Phone 7 http://bit.ly/wp7day24 #wp7 #wp7dev #31daysofwp7</text>
  <source>
    <a href="http://www.tweetdeck.com" rel="nofollow">TweetDeck</a>
  </source>
  <truncated>false</truncated>
  <favorited>false</favorited>
  <in_reply_to_status_id />
  <in_reply_to_user_id />
  <in_reply_to_screen_name />
  <retweet_count />
  <retweeted>false</retweeted>
  <user>
    <id>5688882</id>
    <name>Jeff Blankenburg</name>
    <screen_name>jeffblankenburg</screen_name>
    <location>Columbus, OH</location>
    <description>I'm a passionate technologist, husband, and father in Columbus, OH. I work for a small software company located in Redmond, WA. #wp7 http://blankensoft.com</description>
    <profile_image_url>http://a3.twimg.com/profile_images/396764567/jeffblankenburgheadshot_normal.jpg</profile_image_url>
    <url>http://www.jeffblankenburg.com</url>
    <protected>false</protected>
    <followers_count>1962</followers_count>
    <profile_background_color>131516</profile_background_color>
    <profile_text_color>333333</profile_text_color>
    <profile_link_color>994700</profile_link_color>
    <profile_sidebar_fill_color>cccccc</profile_sidebar_fill_color>
    <profile_sidebar_border_color>999999</profile_sidebar_border_color>
    <friends_count>652</friends_count>
    <created_at>Tue May 01 15:54:53 +0000 2007</created_at>
    <favourites_count>201</favourites_count>
    <utc_offset>-18000</utc_offset>
    <time_zone>Eastern Time (US & Canada)</time_zone>
    <profile_background_image_url>http://s.twimg.com/a/1287010001/images/themes/theme14/bg.gif</profile_background_image_url>
    <profile_background_tile>true</profile_background_tile>
    <profile_use_background_image>true</profile_use_background_image>
    <notifications>false</notifications>
    <geo_enabled>true</geo_enabled>
    <verified>false</verified>
    <following>true</following>
    <statuses_count>5664</statuses_count>
    <lang>en</lang>
    <contributors_enabled>false</contributors_enabled>
    <follow_request_sent>false</follow_request_sent>
    <listed_count>151</listed_count>
    <show_all_inline_media>false</show_all_inline_media>
  </user>
  <geo />
  <coordinates />
  <place />
  <contributors />
</status>

The important thing to remember about this content above is that it’s just XML.  Nothing fancy, nothing different.  Most web services available on the web provide an XML feed, and we can treat them all the same way, for the most part.

Getting XML Data From the Web to our App

It’s very simple (3 lines!) to get XML data from an online data feed to our application running on a phone.  One important thing to remember is that it’s up to you to check and see if the user even had a data connection.  There’s a simple way to do this, using the Microsoft.Phone.Net.NetworkInformation assembly:

if (NetworkInterface.GetIsNetworkAvailable())

Inside that for loop, we’re going to create a new WebClient object, and make an asynchronous call out to that Twitter API that I gave you the address before.  First, I create a new event handler for when our data retrieval is complete, and second I make that asynchronous call.  (In my example, you’ll see that I retrieve the username from a textbox that the user can type into.

if (NetworkInterface.GetIsNetworkAvailable())
{
    WebClient twitter = new WebClient();

    twitter.DownloadStringCompleted += new DownloadStringCompletedEventHandler(twitter_DownloadStringCompleted);
    twitter.DownloadStringAsync(new Uri("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=" + TwitterNameBox.Text));
}

When the data returns, our event handler fires, and we need to do something with it.  Let’s take a look at that next.

Using XML in our Application

ONce we’ve got that data returned to our application, we want to actually display it on the screen.  In many of my other examples, I’ve shown how to databind a value to a XAML control.  We’re not going to focus on that in this post (though the code sample in the bottom certainly includes it), and instead, we’re going to look at parsing our XML data using LINQ.

To do this, we’ll need yet another namespace, System.Xml.Linq.  Once we’ve got this included, it’s a pretty simple process.  We need a new XElement object that holds our XML data.

XElement xmlTweets = XElement.Parse(e.Result);

Once our data is held in xmlTweets, all we have to do is bind it to our LIstBox, and use LINQ to create custom TwitterItem objects on the fly from the data.

TwitterList.ItemsSource = from tweet in xmlTweets.Descendants("status")
                            select new TwitterItem{
                                message = tweet.Element("text").Value
                            };

You’ll see in my code sample below that I have a custom TwitterItem class that has a “message” property. 

That’s it, though!  We’ve grabbed live data from an XML feed, processed it into our application, and displayed it in a ListBox.  For a full working example, check out the code below:

Download the Code

This is a fully working (but certainly not fully-featured) Twitter client.  You can type a username into a textbox, and the application will reach out to the Twitter API, grab the data, and then parse and display it in the application.

image

1Mar/100

The 1st of March: Did you know Stir Trek: Iron Man Edition is on May 7, 2010?


Yep, it's official. Stir Trek is back for a second year, and we've doubled the size. There will be 4 tracks of content, ranging from web development, through Rich User Interfaces, like Silverlight and Flex, to mobile development, including iPhone and Windows Phone technologies.

We will be hosting the event in a movie theater again, and the day will end with a private screening of Iron Man 2. If you haven't seen the trailer yet, check it out:

For the full story on the event, and to register, check out http://stirtrek.com!

Filed under: Uncategorized No Comments
5Jan/105

New Year’s Resolutions for Software Developers

As we close the book on 2009, I want to remind you that at the beginning of each year, you have an opportunity. An opportunity to step your game up to the next level. An opportunity to branch out from the same, hum-drum development you've been doing for the last 5 years. This article is a list of possible New Year's resolutions for you, as a developer, to consider. I'm not suggesting you try to achieve all of these, rather I want you to pick one, and commit to it for 365 days. Write it down and stick it your monitor. Keep it in your wallet. Most importantly, keep it on your mind.

1. I will learn one new language this year.

If you have been using C#, try taking a peek at Ruby or IronRuby. If VB.NET is more your current style, perhaps you could learn something from F#. (These are just suggestions, of course. Pick one you sincerely want to learn.) There are plenty of programming languages to try, and you might find that something else fits your needs better than the tools you use today. Remember, if all you have is a hammer, everything looks like a nail.

2. I will attend the monthly local developer group in my area.

I know I spend a great deal of time talking about the value of user group meetings, but if you're not going on a semi-regular basis, you're doing yourself and your career a disservice. Each month, there's a group of developers getting together in your town to learn from a speaker, network, and socialize. The content the speaker provides is valuable, but it shouldn't be the driving force behind your attendance. Getting to know the other software developers in your community, and building relationships with them…that's the value the group truly provides. Find the user group closest to you.

3. I will attend at least one regional developer conference.

In our area of the country, there's a few great conferences you can attend. Codemash is always in January in Sandusky, OH, but registration is already full. There's a substantial number of Day of .NET events from Michigan down to Tennessee. These are one-day, free Saturday events, typically. Stir Trek is a web centric conference happening in Columbus, OH in May. Codestock will be during the summer in Knoxville, TN. DevLink is in August in Nashville, TN. There's plenty of opportunities to learn something new about development. Take advantage of it!

4. I will be an agent of change in my organization.

There are certainly things about your company or role that you'd like to see changed. Why not make this the year you change all of that? Don't go complaining to your boss about what you hate. That's not the solution. Instead, solve the problems. If your team can never seem to come in under-budget or on-time, perhaps some agile methodologies might be the answer. If you're still working in technologies from 10 years ago, build a sample app over the weekend that shows your team how much you were able to accomplish in a couple of days. Sometimes new tools and processes can make all of the difference. Don't feel powerless. Make 2010 the year of empowerment.

5. I will use my skills to change the world (for good).

Have you heard of a GiveCamp? A GiveCamp is an opportunity for developers to give back to their communities. The basic idea is that there are charities in your area in desperate need of technical solutions. This might be a simple website, e-commerce for donations, or even something more integral to their businesses. We, as developers, have the skills they need to make their charities more successful. Software is expensive, though, and not always core to their mission. So, for one weekend a year, you can give your knowledge and skills to an organization in your community, all while hanging with some of the best and brightest developers in your area. It's an absolute blast, and something you'll feel great about when you're done. Check out the GiveCamp site for the city nearest you. They're happening everywhere in our area.

6. I will give Twitter a REAL try.

Sure, you created an account. You posted about a bagel you had for breakfast. You posted about how you think Dane Cook is not funny. And you discovered that nobody cares. You're right. While there are plenty of blog posts about the “right” way to use Twitter, there isn't one way to use it. However, if you want to get real value from it as a software developer, you've got to follow people. You've got to point out articles you found useful. Here's a starter list of people to follow. Engage these people in conversations. You'll definitely reap the reward of knowledge from these people. They're likely to learn from you as well.

7. I will create an online presence.

I can't endorse this enough, and this is probably one of the simpler things you can do in 2010. As a software developer, it's definitely a differentiator to employers if you've got a nice web presence, and the other candidates don't. I'm not saying you need to become a blogger (though if you do, it will be rewarding). What I am saying is that you should have a place that is yours. A place to post cool, unique things you've done. Projects you've worked on. Snippets of code that solved a problem for you. Short of that, you should have a place that simply says: “This is me”. You can find a great example of this (for free) at a site called Magntize. I'm using them for my site, and it's just crazy simple to set up. You can see my site at http://jeffblankenburg.info.

If you haven't found something in this list, you're either an absolute rockstar when it comes to resolutions, or you're just not trying hard enough. Give yourself a challenge for the new year! Drop me an email (jeblank@microsoft.com) and let me know what your professional resolutions for 2010 are going to be. I'll consolidate them (anonymously) and post them to my blog, for everyone to see. Perhaps you'll inspire others with your ideas!

kick it on DotNetKicks.com

Filed under: Uncategorized 5 Comments
2Jan/106

A New Discovery: Homage Clothing

Recently, I was perusing Facebook, when an ad caught my eye. (Keep in mind, web ads of any kind generally go unnoticed by me). It was just a simple picture of a t-shirt. Here's the ad:

Now, as a life-long Cleveland Browns fan, this was a cool shirt. Although I was only 4 at the time, I remember watching Browns games with my dad in 1980, and certainly remember the reference to the Kardiac Kids, winning game after game in heart-stopping fashion. But that's nostalgia...not the point of this post.

So I clicked on the ad, and was taken to a site full of visual wonders. A site for a clothing company, based in Columbus, OH, making shirts representing all of my favorite teams, that I'd NEVER HEARD OF?? Couldn't be. But as I continued looking through the site, there were at least 5 different shirts I could have picked up at once.

Their site is clean, very easy to navigate, and has some hidden gems (like playing "Bernie, Bernie" when you visit the Bernie Kosar shirt page.

So, like I said, I ordered the Kardiac Kids shirt. When it arrived, it came in a cool, branded box, and even it contained a surprise (in addition to the very comfortable shirt). The company is named Homage, and they really keep that in mind with their packaging. Much of their site "pays Homage" to the 1980's, and this little surprise was no exception. Here's what I found inside:

I couldn't help but run into the other room to show my wife. An old pack of New Kids on the Block trading cards probably cost them less than $1, but the new appreciation I have for this clothing brand grew far greater than that. Especially because for $5 shipping, I don't feel like I'm getting ripped off. Overall, I had an amazing first impression of Homage, and they did not let me down.

So this is a totally enthusiastic fan of Homage encouraging you to check out their clothes. If you're from the midwest, you're certain to find something awesome.

http://homageclothing.com

Filed under: Uncategorized 6 Comments
18Dec/091

The Completion of the 31 Days of Silverlight

Yes, I am actually going to finish this thing. Sometimes work just gets overwhelming, and blogging takes a backseat for a while. But I'm back, and I hope you are too. Take some time this holiday season, when you're watching Christmas Vacation for the third time, and open your laptop. These are simple, easy to follow tutorials that will get you up to speed on Silverlight in no time at all.

Here's what coming:

12/20/2009 - Day #20: Adding Audio to Silverlight Events

12/21/2009 - Day #21: Rapid Silverlight Prototyping In SketchFlow

12/22/2009 - Day #22: Using The Farseer Physics Engine in Silverlight

12/23/2009 - Day #23: Silverlight Outside The Browser (Part 1 of 3)

12/24/2009 - Day #24: Silverlight Outside The Browser (Part 2 of 3)

12/25/2009 - Day #25: Silverlight Outside The Browser (Part 3 of 3)

12/26/2009 - Day #26: Silverlight Data Grid

12/27/2009 - Day #27: Templating Controls In Silverlight

12/28/2009 - Day #28: Silverlight Application Themes

12/29/2009 - Day #29: Using Isolated Storage in Silverlight

12/30/2009 - Day #30: Bing Maps in Silverlight

12/31/2009 - Day #31: Geocoding and More Fun in Bing Maps for Silverlight

1/1/2010 - Bonus Day: Click The Button Game (Winners get an e-book)

In case you need something more to read, you can always revisit the first 19 days of the 31 Days of Silverlight as well:

Day #1: Mouse Events in Silverlight

Day #2: Silverlight Screen Transitions

Day #3: Custom Silverlight Loading Screen

Day #4: Communicating Between Two Silverlight Controls

Day #5: Silverlight Drag and Drop

Day #6: Silverlight and the Twitter "Hello, World!"

Day #7: Using WCF Web Services With Silverlight (and LINQ)

Day #8: Custom Fonts in Silverlight

Day #9: Using Keystrokes in Silverlight

Day #10: Styling Silverlight Control

Day #11: Animating Your Silverlight Application

Day #12: Jumping From XAML to XAML in Silverlight

Day #13: Binding Elements In Silverlight 3

Day #14: Perspective 3D in Silverlight

Day #15: Silverlight Charting

Day #16: Silverlight AutoComplete Textbox

Day #17: Silverlight Layout Options

Day #18: Silverlight Effects

Day #19: Silverlight Pixel Shader Effects

Filed under: Uncategorized 1 Comment
21Sep/093

The Easy Way To Get 100,000 Pairs Of Eyes On Your Website (or The Call For Puzzlers)

Today begins the next journey of the Toughest Developer Puzzle Ever. For those of you that missed the first one, you can still visit Version 1.0 at http://toughestdeveloperpuzzleever.com.

The basic idea behind this puzzle is that it should challenge software developers. It shouldn't require intimate memorized knowledge of a specific framework, compiler, or language, but should require some significant search engine expertise, in addition to clever puzzle solving skills.

In the first version of this puzzle, we had 30 levels. For the next one, we are aiming for 100. Because of this, I want to cast a broad net, and find some people that can contribute some challenging puzzles of their own. Here's how the structure of the puzzle works:

  1. You can create up to 10 puzzles, which you will host on your personal website.
  2. Your puzzles will be arranged in order, and assigned numbers.
  3. Over 100,000 people will visit your website.

It's that easy. In the three months the first puzzle has been active, we had 104,372 unique users. This number is also expected to grow significantly for the next version. We have only had 230 people actually complete the puzzle.

So, this is your call to action. If you'd like to participate in this little adventure, send me an email. Let me know you're interested. And then get started thinking about some maddeningly challenging puzzles you can create. We expect to launch the next version of this puzzle in March-April of 2010. So there's not a rush, but this is also something that can't wait until the last minute.

I look forward to working with you on this!

Filed under: Uncategorized 3 Comments
10Aug/092

Silverlight Is For Breakfast Now!

Tell me if you've ever experienced this before:

You start working on a development project, and after reviewing the requirements, you declare that some new technology would be the perfect fit for it. You talk to your manager, and he/she decides the team shouldn't try anything new. "It's too risky," they say. "It's only going to slow our efforts down," they say.

You scour the web for examples of how the technology has saved countless hours of development, deployment, and maintenance. All of it falls on deaf ears, because unfamiliarity often breeds unwillingness.

If this describes an experience you've had, I've got some good news. On Wednesday, August 19th, I am hosting a Silverlight Breakfast with HMB (a Microsoft Gold Certified Partner) for "technology decision makers."

Attendees can expect to learn how incorporating the power of Silverlight can lead to improved maintainability, decreased time to market, and higher levels of user acceptance in their applications.

To get registered, you can head over to the registration site. The meeting is being held in the Microsoft office on Polaris Parkway from 7:30 - 9:30 AM (on August 19, 2009), on the north side of Columbus, OH.

8800 Lyra Ave. #400
Columbus, OH 43240
Link to Map

Filed under: Uncategorized 2 Comments