Many Niches

Jack of All Trades, Master of Some

Compete Where Your Strengths Are

January 27th, 2009 by Brandon Watson

One of my favorite sites is Hacker News.  This is mostly because I discover many new blogs and interesting postings about a variety of nerd topics.  I was reading a post titled My Startup Manifesto, and loved one of the pieces of it.  The author was laying out his framework for how he wanted to compete in the marketplace.

One of my tenets has always been to go where the competition either isn’t intense, or is not flooded with talent.  This is one of the main reasons why I left the possibility of working in a hedge fund in 2005/6.  There’s just too many super smart people there trying to manufacture returns, and doing many of the same things.  My thesis was that it was bound to come to an end, and returns would revert to the mean, or even below.  We are now seeing that prove itself out.

This was also one of the reasons why I started IMSafer. The parental control space had seen no new investment for years.  Further, IQ tends to follow money, and no money had been made in parental controls.  We showed how you could build something new, addressing an existing problem in a new way, and have a successful exit.

The one paragraph that I wanted to grab from this manifesto was:

Compete Where Your Strengths Are

Figure out what your strengths are relative to your peers, and compete in that area. Too many people around the world can set up a LAMP stack and program in HTML/CSS/JS/PHP/Python/Ruby, so try to compete in an another area, where you have a competitive advantage. It’s okay to use the mentioned technologies, but if all it takes to duplicate your product is knowledge of easy-access technologies, you’re competing with millions of people, and your chances drop accordingly.

There’s a couple of pieces in that paragraph that are interesting.  I have read many postings recently saying that your best bet is to learn new languages all the time so that you can stand out ahead of your peers, as if knowing a new language is what matters in solving a problem efficiently.  The argument made is that if everyone else knows PHP, you can’t compete.  Code in PHP becomes a commodity.  Bullshit.  That’s like saying because I can write a sentence in English, Hemmingway had better watch out.

Language proficiency does not solve for algorithm design and code elegance.  There are going to be projects for which churning out commodity code is going to get the job done.  Let’s call that advertising copy editing.  A far larger percentage of the population can do that, and do it with sufficient skill to get paid to do it.  Writing the great American novel, on the other hand, is a far harder endeavor.

The core fault with much of the projects passing for “startups” these days is that there is nothing proprietary about them.  All too often we see these “me too” projects.  You all know them when you see them.  Somehow we have convinced ourselves that being late to the party and looking like everyone else is going to get us the girl.  Here’s a hint – she’s already left with someone who looked like you.

Compete where you are different.  A great example?  I love Balsamiq.  Love it!  Talk about finding an open space in the market and delivering high value product.  Peldi has nailed it, and I really want to see him have continued success.  He’s using the same list of tech that could be considered commodity, but he’s delivering a user experience that’s difficult to replicate, and, more importantly, he’s solving a problem no one else had solved in a way that made sense for the market he is in.

Many entrepreneurs I talk to these days have great ideas, but they are derivative.  Either that, or they are too easy to copy.  Twitter is dead simple, but they also have a huge lead.  Copying them won’t get it done.  There’s no shortage of discussions about FriendFeed versus Twitter, but the reality is that what those services ultimately deliver are different, which is why FriedFeed will continue to grow.  It’s not a Twitter clone – though much of FriendFeed’s traffic pulls from Twitter use.

Be different.  Be defendable.  Be determined.

Posted in Entrepreneurs | View Comments

FriendFeed Helping Twitter?

January 22nd, 2009 by Brandon Watson

A few weeks back, I wanted to pick up C#.  I have been hacking away in Python for a couple years, but now that I am in the Developer Platform Marketing division at Microsoft, I really felt it was my obligation to pick up some C# skillz.

The first thing I went and wrote was a small app that utilizes the FriendFeed API.  It polls the service for their public timeline.  It then iterates through each entry in that list and gets the last 20 posts (I think) for each user for the entries in the public timeline.  Within the code, I added the following:

dictRegExStrings.Add(“Twitter”, “.com/(.+)”);
dictRegExStrings.Add(“Digg”, “.com/users/(.+)”);
dictRegExStrings.Add(“delicious”, “.com/(.+)”);
dictRegExStrings.Add(“Last.fm”, “.fm/user/(.+)/”);
dictRegExStrings.Add(“FriendFeed”, “.com/(.+)”);

What that allowed me to do was to take the service name and then use my list of RegExes to pull the user name for those services (in case I wanted to go ping their APIs or do other such things, like recreate a social graph…).  I have about 10 of them that I wanted to track specifcally, and I list the ones above to show how I was going about doing my matches against the FriendFeed object.  I iterate through the public feed fetches, as seen in this code snippet:

FriendFeedClient ffClient = new FriendFeedClient();

ServiceNames = new List<string>();
for (int i = 0; i < length; i++)
{
    pubFeed = ffClient.FetchPublicFeed();

I do my tabulating, and move on to the next public feed fetch.  I was happy that I got the code running, and how easy the FriendFeed guys have made it to use their service in this way.  In order to be a nice net citizen, I put a sleep in my for loop.  In any event, here’s the interesting bit: when I first wrote the code I started dumping data to a text file.  The last one I dumped before today was:

11/27/08 1:00AM
Twitter:        10433   23.84 %
Delicious:      681     1.56 %
Last.FM:        465     1.06 %
Digg:           3933    8.99 %
FriendFeed:     3157    7.21 %
Facebook:       703     1.61 %
YouTube:        580     1.33 %
Disqus:         33      0.08 %
Tumblr:         1599    3.65 %
StumbleUpon:    433     0.99 %
Flickr:         762     1.74 %
Blogs:          13273   30.32 %
Other:          7718    17.63 %

Before today, it was merely a novelty for me.  I actually ran the code again on Monday, and had seen that the Twitter traffic had trended up to 40%.  However, this week, it was announced that FriedFeed had implemented a feature allowing their users to import their Twitter friends.  It was postulated by some that this would have the impact of an increase in traffic/usage for FriendFeed.  Others went so far to say that the announcement by Twitter to up their rate limits on APIs was a shot at FriendFeed.

Since I had the data just sitting there on my computer, I decided to do another run just to see what was going on.  I ran it a couple of times.  Once with five iterations, once with 10, and something like 300 iterations.  Here are those results:

01/22/09 12:00PM
Twitter:        93121   52.45 %
Delicious:      9431    5.31 %
Last.FM:        1302    0.73 %
Digg:           9200    5.18 %
FriendFeed:     13743   7.74 %
Facebook:       4165    2.35 %
YouTube:        1337    0.75 %
Disqus:         335     0.19 %
Tumblr:         2645    1.49 %
StumbleUpon:    1827    1.03 %
Flickr:         1858    1.05 %
Blogs:          19425   10.94 %
Other:          19169   10.80 %

Look at the percentages for FriendFeed and Twitter.  Quite a dramatic difference.  More importantly is that the posts identified as FriendFeed have stayed flat, but Twitter is zooming.  Whether this translates out to people viewing Twitter through FriendFeed has yet to be seen, but the Twitter usage is way up.

Since I’ve got the code, I will continue to track this for a while.  In fact, I think I am going to create and Azure app that has a worker role that just pings FriendFeed from time to time and track this data over time, and publish the date for everyone to see.  That’ll be my next code project.

Posted in N00b Notes | View Comments

ASP.NET MVC How I Love Thee

January 22nd, 2009 by Brandon Watson

So far, I am in love with ASP.NET MVC.  Let’s just hope this doesn’t turn out like my love affair with other potentially fleeting items, like the great Seattle snow storm of December 2008.  I think my Facebook update on that one was:

FacebookStatus1After throwing my hands up in disgust yesterday, while trying to do a simple thing like put some data in a database, get it out, and display it arbitrarily on a page, I got a note from a friend who really urged me to check out the MVC beta that Microsoft had put out.  The download was easy enough, and once I had that done, I wandered over to tutorials on ASP.net to see what all the fuss was about.  Remember, MVC is how my mind thinks about building web apps, so this was a welcome starting point.

SampleMVC First off, the default project code is quite cumbersome.  There’s a ton of files that get created, which I am sure are great to get started, but without context, they are a bit overwhelming.  Remember, I am approaching this as someone who quite literally has no idea what is going on.

However, if you take a closer look at what they have included, you will see that there was some care given to the functionality that comes to your right out of the box.

The application itself doesn’t do much, but it does have user account functionality built in for you.  For most people building applications, they are going to want to have the ability to create user accounts.  More importantly, if you did into the code, what you see is that the user accounts was implemented without using the asp:login controls.  Trust me, you are very happy about this.  The login page uses tables, instead of CSS (my good friend, the UI Guru, always makes such a big deal of table-less UI), so no points for style.  You get it…style…style sheets?  Anyone?

Another bonus was that they had the good sense to throw in the JQuery JavaScript files.  I don’t know JS, but from reading enough headlines at Hacker News, I know JQuery is what you want.  Eventually I will get around to learning some JS goodness, but I suspect that will come after a very turbulent affair with CSS.

After watching that short video on how to build a task list, I felt like I had all the information I needed to get started building the My3Words app.  Sure enough, within a much shorter period of time, I had a working prototype which allowed me to input usernames, and words, and that data routed into the database, and was able to display that data on an arbitrary page.  I cannot tell you how happy that made me.

So there you have it.  If you, like me, have done some MVC development (even a teeny tiny bit), I am pretty confident you are going to find this set of Microsoft technologies much easier around which to wrap your brain.  The next post will have the walk through of my building some base functionality of the My3Words app.

Posted in N00b Notes | View Comments

Fun Times With ASP.NET

January 21st, 2009 by Brandon Watson

First off, there’s the two worlds of doing things with ASP.NET.  Actually, there’s three if you count classic ASP, but who’s looking at that?  The first path that I went down in trying to wrap my head around ASP.NET was the web forms method of development.  The bulk of the content online is targeted at this way of building apps, and it was the methodology switched to around the time ASP became ASP.NET.  The second path is the MVC path, and we will get to that in a bit.

At first, I was happy with the materials that I had come upon for learning ASP.NET.  There appeared to be no shortage of books available, and plenty of results turned up in the live.com search (37.1 million to be exact).  The first book that I got from our library (yes, Microsoft has it’s own library, and it’s awesome) was ASP.NET 3.5 Step By Step.  The ratings on Amazon were good, so it seemed like a reasonable starting point.  For kicks, I also grabbed a couple of others.

Here’s my first problem with the ASP.NET literature that I have seen thus far.  For the most part, they really, really want you to understand how ASP.NET works, internally, before you can do anything.  Unfortunately for the ADHD generation, we want to build things, and we can’t be bothered with details.  Page upon page upon page of HTTP pipelines and other minutia.

I myself learn from examples; preferably code tied to a real application.  Too often in books, when there is sample code, the author provides a dump of the code, as if they are trying to say “look how much code I can write,” when all that does is make me want to close the book.  Reading source code is hard, and certainly reading someone else’s is even harder.  Truth be told, that’s why I embarked on this endeavor…to put out postings which were step by step about how I built something in the hope that some other novice would appreciate that I am going through exactly what they are going through.  I know I am not the best developer out there, and I am going to make a ton of stupid mistakes, but no one wants to feel stupid when they are trying to learn something new, and stupid is all I felt trying to learn the forms method of development for ASP.NET.

ASP.NET has a very cool feature called “code behind” which basically separates the code from the HTML for your pages.  I thought this was cleaner than trying to interleave the C# code into the HTML.  That is until I tried to access code that wasn’t part of the code behind source.  I am sure that if I had kept at it long enough I would have sorted through my issues, but for whatever reason, I could not make it work where I had a function in one .CS file and call it form a code behind file.  If you are trying to do this, things to look out for are the differences between “<%=” and “<%”.  That “=” matters quite a bit.  Another thing to be on the look out for, which they seemingly never cover in the code samples and books, is how and when to use includes and the “using” directives.  Remembering that one thing, more than anything, has caused me pain and suffering that I don’t want to recount.  Again, I know I am not the ace developer, but imagine if you have read this far, you aren’t either.

Further annoyances around getting started were things like trying to find useful tutorials online.  Here’s a great exercise.  Perform the following searches:

Did you do it?  How many clicks did it take you to get to useful information for ASP.net?  You would think that first link to the W3Schools Tutorial would be a good one.  It took me 5 clicks to get to the first bit of writing code.  Four pages of really superfluous stuff.  It actually felt like the whole site was set up for SEO and ads.  Not that there’s anything wrong with that, but contrast that experience with the Ruby on Rails example.  One click from the first returned link, and you are writing code.  Still a doubter?  Python was two clicks from the first returned link.  My point in all of this is it simply shouldn’t be hard to get started with a web app platform.

In all fairness, I eventually removed the word “tutorial” from my search term and landed at the asp.net site.  They have many informative articles, videos, etc, upon which to feast, but it took me a while to reduce my search terms.  Unfortunately, the video content at ASP.net suffers from three issues, in my humble opinion.  First, it’s dated – many of the video lessons for ASP.NET are several years old, and are specific to ASP.NET 2.0, not 3.5.  The ASP.NET 3.5 videos all assume you know what the heck you are doing.  Second, the bulk of the intro lesson videos that you can view display visual basic code.  I was a VB6 nerd, so I can appreciate that, but it bothered me that some of the videos didn’t have C# tutorials with C# on screen.  I get wanting to be language independent, but all of the tutorials should be in the two major Microsoft languages.  I know that sounds like a nit, but it’s important for people trying to get up to speed on your platform.  Don’t alienate them, and don’t make it hard.  Third, and last, is the same fatal flaw as the books; the heavy reliance on the forms and server controls for the programming model.  I get it.  People want to see immediate results, and “yeah” I made a grid of data from a database, but when you have specific ideas about things you want to do, and they don’t fit into this notion of using server side controls, it gets difficult to digest the information.  It simply doesn’t line up with the type of apps that breadth developers are building; it feels more geared toward enterprise developers building quick apps for intranets.

Here’s a great example of my difficulties: I wanted to connect to a database.  I created a simple table in SQL Express (that alone was a fun exercise to discuss another time).  I plowed through a bunch of content, all of it showing how “easy” it was to data bind controls.  All well and good, but what I wanted to do was execute a query and put text on the screen.  Eventually I figured out how to create a Data Set.  Have a gander at this first search result which shows up when searching for “asp.net data set.”  Make heads or tails of that.  Oh, and don’t make the mistake of not knowing the name of the data set as defined in the properties window of Visual Studio.  you kind of need to know that.  I didn’t of course.  Further, I took quite a bit of head banging trying to understand why I needed to declare adapter as follows:

UserWordsDSTableAdapters.UserWordsTableAdapter myAdapter = new UserWordsDSTableAdapters.UserWordsTableAdapter();

YIKES!  Thank goodness for auto-complete and intellisense.  Unfortunately, because C# is strongly typed, and because I couldn’t remember that the Data Set was called UserWordsDS, which then gives me the UserWordsDSTableAdapters, I had a hell of a time getting the adapter object created.  Nothing about using the Data Set was easy to just wrap my brain around.  Perhaps one day I will appreciate that there are Get functions that I have created which have the SQL queries in them, and in order to get the data, I have to create a UserWordsDS.UserWordsDataTable object, and then set that equal to the return value of the myAdapter.GetData() function, but I doubt it.  It just feels like obfuscation for the sake of obfuscation.

Finally having the ability to get data from the database had me hopeful, but this is where I ran into the problem of not understanding why I couldn’t create a new .CS file in the project, and use the very same code that I had used in a code behind file to access data and either return a string or write the Response object.  It was at this point that I threw my hands up.  I actually had three different books on my desk, all in a desperate attempt to figure out how to call C# from the aspx file.  I gave up.  And then I discovered ASP.NET MVC.  We’ll leave that post for tomorrow, but let’s just say I got more done in two hours then I did in a couple of days of “learning” traditional ASP.NET.  Must be my Django and Rails tendencies coming through.

Posted in N00b Notes | View Comments

My3Words

January 21st, 2009 by Brandon Watson

Description: I want to build an app that has value for self development within organizations.  The app will have user accounts, which you will need in order to leave feedback and view your own feedback.  People can enter 3 words about another person, for whom they must have their email.  I may restrict feedback to people of the same top level domain, but I haven’t decided.  All feedback will be anonymous.  The 3 words are meant to be the two that you like and the one that people say about you when you leave the room.  I want to be able to display a tag cloud of all the words in the system on the default page, with the positive words in green and the negative words in red.  Further, once someone logs in, I want to have multiple clouds representing:

  • words about you
  • words you have written about others
  • words written by others about people you have written about
  • words written by others about who have written about you

So there it is in a nutshell.  I am going to start the N00b Notes with my quest to get this done.

Posted in N00b Notes | View Comments

Starting Out With ASP.NET

January 21st, 2009 by Brandon Watson

Now that I have been working in the Developer and Platform Tools marketing group at Microsoft for close to a year, I have decided that it’s probably a good idea for me to be technically proficient in our own technologies.  I have spent the better part of the last decade outside of the Microsoft stack.  Most recently, I have been hacking away with Python and learned high level Ruby and Ruby on Rails, as part of the development process for IMSafer.

When you have been using dynamic typed languages, and MVC models for so long, the notion of jumping into ASP.net using C# is one that I looked on with trepidation.  Thus the birth of my N00b Notes.  Throughout this series of posts, I am going to start building apps using the Microsoft stack, and I am going to blog every step.  Quick note: it won’t be pretty.

Ultimately I want to be building apps on the Azure Services Platform.  Unfortunately, without adequate knowledge of how to build ASP.net apps, that’s a bit too much to take on at once.  So I will start with a basic app that I want to build, and try to build it in ASP.net.  For kicks, I may try to build the exact same apps on one or all of PHP, Rails and Django.

For the record, I don’t know how to deploy SQL.  I don’t know how to use CSS (I always had a buddy do the front end stuff for me).  Likewise, I don’t know JavaScript, and I don’t know PHP.  I know how to program, and I can pick up languages as needed.  Case in point, I taught myself how to use C# by building a basic app that polled FriendFeed using their API, and figuring out the frequency of post methods from their customers.  It turns out that at any given time during the day, 40% of their traffic is coming from Twitter, and 20% comes from blogs.  I was surprised that Delicious wasn’t more than about 6%.

What do I hope to accomplish?  I want to figure out how to get more of the breadth developers on the Microsoft platform.  I want to puzzle through how we can get more of the app builders creating applications on Azure.  It’s my contention that there is a core set of archetype applications that people are trying to build for the web on the consumer side, and those have a core set of things that you need to know how to do if you are going to build web apps.  I am going to start in the consumer app space, as that’s the spot where I have the most depth of experience.  Expanding that set of archetypes to include enterprise applications will prove to be a great learning experience in speaking with customers, ultimately understanding what it is they expect to get from the cloud and how they want to use it.

You can expect plenty of fumbling and bumbling on my part.  I will make many mistakes.  I will code things badly.  I will go about doing things the complete wrong way.  I know this in advance.  However, I feel pretty confident that I am not alone in my skill level, and hopefully this set of posts will be useful to others looking to use the Microsoft stack.

Posted in N00b Notes | View Comments

Battlestar Galactica – Season 4.5 Opener

January 17th, 2009 by Brandon Watson

I will avoid potential spoilers here.  I saw many people get faded by Twitter last night.  Bummer.  Real time news has a way of ruining things for you if you aren’t careful.

In any event, I want to ask the collective internets what the frak this was all about.  There’s a scene about halfway through.  See the image here:

BSG-Season45-premier

BSG-Season45-premier

If you look at that scene, you are probably looking at the pistol in his hand.  In this picture, courtesy of hulu posting the episode, their “play” marker is obfuscating that gem.  That was by design for my screen grab.  The reason I did that was because of what I saw in the camera pan.  The shot follows him down the walk, and there are many a dejected colonial sitting around, bemoaning and questioning their very existence.  He walks right through a fight between two members of the military without even paying it a second look.  He’s focused.  As you too should be, on him.  So what the heck is that on the right hand side of the screen?  Here’s another shot, cropped for you:

 

Battlestar Galacti-phone?

Battlestar Galacti-phone?

That, my friends, is a cell phone.  Was this some sort of editorial oversight?  They use plenty of communication devices on the ships, but to my knowledge, this is the first time I have seen a flip phone.

There were so many crazy revelations on the show last night; so many “what the frak??” moments, but this is the one that stayed with me overnight.  I watched, and re-watched, the scene this morning just to make sure I saw what I thought I saw.  Anyone care to venture a guess as to what is going on?  More esoterically, what plan does she have?  Surely nothing with family minutes.  And what kind of roaming does she have?  Is it ship to ship, or only within a single ship?  Do colonials text?  Are cell phone customer service reps in the fleet also prone to changing your plan and breaking your service for no reason at all, and then have no explanation?  The many new questions this revelation poses for the show are innumerable and many-fold.  Way more important than the 5th cylon. <g>

Anyone have any better thoughts?  Am I making too big a deal of this?

Posted in Fun Stuff | View Comments

 
© 2009 Many Niches Powered by Wordpress