Welcome to MSDN Blogs Sign in | Join | Help

Moved!

I have finally moved this blog over to my hosted site at http://gclassy.com
Posted by gclass | 1 Comments
Filed under:

What makes a blog good? How can you make your blog better?

I have been thinking about this a lot lately as I have been thinking of ways that I can improve my blog. I also have been tasked with participating on a panel of bloggers across Microsoft who will be addressing a number of moderated questions in about a month. Reading Chris Anderson's book, The Long Tail, has helped me identify a number of those ideas into more tangible concept. Blogging is definitely about the reader and the reader typically is drawn by two things:

·         The authority of the blog source

·         The relevance of the information sent out on the blog to the reader

How can bloggers improve their blogs to make the source more relevant and authoritative? I will try to address this briefly but please add any additions that you may have as comments.

Authority.

For authority, there are a number of possibilities that you can leverage to your advantage. You just need to think about the various things that make you unique and then use these things to entice the reader. In my case, I work for Microsoft, which gives me an insider's perspective and access to information and resources that people outside Microsoft don't have. As a programming writer, I am connected to the heartbeat of best practices at Microsoft for clearly communicating programming concepts. I believe that everybody has something that makes them unique to readers and has a perspective that they can provide which translates into value for readers. Beyond the resources that make you unique, you can increase your authority by increasing the number of people reading your blog, the number of people linking to your blog, and the number of times that your blog gets cited as a source.

Relevance.

Relevance in the case of blogs and blogging is really about figuring out what your targeted readers want to be reading about. Being passionate about a concept is sufficient to find sources for things to blog about, but really narrowing down what your talking points are will generate a readership that is loyal. For me, relevance has been an issue that I have attempted to address in a few past years of running my blog. One thing that I have tried is reducing the number of entries that I post in an effort to make each entry more relevant. My entries shifted from "this is an interesting point on the media / technology" citations outside my blog to "I just worked on this and this was what could have been confusing for a newbie". What I'm finding now, however, is that I should also be posting more entries. More frequent blog updates that are on topic to my blog should help to increase my blogs relevance to readers. These entries shouldn't be trash, however; they should be focused to the audience that I am targeting. In The Long Tail, Anderson points out that even the smallest niches have a place in a free marketplace where the additional cost of adding or consuming the niche is low.

The Authority-Relevance Dynamic.

There is a relationship that exists for blogs between relevance and authority: as relevance increases, readership increases, which in turn makes the blog more authoritative. As blogs become more authoritative, the number of comments goes up, making the blog more relevant. See the mini-microsoft blog for a great example of this.

Easy Tricks to Create Relevance and Authority

Share the love and add more links to sources of information.

For example, after writing my post, I went ahead and found a few other blog entries on this that are worth checking out.  I'll list them at the end of the post.

Add your blog to the big aggregators. 

Technorati.com lets you "Claim your blog" which adds ATOM and RSS support via their interface.  This in turn will get you onto the major RSS aggregator sites such as bloglines.com.

Put your blog on a domain.

This is a cheap way to create authority. Buy a domain, put your blog on it. Search engines give people higher ranks when they are hosted on their own domain.

Work to get the keywords right.

This goes hand in hand with working the niches. Identify your niche and make sure that the keywords you are using in blog and entry metadata are appropriate for the entry and your blog.

A Call To Action.

So, now, how can you improve your blog?  What should you do next to make it more authoritative and relevant?

Set some goals.

Studies show that people who set goals perform better. This means, if you identify where you want to take your blog and set some goals around it, it's much more likely that you will succeed in creating an influential blog. When you set goals, a great system is the S.M.A.R.T. system. This mnemonic stands for specific, measureable, attainable, realistic, and timely. More information about S.M.A.R.T. is available in the links at the bottom. As an example, by this time next year I will have twice as many views per post.  I will do this by sticking to my plan and tracking my progress. So here it is, by December 2009, I want to have 2000 views per post.  I also want to be posting much more. 15 entries per month.  I want all of my posts to be relevant (I can't measure this, but it's a qualitative goal that I will measure by looking at the average number of views per entry).

Identify the right niche.

Do you want your readers to be Tablet PC developers who are interested in best practices and examples for the next generation of SDK materials? Or, do you want your readers to be users who are looking for clever tricks for their PCs. For me, this is a question that I don't yet have a clear answer to, but I need to think deep and identify who the people are that I can provide the most value to.

Post more frequently.

This is pretty simple. Believe it or not, the best bloggers blog! A lot! I'm guilty of not blogging enough. Despite my efforts to post less and make the entries more relevant, I have in effect segmented off a few readers from when I was posting more frequently. I will try to post relevant content to keep readers engaged with my blog in the future and will do this with fervor in an effort to drive up my relevance.

Share the love.

If you link, they will come. Links (in and out) are the way that spiders crawl the web. More links equals more touches by the spiders, and the greater your blog's relevance. Again, I'm guilty of not linking out enough. I will try to dramatically increase the number of external links and cross references that I make in entries. Perhaps I will even try to standardize this in my entries by adding a "for more information" section to each entry moving forward that includes a number of resources for further reading.

Develop voice in your posts.

Understanding your medium is very important in any form of writing.  Blogs tend to be very informal. Having dry or wordy posts can prevent readers from getting hooked on your entries.  Make sure that you develop an informal writing style for your posts to further separate your blog from the other 15 million or so blogs out there. Take this last consideration with a grain of salt, however… In some contexts, it could make sense to write up more formal or "stiff" blog entries. A blog presence for a newspaper, is one instance.  But the case for formal blog entries is much more the exception than the rule.

 

Please voice your opinion in my comments, any additional points will definitely be useful here.

 

For More information

·         Creating S.M.A.R.T. Goals

·         The Long Tail Blog

·         Custom Blogging – improving your blog

·         Google Success – Improving Blog Traffic

·         Dopp Juice – Improving your Blog

·         10 ways to improve blog traffic in 30 minutes or less

·         10 Ways to Boost your Blog Readership

 

Posted by gclass | 1 Comments

Twitter, Tumblr, and social blogging

I have recently decided to start trying Twitter again.  The problem that I had with it was I failed to really see how it would  be of much use to me as I already have chat, social blogging, and social networks tracking my every move.  I am going to try it some more though to see if I get used to it or start to like it and see more utility than I had seen before in it.  First, I need to start following people... I suppose that once I'm on it and using it frequently enough, I will be able to crowdsource questions and that could be useful.  Anyways, there are some interesting things that people are doing with twitter, the following list is what I've seen so far:

10 Twitter PR Hacks

Huffington Post's Twitter Feed - Great during the presidential debates...

Twitter's Wallstreet Feed - Kinda focused on the recession right now...

Twitter for Busines! - I found this on someone's tweet I followed.

Anyways, there could potentially be some cool stuff on twitter, not just the noise I thought was on there when I scoffed at it a few years ago.  I'll try it and see how it goes.

In related thoughts, there's a snippet-style social blogging application, tumblr.  I have an old coworker who has been using that site for the past year or so and it looks like a nice and lazy way to make the blogging equivalent of tweets.

All of these simple ways of putting tiny bits of data on the web seems at a glance to be very pointless.  I mean who cares about a short thought or a tidbit of information placed onto a random blog. But, when you start to mine the data and look at it at a larger scoped level, there could definitely be potential to have lots of useful information that is exposed through the process.  Again, I'll be patient as I try tweeting and tumbling to see whether it's useful for me.

Posted by gclass | 1 Comments

Zune gets even better!

I just realized that with the 3.1 update to the Zune service, the Zune service (Zunepass) will allow users to keep 10 songs a month, forever, in addition to having a la carte access to everything on Zune.  This hopefully will get all those people on the fence of deciding whether the Zune service is for them to get on board and start listening to music via the Zune subscription service. I'm very excited that the team was able to work this out!  I definitely love my Zune, but having worked on the DRM team, getting a deal with record labels like this isn't an easy feat.
Posted by gclass | 1 Comments
Filed under: , , ,

Hi, I'm a Tablet PC

Looks like another parody was created at WIPTE

Posted by gclass | 3 Comments
Filed under:

Multitouch, multitouch, multitouch!

Things are getting pretty exciting around here.  I have just finished my third year at Microsoft and have a brand new officemate, Cash Vo!  I have been working with the multitouch SDK for Windows 7 and I'm pleased with how simple development is for it and how responsive the hardware and software is at this phase of the product cycle.  I won't get too far into details on my development experience as I will be contributing an article or two with fresh information on this topic to the E7 blog that should more than whet your appetitite for multitouch development. 

Posted by gclass | 1 Comments
Filed under: , ,

Developing Multitouch Applications

I just saw this interesting video online which has been very helpful in getting me to completely understand how multitouch will be developed.  I recommend it for anyone interested in how multitouch apps will be created when Windows 7 releases.
Posted by gclass | 1 Comments
Filed under: ,

PDC2008 Conference Keynotes Online

Check this out!

Lots of awesome gems there including the Day #2 keynote that shows off Windows 7 [skip about 19 minutes into the presentation].

Posted by gclass | 1 Comments
Filed under: ,

Windows 7 First Impressions from PDC

I'm really excited for Windows 7, and it's been really hard to stay hush hush on it.  What's really exciting is that we're finally showing the public what is coming!  I could give you my impressions so far but instead you should check out Gizmodo's first impressions so that you don't have to take my (albeit a little biased) word for it.

 The key features that I've been really anxious to show off:

  • Math input control!
  • Awesome DLNA support (Windows Media is seriously rocking!!!)
  • New windowing features
  • New taskbar features

Anyways, some good stuff out there.  Let's see if everyone else gets as excited as I am about 7.  Here's to hoping something big is said in the E7 blog at some point.

Posted by gclass | 1 Comments
Filed under:

CComPtr and CComQIPtr, ATL / COM's smart pointers

Until I started working at Microsoft, or maybe even until I started working on Windows, I wasn't much of a "COM in C++" guy.  The functionality that I needed was typically abstracted in to a managed language such as C# and so I could get by by without ever really learning COM.  In fact, I had only written 1 application that used COM (in C++) and I had no idea what I was doing when I created it.  The biggest barrier to learning for me has been the various tasks that most programmers perform once, then reuse, or the various patterns that developers use .  After working on Windows, I have found many of the nuances of COM to be much more trivial than I had first thought.  Every now and then I encounter something new or interesting (in other words, confusing) in code that I am working with.  One of the more interesting patterns has been the CComPtr / CComQIPtr objects.  When working in COM, I typically write code that follows following pattern to get and use objects.

  1. Create the object using CoCreateInstance
  2. Perform my actions with the retrieved object
  3. Release the object...

I have talked about this in previous posts, the process is pretty straightforward and is pretty similar to constructing "normal" objects in C++.

Now, occasionally, this object gets passed around between functions rather than getting accessed globally or using an accessor on the class that contains it.  As such, the object gets passed around as an IUnknown object.  From the unknown interface pointer (pUnknown), I must then get a reference to the original object.  COM's CComPtr and CComQIPtr, both referred to as smart pointers because they keep track of references and deallocate them when the pointer goes out of scope, enable developers to do this.  Each of these objects is also a template class (they can be created for any type of COM object) so they're convenient for converting pointers to unknown objects into usable interfaces based on the template.  The following example shows how an unknown pointer could be translated into a pointer to a COM object for the SomeInterface interface using the CComPtr interface.

CComPtr<ISomInterface> spSomeInterface;
HRESULT hr = pUnk->QueryInterface<ISomeInterface>(&spSomeInterface)
if (SUCCEEDED(hr)){
  spSomeInterface->DoSomethingImportant();
}

The pattern is pretty straightforward:

  1. Create the smart pointer
  2. Run QueryInterface to retrieve the interface
  3. Test the HRESULT
  4. Use the queried interface

Alternatively, you can use the CComQIPtr safe pointer and can skip the query interface step as shown in the following example.

CComQIPtr<ISomeInterface> spSomeInterface(pUnk);
if (spSomeInterface){
  spSomeInterface->DoSomething();
}

In the case of CComQIPtr, the object will be NULL if it can't be found in the interfaces that the unknown interface has. I won't get into the details of these two interfaces as it seems there are a number of people who prefer one or the other.  More information on this can be found here and here.

Posted by gclass | 3 Comments

A response to criticism for Microsoft's compliance documentation

I want to preface this that this post is my personal perspective and that of what I have seen from my peers and is not anything official from Microsoft.  Anyways...

I just encountered an article on Slashdot chastising Microsoft's documentation indirectly by citing a ruling that Microsoft's documentation is unfit for US consumption.  As a writer who produces our documentation I'm a little offended but I also understand the typical criticisms.  For developers, documentation can be a giant pain in the tush...  The last thing that you want to be working on after writing some cool code is to go back over it again and explain it so that someone else can use it without having your domain knowledge.  For architects, it is difficult to specify a particular protocol or technology without revealing trade secrets.  For programming writers (what I do) it can be difficult to determine which things are important for developers, which areas they're going to have trouble with, and the best way to communicate this (are we dealing with expert programmers, or novice programmers?):

More information here: http://ploneglenn.blogspot.com/2008/09/bane-of-every-coder.html
And here as well:  http://www.dynamicalsoftware.com/cgi-bin/ViewBlogEntry.pl?id=14

The challenges that Microsoft faces in producing compliance documentation for software are varied.  For starters, what is sufficient documentation, and for whom?  For an architect, a specification that shows the system from a high level and that specifies the protocols for a particular technology may be sufficient to communicate a means for implementing a custom or third party application that uses or interoperates with a technology.  For SOME developers (and some interfaces for that matter), code demonstrating how an API is used is sufficient to use that API.  For others, a broad explanation of the particulars of that interface and its usage are necessary.  What if our audience is NOT a developer?  What is sufficient for those people?  Do we need to explain what a computer is, what networking is, and so on?  Where do we, as writers draw the line?  How do we identify the right areas to focus our attention.  The even larger problem is that we are constantly working with a moving target.  The documentation MUST ship for compliance at the same time that its related product is shipping.  If halfway through the product's development lifecycle, the interfaces change, all of the work that we, as writers, have produced can immediately become useless.  Another problem is that if a particular design will not work, the architecture can change, eliminating much of the writing work that was performed to explain the architecture.  These are the problems that face writers every day.

What the article stating the our docs are unfit for consumption focuses on is the issues around documentation compliance for Microsoft's protocols.  The article doesn't say, "it's hard to produce software using Microsoft's platforms", it instead is saying "it's difficult to interoperate with Microsoft's ecosystem without using Microsoft's platform".  This is the difference between the platform documentation that we produce and the compliance documentation.  The compliance documentation SHOULD exist so that other people can use our protocols to easily deliver alternative implementations of what we've done.  This IS pretty easy for us to deliver because at some point, we designed the product (horray for Architects) and then described the product to the developer audience (go Program Manages!) and the implemented the design (developers, developers, developers).  The only problem is, for compliance, our existing documents simply will not do.  There is a specific format that we need to deliver to the EU.  There is a specific format that we need to deliver to the DOJ.  And these formats are entirely arbitrary.  Whether or not that document format works for our engineering process or not, we need to deliver our docs to them in it.  From our perspective, compliance documentation is a long set of hoops that regulatory bodies are making us go through in order to squeeze money out of us.  The specifications that we receive for formats that we'll be delivering documentation are legal documents that are filled with confusing and unspecific requirements. 

Anyways, I think I'll pick away at a few points in the article:

>consistently had trouble with producing complete and useful documentation
Now, this is a very pointed statement.  Microsoft has consistently had trouble producing complete and useful documentation.  What is complete documentation?  This is defined differently by the EU and the DOJ.  Compliance is a very tricky situation.  Ask the developers, program managers, and writers who were working on the protocol compliance documentation that we produced for the EU.  They gave us a specification that indicated we needed to deliver them documentation in some arcane format (I'm not sure exaclty what it was, but it was something along the lines of delivering docs on microfilm).  Another issue is that there is no set of documentation that is perfect for every audience.  In the case of what we were delivering to the EU, I'd imagine that the audience was lawyers, writers, and industry experts.  The case that Microsoft's documentation is insufficient is most typically that you can't debug into our sources as you can with OSS.  If you're comparing closed source software to open source software from a debugging perspective, it's certainly easier to determine WHY something doesn't work in the open source case.  Software ships with bugs, and if these bugs are in protected bits of code, you can't see why something is broken.  In closed source software, we need to design assuming that our users will NOT be able to debug into all of our sources.  As a result, we have to future proof our designs for debugging with the sources that we give - this is difficult for architects and program managers.  Additionally, developers have to be excruciatingly careful when producing code so that meaningful messages are returned to third party developers.  With aggressive product cycles, sometimes the due diligence is overlooked, and Microsoft does a good job in preventing this with internal processes and quality standards.  Nobody's perfect, but in my opinion, we are doing a pretty darn good job in addressing these two issues for developers.

Later, the article goes to say...

>Most developers find Microsoft's API documentation to be pretty good ... the company can produce similar documents when it is determined to.
*sigh* It's relieving to know that there's the perception that we're doing something right.  This is the documentation that my peers and I focus our efforts on.  The difference between this documentation and the compliance documentation is that we're able to plan around this.  The compliance stuff tends to "come up" when we are not in compliance.  As a result, the resources that we typically have when producing documenation are gone working on new projects, or have left the company.  In turn, we, as writers, have to reverse engineer the code to work out the various aspecsts of compliance to try and meet the needs of various regulating bodies.

Anyways, compliance is a huge pain for Microsoft.  If you're a dev for a small company, be happy you don't have to handle it all the time, but it also is a good idea to think about documentation to future-proof your code from being a headache if it ever becomes subject to compliance work.

How to use the Real-time stylus

The Real-Time Stylus (RTS) is a Tablet PC SDK feature that simplifies customized rendering of Stylus output, enables access to powerful hardware-level information for strokes and points, and grants access to ink-related events.  The RTS works by using plug-ins that are added to via an interface that enables you to customize how the SDK is interpreting and using pen input.

 

 

Part 1:  Setting up the Project

You will be creating a simple project that just has a just a dialog and an InkPicture control.  This is described in previous blog entries here.

 

 

Part 2:  A Very Simple Example Using the Dynamic Renderer RTS plug-in

The following code demonstrates a simple way to use the Dynamic renderer plug-in, provided by Microsoft, to have a higher level of control over ink-based controls.  At this point, you shouldI have created a pretty straightforward project that has a dialog with only an InkPicture control in it.  The real-time stylus interface is attached to the ink control and then the ink control relinquishes various aspects of ink rendering and so on to the plug-ins that are then added to the real-time stylus.

 

First, you will need to declare pointers for the Real-time stylus interface and a rendering plug-in.

// Some global COM interface pointers

CComPtr<IRealTimeStylus> g_pRealTimeStylus;

CComPtr<IDynamicRenderer> g_pDynamicRenderer;

CWnd* g_hInkArea;

 

After that you will need to attach the stylus to the ink control.

(inside of InitDialog)

    g_hInkArea = this->GetDlgItem(IDC_INKPICTURE);

    // TODO: Add extra initialization here

    // Create the IRealTimeStylus object

    HRESULT hr = g_pRealTimeStylus.CoCreateInstance(CLSID_RealTimeStylus);

 

    if (SUCCEEDED(hr))

    {

        // This both sets the m_gbRTSArea member to the

        hr = g_pRealTimeStylus->put_HWND(

          reinterpret_cast<HANDLE_PTR>(g_hInkArea->m_hWnd)

        );

    }

    if (SUCCEEDED(hr))

    {

        // This both sets the m_gbRTSArea member to the

        hr = g_pRealTimeStylus->put_Enabled(TRUE);

    }

 

Finally, you will need to add a plug-in to the real-time stylus control and you will be good to go.

    if (SUCCEEDED(hr))

    {

        // Create an IDynamicRenderer object to demonstrate RTS plug-ins

        hr = g_pDynamicRenderer.CoCreateInstance(CLSID_DynamicRenderer);

    }

    if (SUCCEEDED(hr))

    {

        // Retrieve the sync version of the dynamic renderer plug-in

        CComPtr<IStylusSyncPlugin> spSyncPlugin;

        hr = g_pDynamicRenderer.QueryInterface(&spSyncPlugin);

    }

    if (SUCCEEDED(hr))

    {

        // relenquish control of the HWND to the real-time stylus

        hr = g_pDynamicRenderer->put_HWND(

          reinterpret_cast<HANDLE_PTR>(g_hInkArea->m_hWnd)

        );

    }

    if (SUCCEEDED(hr))

    {

        // Add to the plug-in collection

        g_pRealTimeStylus->AddStylusSyncPlugin(0, spSyncPlugin);

    }

    if (SUCCEEDED(hr))

    {

        // Enable the plug-in

        hr = g_pDynamicRenderer->put_Enabled(TRUE);

    }

 

Conclusion

So there you have it, in summary to use the RTS, all you need to do is create the interfaces, attach them to an Ink Overlay or a control that uses an Ink Overlay, and then add the plugins that you want.

An interesting Tablet PC concept from Intel

This gizmodo article shows a shiny new Tablet from Intel that is rather unique in that it looks really thin, small, and has a sliding keyboard like many cell phones.  Intel is also using an N-Trig capacitive touch screen much akin to the screen that is being used in Dell's Latitude XT  so that this proto-hardware supports multi-touch.  The hardware is hot, I hope that someone runs with this design and puts out a sweet MT UMPC.
Posted by gclass | 1 Comments
Filed under: ,

10 Useful Web Sites I Frequent

As a digression from my regular ... absence? I figured I would post the first 10 useful Web sites for various things that I do on the web that I used to do using applications, email, or a hodge-podge of utilities.  Note that these are just in order of "off the top of my head" rather than in order of importance or usefulness.

#1 Chat
http://meebo.com - This is a really sweet chat site.  I can access all of the features that I would get from something like Naim, Gaim, or Trillian, except I have access everywhere!

#2 RSS
http://bloglines.com - This is the BEST RSS reader that I have found that runs entirely off of the web.  Accept no substitutues (I'm looking at you, Google reader)

#3 Community Blogging
http://www.livejournal.com - I have been a long term LJ user and the communities on there are really some of the best and most fun on the Web.

#4 File and Photo Sharing
http://skydrive.live.com - I love SkyDrive, it's what I find to be Microsoft's BEST Web 2.0 site because it solves the issue of silly form uploads and having to install third party applications (issues that plague many other file and photo sharing sites) while remaining free, easily controlled, and simple (unlike uglymug and flickr).  For SkyDrive, you just choose a folder full of files, dump it, and upload it, no fees, no hassle.  I love it.

#5 Personal Social Networking
http://facebook.com - Facebook is killing it in the online social networking space.  I'm always amazed at how many people I work with, went to school with, and so on are switching from myspace.  The reason is really straightforward, facebook has a clean interface.  The chat doesn't require a client.  The apps are cool.  Photo sharing is a piece of cake (see #4).  I wonder if I should share my infos with readers... Anyways, if you're on the socials, facebook is the way to go if you enjoy simplicity and usability.

#6 Professional Social Networking
http://linkedin.com - LinkedIn... Yeah, you're probably asking why I would put facebook and LinkedIn on the same list.  Linked In is a rather contrary site to Facebook because it really doesn't let you do much more than place your resume and credentials online.  This is a good thing though because it keeps your professional contacts professional.  You don't want recruiters looking at your social pictures as could happen on Facebook, and you also may want to have and maintain professional contacts

#7 Online Music Playback
http://playlist.com - This is an awesome concept.   Find all the music you like, put it on a playlist, and listen to it anywhere!  Playlist does an excellent job of enabling access to collections of music online without any hassle.

#8 Online Music Suggestion
http://www.last.fm - It's really a toss-up between last.fm and pandora project for me, but I happen to prefer the look and feel of last.fm the most.

#9 Web Design Resources
http://webdesignfromscratch.com/ - Every time I design a new site, I try to check over the WDFS resources to see if there's anything they have written about that could help me to improve my layout.  These guys offer incredible insights for free!

#10 Bookmarking
http://de.licio.us - I love de.licio.us because I work on a number of machines and am totally tired of synchronizing my bookmarks.  I wonder if they will automatically sync your bookmarks out to your browser.

Anyways, there you go, a few useful sites that offer excellence in productivity and synchronization.

Posted by gclass | 1 Comments
More Posts Next page »
 
Page view tracker