Business

Not with a bang, but a Twitter

Posted in Business, Dynamic Mashup in the Cloud, Personal on June 26th, 2009 by djurek – Be the first to comment

What happens when all the world’s a Twitter?

Many folks have heard of an election in Iran, Michael Jackson’s death, and Jeff Goldblum’s fake death. We know that news is spreading virally, spreading faster.

Jeff Goldblum’s death may not have been a mistake. Jeff Goldblum played Ian Malcolm in the movie versions of Jurassic Park and The Lost World. Perhaps his fake death is an allusion to something the Ian Malcolm’s character mentioned in The Lost World.

 …Although, personally, I think cyberspace means the end of our species

…Why is that?

because it means the end of innovation.This idea that the whole world is wired together is mass death. Every biologist knows that small groups in isolation evolve fastest. You put a thousand birds on an ocean island and they’ll evolve very fast. You put ten thousand on a big continent, and their evolution slows down. Now, for our own species, evolution occurs mostly through our behavior. We innovate new behavior to adapt. And everybody on earth knows that innovation only occurs in small groups. Put three people on a committee and they may get something done. Ten people, and it gets harder. Thirty people, and nothing happens. Thirty million, it becomes impossible. That’s the effect of mass media-it keeps anything from happening. Mass media swamps diversity. It makes every place the same. Bangkok or Tokyo or London: there’s a McDonald’s on one corner, a Benetton on another, a Gap across the street. Regional differences vanish. All differences vanish. In a mass-media world, there’s less of everything except the top ten books, records, movies, ideas. People worry about losing species diversity in the rain forest. But what about intellectual diversity-our most necessary resource? That’s disappearing faster than trees. But we haven’t figured that out, so now we’re planning to put five billion people together in cyberspace. And it’ll freeze the entire species. Everything will stop dead in its tracks. Everyone will think the same at the same time. Global uniformity.

Sounds scary. But I don’t think Ian Malcolm’s proposal is coming to life and the four horsemen of the apocalypse are riding into town tweeting on their Blackberries. It just means that in our increasingly connected world, we should view individuality as a more prized commodity.

BarCamp Seattle 2009: My First Time

Posted in Business, Dynamic Mashup in the Cloud, Personal on June 16th, 2009 by djurek – Be the first to comment

Why you should present at BarCamp

I recently attended participated in BarCamp Seattle. BarCamp is an ad-hoc gathering of folks to openly discuss interesting subjects in the tech field. Sessions put heavy focus on discussion and knowledge sharing. It was my first time and I’m hooked. 

While the BarCamp website has loads more information, the rules of BarCamp struck a note very close to my eastside condo-living heart: 

  • 1st Rule: You do talk about BarCamp.
  • 2nd Rule: You do blog about BarCamp.
  • 3rd Rule: If you want to present, you must write your topic and name in a presentation slot.
  • 4th Rule: Only three word intros.
  • 5th Rule: As many presentations at a time as facilities allow for.
  • 6th Rule: No pre-scheduled presentations, no tourists.
  • 7th Rule: Presentations will go on as long as they have to or until they run into another presentation slot.
  • 8th Rule: If this is your first time at BarCamp, you HAVE to present. (Ok, you don’t really HAVE to, but try to find someone to present with, or at least ask questions and be an interactive participant.

The 8th rule I read the night before the event. With plenty of time left over, Matt and I worked until the early hours of the morning on a presentation. We posted our topic on the wall (Matt makes the coolest cards): 

 

Twitter is Dead (long live Twitter)

Twitter is Dead (long live Twitter): an open discussion on new directions for social media

With no sleep and a high blood-caffeine content, we stood in front of an audience and gave a sparsely practiced talk about the future of Twitter and social media and how it could become more helpful to our daily lives. Once the talk was over, an open discussion began. 

The results blew me away. 

People around the room diverse in career background, Twitter/social media experience, and opinion began to build on our talk and offer critiques. It seemed that most people in the crowded room had a thought or question to share and the presentation morphed into an open discussion moderated by the presenters. 

Matt and I collected an invaluable pile of thoughts and questions to ponder throughout the rest of the day. I also got in some much needed presentation practice. 

The bottom line: Anyone with a good idea and a chance should give a talk at BarCamp. It’s fun and educational.

Other sessions

I attended other sessions covering social media information overload, user centered design, startups, social media analytics, and the amusing PowerPoint Karaoke. Each session broke into a discussion and some sessions were entirely discussions. I heard the thoughts and experiences of industry professionals, enthusiasts, and casual users. 

Where many conferences offer the speaker a pulpit and too much time, BarCamp gives the audience significant control and participation. The speaker even learns a thing or two. 

Thanks!

A special word of thanks to all of the organizers. You put together an amazing venue, brought a great interactive crowd, and kept us all fed, caffeinated, thinking, and entertained. I look forward to my next BarCamp. 

Closing thoughts 

Go to BarCamp. After the first day we all headed to the Red Door in Fremont to drink for free (thanks Bing!), be merry, and network more. The whole event was a blast and a great way to spend a weekend in Seattle. 

Here’s a list of links: 

SSL in C# using SslStream

Posted in Business on March 27th, 2009 by djurek – Be the first to comment

SSL is cryptic. This tutorial will get your C# program communicating in SSL using SslStream.

Note: Please leave a comment if the code is unreadable. WordPress seems to have entirely busted preformatted text. Even if you use HTML mode.

SSL encrypts communication between two nodes (a client and server). Without going into too much detail, SSL requires that the client authenticate the server against a list of trusted providers before communicating (think VeriSign, etc.). The server can authenticate the client, but that is typically not necessary in most communication scenarios.

To learn way too much about SSL theory, see SSL in Wikipedia. Fortunately with .net, you don’t need a complete understanding to implement SSL.

Shout outs

I would like to thank the folks who finally showed me the light:

I’m basically pulling together the things that they wrote into one easy place.

Getting started

You will need to download Microsoft Visual C# Express to code this. Depending on your install directory, you can find makecert.exe in C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin.

C# coding for SSL is simple but it requires some preparation. Since SSL is based on trust of certificates issued by root authorities, you will need to:

  1. Create your own root authority
  2. Create a certificate using that authority
  3. Set your client machine to trust certificates signed by the root authority you created

Making a certificate

Remember that you need to buy a certificate from a trusted root authority before your apps will work in the mainstream. This tutorial will get you working in a test environment.

Start the MMC to manage local certificates:

  1. Start > Run > type "mmc.exe" > hit enter
  2. File menu > Add/Remove Snap-in > click the Add button > Select "Certificates" > Press "Add"
  3. Select "Computer Account" > Click Next > Select "Local Computer" > Click Finish
  4. Click Close button > Click OK

Now things should look like this:

Certificates window in MMC

Fire up a command line to create certificates:

  1. Start > Run > "cmd" >hit enter
  2. cd "C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin" > hit enter
  3. Replace the parameters between %’s with your own names. Make sure %root_authority_name% matches in both instances.
  4. C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin>makecert -pe -n "CN=%root_authority_name%" -ss my -sr LocalMachine -a sha1 -sky signature -r %output_filename%.cer
  5. C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin>makecert -pe -n "CN=%certificate_name%" -ss my -sr LocalMachine -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1 -in "%root_authority_name%" -is MY -ir LocalMachine -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 %certificate_output_file%.cer
  6. If each of the commands reports "Success" at the end, congratulations! You now have a root authority and a signed certificate. Check in the C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin folder to find the two new .cer files you just created.

Meanwhile, you should see the following changes in your console under the Personal folder (you may need to refresh):

Certificates created and added to the store

You will also notice the presence of a couple .cer files in the C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin folder. One for your root authority and the other for the certificate you generated.

In this case, the "Daniel Root Authority" certificate is the root authority that issued the certificate. The "mdumps" certificate is the certificate I issued to my test server machine. For this test, my server will use the mdumps.cer file as its SSL certificate. The client machine I am using must trust the root authority to trust the certificate.

To make the client trust the root authority, copy the root authority certificate into the "Trusted Root Certification Authority" folder on the client:

Copy the root authority certificate to the trusted issuer location. This must be done on all clients that will be communicating with the server.

You will need to copy the root certificate into the trusted location of every client that will be running your server.

Writing some code

Now the coding begins.

For simplicity, you may download my sample project with the code to get this working. You will need to copy your server certificate file (.cer) into the running directory of the executable. Also, change the hostname and certificate strings to match your configuration.

Use the following namespaces for creating sockets, encrypting communications, and storing certificates:

using System.Net;
using System.Net.Sockets;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;

The server

When a server instantiates an SslStream object, it must link that stream to the certificate for authentication and encryption. A simple example:

// Load the server certificate
X509Certificate serverCert = new X509Certificate(certificateFilename);

// Start listening for a connection
Console.WriteLine("Server: waiting for client connection.");
listener.Start();
clientConnection = listener.AcceptTcpClient();

// Once a client connects, associate it with an SslStream
Console.WriteLine("Server: Client has connected.");
secureStream = new SslStream(clientConnection.GetStream());

// Set the server certificate
secureStream.AuthenticateAsServer(serverCert);

Please note that other methods of accessing the certificate exist outside of the filename method. In this case, the file method is the easiest.

The AuthenticateAsServer method will throw an Exception if it encounters an error.

The client

The client authenticates the server, in this case against the server’s hostname. Notice how the client does not load a certificate, instead it compares the server’s certificate with its list of trusted root authorities (that you set up in the MMC earlier):

// Connect
Console.WriteLine("Client: Connecting to server ");
client.Connect(serverHostname, serverPortNum);

// Authenticate the server
Console.WriteLine("Client: Authenticating server");
secureStream = new SslStream(client.GetStream());
secureStream.AuthenticateAsClient(serverHostname);

// Server has authenticated
Console.WriteLine("Client: Server authenticated!");

The AuthenticateAsServer method will throw an Exception if it encounters an error. It is possible to perform custom handling of the authentication on the client side, but that is beyond the scope of this article.

Sending and receiving messages

I wrote a couple simple methods that allow you to send a string of nearly any size. Note that the method first sends an integer (known size) describing the size of the message it will send:

static void SendMessage(SslStream stream, string message)
{
    byte[] messageLengthBytes = BitConverter.GetBytes(message.Length);

    // Send the size of the object
    stream.Write(messageLengthBytes);

    ASCIIEncoding encoder = new ASCIIEncoding();
    byte[] messageBytes = encoder.GetBytes(message);

    stream.Write(messageBytes);
}

static string GetMessage(SslStream stream)
{
    byte[] byteStreamSize = new byte[sizeof(int)];
    stream.Read(byteStreamSize, 0, sizeof(int));
    int streamSize = BitConverter.ToInt32(byteStreamSize, 0);
    byte[] messageOutput = new byte[streamSize];

    int offset = 0;
    while (offset < streamSize)
    {
        offset += stream.Read(messageOutput, offset, streamSize - offset);
    }

    string output = ASCIIEncoding.ASCII.GetString(messageOutput);

    return output;
}

Closing thoughts

SSL adds an extra layer of security to your communications, but it requires careful management of the certificate files. With this added layer comes added complexity. Fortunately, .net abstracts much of this work into an object that, with a little preparation, you can treat as any other Stream object.

Now you can focus on what your application is supposed to be doing!

The Scoble Effect (Part 3)

Posted in Business, Dynamic Mashup in the Cloud on February 5th, 2009 by djurek – Be the first to comment

The Scoble Effect has not died, surprisingly, I’ve just been busy. I have a couple new conclusions to make as I wrap up this little research project. I’ll continue using @scobleeffect for necessary twitter networkings, but I don’t intend to totally flatter Scoble with such an endearing moniker.

So checking out the latest statistics, you can see that @scobleeffect’s popularity is on the rise, even though (at the time of this posting) I have neglected to turn the feed into one of thoughtful idea productivity.

Observations

A couple behaviors caught my eye and would like to note them while maintaining a complete lack of empirical thought.

Attrition

Many users were quick to follow me, but they stopped following me after some time. I would assume this is because I was not contributing any tweets during that period. These users have the right idea to proactively filter out potential noise as it becomes apparent.

Lack of Usability

@scobleeffect’s feed is a near useless stream of noise. This promises two things: the person who tweets the most will receive the most recognition in this scenario, and it is nearly impossible to develop a useful interpersonal connection with anyone in this torrent of tweets.

Monetization Strategy

Are you looking to increase your influence in Twitter by engaging many followers at once? Do you need a platform from which to spread your ideas and a guide offering best practices? Is your message time sensitive, or do you need a head start on your grass-roots/viral growth? If so, send me an email or leave a comment and I can get you started.

Remaining Thoughts

Twitter is a great application and its simple API creates a great amount of value for developers and users. As Twitter matures and its user base grows, users will find new ways of leveraging the platform to distribute short thoughts and messages. Demand will grow and popularity will create “The Future of Twitter.”

The Future of Twitter

Expanding buzz and the notion that mutual following creates value in a linear scale will drive Twitter users to follow each other with an almost irrational exuberence (you haven’t seen it happening already?). As the follower matrix increases in size, the amount of noise will increase proportionally as users attempt to extract linear value from Twitter by tweeting incessantly and employing automation whenever possible.

Two things will happen.

There will be a contraction of followers as users switch accounts, dump most of the users they are following, or dump their accounts all together in an attempt to escape the noise.

Demand will grow for filtering software that allow users to follow everyone while filtering tweets by relevance to interest, social relationships (e.g. those defined in Facebook), growth of community buzz (i.e. breaking news), and other important categorization methods. If Twitter is so valuable in the social space, then users would likely pay a nominal fee for such a service. Hey! What a cool business idea!

What do you think?

Posted in Business, Dynamic Mashup in the Cloud on January 21st, 2009 by djurek – Be the first to comment

So if you want to make money on the internet, there are typically two major choices:

  1. Charge people for a service that should be free (bad idea)
  2. Show people relevant, tasteful, non-invasive ads (slightly better idea)

Since I’m not a genius, I’ll settle for slightly better.

The question: How would you like your ads delivered? Click here to respond to the survey.

Escaping the Snow: Moving to the Cloud

Posted in Business, Personal on December 18th, 2008 by djurek – Be the first to comment

On December 18th, 2008, a relatively large snow storm hit the Seattle area blanketing the landscape and confusing an already squirrely set of drivers. The Washington State Department of Transportation website set a new record at 5.8 million pageviews in under 24 hours. It seems that Seattleites’ pressing F5 repeatedly to find an authoritative reason not to come into work brought the WSDOT web servers to their digital knees.

If there’s one thing the northwest craves more than coffee, it’s information. WSDOT seems to understand this. With lightning speed, the WSDOT reduced their website to text and links and pointed to a page on blogger complete with a flicrk account and up to the minute updates in twitter.

We saw similar behavior in the cyber front of the Russia/Georiga struggle. The Georgian government also opted for a Blogger account.

It seems that organizations are migrating critical communications to the cloud in the face of increased web server load. This is an interesting development.