I Believe: A Management Credo

[Note: This list represents many of my core beliefs about management and leadership.  I wrote it quickly – in about 15 minutes – to capture my raw, unedited thoughts.  It is a work in progress.]

I believe that our beliefs drive our actions. It’s difficult to adopt behaviors that conflict with our beliefs.

I believe that seeds of failure are sown in every success and that seeds of success are sown in every failure. Don’t be overconfident in success. Learn from failures and move on.

I believe that managers are called to serve their team. We’ve been issued a challenge to help everyone we come in contact with do their best work.

I believe that insecure people often attempt to make themselves feel better by pushing down the people around them. Great leaders have the self-confidence to lift others.

I believe that a leader is someone that others choose to follow.

I believe that diverse teams are more resistant to groupthink and more attractive to great talent. And that having true diversity means you’ll spend some amount of your day feeling uncomfortable.

I believe that healthy tension – respectful differences of opinion – is necessary to build great products.

I believe that trust between team members is among our most valuable business assets. Distrust is friction in the system.

I believe that it takes a healthy ego to be good but informed humility to be great.

I believe that good managers treat others like they themselves want to be treated. Great managers treat others like they need to be treated.

I believe we give people monetary compensation for the work they do but we give people respect because they are fellow humans.

I believe that using one’s position power should usually be the method of last resort. Too many managers resort to management-by-edict when they’re unable to adequately explain their position.

I believe that genuine, active listening and open, honest expression are the currency of healthy teams.

I believe that team members value leaders who are honest, forward-looking, inspiring and competent.

I believe that we are what we repeatedly do.

Posted in Engineering | Tagged , | Comments closed

Add WordPress header image to Thematic child theme

How do I spruce up my WordPress blog with a clickable header image when I’m using the Thematic theme framework?  In answering that question, I’ve cobbled together guidance from a variety of websites and documentation sources.  Here’s what I’ve learned…

I have some specific goals for my header image implementation.  I want to:

  1. Add a header image that is separate from my blog title and blog description
  2. Assign a URL of my choice to the header image
  3. Enable the header image to be positioned via CSS
  4. Enable the header image to be easily updated without changes to code
  5. Minimize custom PHP code by leveraging built-in capabilities of WordPress
  6. Do all of this from a Thematic child theme (i.e. if practical, confine changes to functions.php and style.css)

When I’m done, I want my blog header to look like this:

goal

Step 1: Display a WordPress header image

WordPress has supported the Custom Header feature since version 2.1.  A custom header “is an image that is chosen as the representative image in the theme top header section.”  My issue is that I’m using Thematic framework version 1.0.3.2 as my parent theme and it does not, by default, implement a WordPress custom header.

To remedy this, I first create a header image and use an ftp utility to upload it to my child theme folder.  I place this image (msdnbug.png)…

msdnbug

…in the “thirdblogfromthesun.com/wp-content/themes/thirdblog/images” folder.  “thirdblogfromthesun.com” is my host name and “ThirdBlog” is the name of my child theme:

img-folder

Second, I add the following code to my functions.php file:

// Initialize the WordPress custom header
// This function assumes I've placed the image 'msdnbug.png' in the 'images' directory of my child theme folder
// The default image can be easily replaced from the "Header" admin page
function thirdblog_custom_header_setup() {
  $default = array(
    'width'         => 78,
    'height'        => 34,
    'default-image' => get_stylesheet_directory_uri() . '/images/msdnbug.png',
    'uploads'       => true,
  );
  add_theme_support( 'custom-header', $default );
}
add_action( 'after_setup_theme', 'thirdblog_custom_header_setup' );

// Display an image in the custom header
// This function displays the currently selected image (specified in the "Header" admin page)
// The image is placed in the 'header-image' div so it can be easily manipulated in CSS
function display_my_image() {
  $header_image = get_header_image();
    if ( ! empty( $header_image ) ) { ?>
      <div id="header-image">
        <a href="http://msdn.microsoft.com/" title="Microsoft Developer Network">
          <img src="<?php header_image(); ?>" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="" />
        </a>
      </div>
    <?php }
}
// Action position numbers documented at: http://themeshaper.com/thematic/guide/?page_id=10
// Use position 2 to place image between brandingopen and blogtitle
add_action('thematic_header', 'display_my_image', 2);

The function thirdblog_custom_header_setup() initializes the Custom Header capability of WordPress and activates the Header admin page.  However, it does not display a header image.  To do that, I need the display_my_image() function.

Once I’ve completed these changes, my header looks like this:

header img0

Step 2: Position my WordPress header image

I’m really close now but I want to reposition my header image using CSS.  I  add the following lines to my style.css file:

/* Position the custom header image to the left of the blog title */
#header-image {
   width: 80px;
   float: left;
}

/* Indent the blog title slightly */
#blog-title a {
   margin-left: 10px;
}

These CSS changes place my #header-image side-by-side and to the left of my #blog-title:

header img1

Note that – between the various Thematic hooks, the supported action positions and standard CSS positioning – I could have placed this image almost anywhere in the header.  Clicking on the image sends me to the MSDN site.  Clicking on the blog title sends me to my blog home page.  Voila!  I’ve achieved all of my header image goals.

Posted in WordPress | Tagged , | Comments closed

Debug Visual Studio F1 Help

What can you do if Visual Studio F1 Help is broken or not working?  Behind the scenes, Visual Studio maintains a help context that it passes to the help system when you press F1.  The help system then displays the topic that best matches your context.  A good first step in debugging F1 problems is understanding the information that Visual Studio is passing to the help system.

This post includes instructions for both Visual Studio 2010 and Visual Studio 2012.

Debugging Visual Studio 2012 F1 Help

To see the help context, add the following entry to your registry:

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\Dynamic Help
"Display Debug Output in Retail" = "YES"

Detailed instructions follow:

  1. Close Visual Studio.
  2. Launch the Registry Editor (regedit.exe)
  3. Navigate to HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\Dynamic Help.  By default, the Dynamic Help key has the following string values: 
    registry-before
  4. Right click on the Dynamic Help key and select New | String Value.
  5. Right click on the default name of the new string and change it to "Display Debug Output in Retail".  Ensure that the string type is “REG_SZ”.
  6. Double-click on the string name you just entered and change the Data field to "YES" and click the OK button.
     keyvalue
  7. Verify that your entry is correct:
    registry-after
  8. Close the Registry Editor.
  9. Launch Visual Studio.
  10. Click on Debug Help Context in the Visual Studio Help menu to launch the Debug Help Context pane.
    helpmenu

The Debug Help Context Pane

As you click around inside Visual Studio, you’ll see the properties in the Debug Help Context pane change dynamically.  This is the information that is passed to the help system when you press F1.

dhc

The importance and meaning of the help context properties deserve a separate blog post.  Properties of note include:

  • Keywords are added and removed to the help context depending on the location of the cursor in the editor or design surface.  When selecting a topic to display, the help system will prefer higher priority keywords over those with lower priority.
  • LCID is the human language of the Visual Studio IDE (English, French, etc.).  The help system uses it to select the correct content locale.
  • TargetFrameworkMoniker is of importance to managed code developers as it specifies the version of the runtime being used.

Debugging Visual Studio 2010 F1 Help

Add the following entry to your registry to enable the Debug Help Context pane in VS 2010:

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Dynamic Help
"Display Debug Output in Retail" = "YES"

Once you’ve done this and restarted Visual Studio, click on Debug Help Context in the Visual Studio Help menu to launch the Debug Help Context pane.  Note that the detailed steps for doing this are the same as I described above for VS 2012.

dhc2010

Posted in Visual Studio 2010, Visual Studio 2012 | Tagged , | Comments closed

Introducing Microsoft Help Viewer 2.0

Microsoft Help Viewer 2.0 is now available as part of Visual Studio 2012. With this release of the Help Viewer, our goal was to deliver a fast, simple and highly productive reference experience while making it easier to discover and manage local help content.

  • If you are a current/former Document Explorer user, you’ll find that this new Help Viewer is faster, provides fresher content and eliminates the dreaded first-time F1 penalty.
  • If you currently use Help Viewer 1.x, you’ll benefit from integrated content management and productivity improvements to search, TOC and the keyword index.
  • If you use the online MSDN Library exclusively, I encourage you to try out the Help Viewer. It provides several features not available in the online MSDN Library, notably the keyword index and the TOC filter. Many developers appreciate the productivity benefits of the Help Viewer index when looking up familiar APIs.

Help Viewer screenshot

Before I discuss the new features in Help Viewer 2.0, I should point out that MSDN documentation is not installed by VS 2012. Use the Manage Content tab in Help Viewer to select and download documentation for local use. If your development machine doesn’t have access to the internet, you can create an install disk or order a documentation DVD.

In addition, with this final, RTM release we’ve made some improvements to the behavior of Help Viewer if the content you need is *not* locally available. Read on.

Cool New Feature: Redirect-to-Web

A new feature of Help Viewer that I haven’t discussed previously is “Redirect-to-Web.”

We can’t eliminate hyperlinks between books when we package content for offline use. Unless all MSDN content is installed, developers will inevitably click on a link to a topic that’s not locally available. When that happens, Help Viewer 1.x automatically displays its equivalent of a 404 message: Topic Not Found.

However, when Help Viewer 2.0 hits a link that’s not local, it redirects to the web. The correct MSDN topic will display in the Help Viewer as long as two conditions are met:

  1. You have a live connection to the web.
  2. “Go online to get content and check for updates” is checked in Help Viewer options.  (Unchecking this box disables the Redirect-to-Web feature.)

You can easily tell when content is being displayed from the web because the topic displays a banner with the following message:

redirect

Note the “Select a book to download” link on the right-hand side of the message banner.  Click on that link to display a drop-down that helps you discover and download a book that contains the topic you’re viewing. This feature, which works with F1 help as well, really reduces the inconvenience of not having the right help content installed locally.

Help Viewer 2.0 Features

I’ve blogged about many of the new features during the development of Help Viewer 2.0. You can read more about the following features in my post on the Developer Preview:

  • Simpler setup and configuration
  • Local content management integrated into the Help Viewer
  • Search filters
  • Help Runtime incorporated into Windows 8 (Help Library Agent eliminated!)

…and about these features in my post on the Beta release:

  • TOC Filter
  • Keyword Index: “Begins With” vs. “Contains”
  • Docking Windows
  • Color Themes
  • Search Filter UI
  • Improved Performance

Finally, here’s a link to the official Microsoft Help Viewer 2.0 help documentation.

Alternatives to Help Viewer

Those of you who prefer a help experience that’s integrated into the Visual Studio IDE should check out Jason Josephy’s Visual Studio 2012 Integrated Help Extension. This extension, written by a member of the Help Viewer development team, consumes the same API used by Help Viewer 2.0 but displays help within the IDE. (Note that you’ll still need to manage your local content using the Help Viewer application. Click on “Add and Remove Help Content” in the Visual Studio Help menu.)

If you’re interested in building your own help utility or just want to learn more about the help runtime API, check out the Microsoft Help Viewer 2 Runtime API Samples on CodePlex.

Provide Feedback

We welcome your feedback on Help Viewer:

  1. Leave a comment at the bottom of this blog post
  2. Send us an email at hlpfdbk@microsoft.com, or
  3. Share your thoughts on the Visual Studio General Questions forum (note that the Developer Documentation and Help System forum has recently been retired)

Thank You

In closing, I want to thank the Help Viewer team for their dedication to the needs of developers across several challenging releases. As you can see in The Story of Help in Visual Studio 2010, we put this team through a lot of change and churn and they responded with grace and professionalism. It has been a privilege to work with them.

Posted in Microsoft Help Viewer, Visual Studio 2012 | Tagged , | Comments closed

Guide to MSDN Library Icons

“What is the meaning of MSDN Library icons?”  When referencing the .NET Class Library in MSDN, you’ll see a variety of icons in the leftmost column of member lists.  What do these MSDN icons mean?

Icon Meaning
ic29808 Public Class
ic157541 Public Field
ic91302 Public Method
ic155188 Protected Method
ic6709 Private Method
ic74937 Public Property
ic100399 Protected Property
ic138214 Private Property
ic90369 Public Event
ic57792 Protected Event
ic53205 Public Operator
ic36774 Public Structure
ic141795 Public Interface
ic134134 Public Enumeration
ic11304 Public Delegate
ic79755 Public Extension Method
ic130242 Static Member
image Supported in .NET for Windows Store Apps
ic37116 Supported by the XNA Framework
ic483549 Supported by Portable Class Library
ic90381 Supported by .NET Compact Framework
ic394597 Silverlight for Windows Phone
ic432315 Supported by XBOX 360

These icons are related to the Babel Icons used by Visual Studio 2008 IntelliSense.

Drop me a line (with a page URL) if you find an MSDN icon not included in this list.

Posted in MSDN Library | Comments closed

Check out our new MSDN home page

This morning, our MSDN home page changed from:

Old Home Page to New Home Page

The new MSDN home page has two value propositions:

  1. For developers who are new to Microsoft, the home page guides them to the best resources for getting started with Microsoft platforms and developer tools.
  2. For developers already using Microsoft products, the home page delivers timely and relevant developer news, events, and information from across Microsoft and the developer community.

Primary objectives of the redesign include:

  • Improve general home page usability by simplifying the content model, information architecture and visual design
  • Make the page more helpful to developers who are new to Microsoft platforms
  • Reduce volume of manually curated content to decrease cost of maintenance
  • Reduce overall Page Load Time

Thoughts?

Posted in MSDN | Tagged | Comments closed
%d bloggers like this: