Category Archives: Uncategorized

File > New > Presentation

About a year ago, I set out on a journey to write a book on presentation skills, aimed primarily towards software developers and other technical professionals. My reasoning is that too many presentations in our industry still fail to connect with their audience, don’t tell a story, and end up as a set of mind-numbing slides of bullet points that put people to sleep.

The book, aptly titled ‘File > New > Presentation’, was released last November, and reviews have started to appear in the New Year – a few on Amazon, and this one by Josh Holmes, who presented about the subject at CodeMash earlier this month.

Book Cover

If you are a developer (or other technical professional), looking to improve your presentation skills, I hope you’ll check out the book. You can find it on Amazon in both Kindle and paperback format.

Persistent Logging in Android

No code is perfect, but the nasty types of bugs are the ones that happen randomly and infrequently.  On a couple of recent Android projects we’ve been experiencing such bugs, and as you can guess they can be difficult to track them down.

While Android’s logcat can help, using the tool often means that you need the device connected through ADB and a USB cable in order to track the events.  While this is useful in development, this doesn’t work so well when debugging applications that are running on devices in the field.

Rather than setting up your own logging application or service, it’s possible to setup logcat to persistently log to a file on the device or SD card.  To do this, simply open an ADB Shell and run logcat as a background process with the -f option:

adb shell

# logcat -f /mnt/sdcard/extsd/logcat.txt &

As you can see in the above statement, this will create a new logcat process to persistently log every event to a file called logcat.txt on the SD card.  To kill logcat, simply find the PID through the ps tool, and kill the process.

In case you are worried about the size of the log files, logcat also has the ability to do log recycling:

adb shell

# logcat -r 1024 -n 10 -f /mnt/sdcard/extsd/logcat.txt &

This command will create up to 10 logcat.txt files on the SD card (named logcat.txt.1, logcat.txt.2, logcat.txt.3, etc.) up to 1Mb in size.  Once the end of the 10th file is reached, it will overwrite the first.

Finally, this is all great – but if the user reboots the device, the logcat process will be terminated.  To overcome this, simply edit the /init.rc file and add the following:

service logcat -r 1024 -n 10 -f /mnt/sdcard/extsd/logcat.txt


Hope this helps, and happy logging!

Upcoming Events: TechEd, PDC, and QCon

I’ll be back on the road again on Tuesday to squeeze in three more conferences before the end of the year.  My stops this time include:

TechEd Europe, Berlin

This will be my first time to Berlin, so I’m really looking forward to it.  I think it will be especially interesting as this year marks the 20th anniversary of reunification in Germany.  While I won’t be there on the actual day (9th), I still think the atmosphere will be a great experience.

I have three sessions at a sold out TechEd Europe this year.  On Thursday 12th, I will be presenting Working with the OSS Community:  Cloud Computing Interoperability (INT02-IS).  This was a late addition to my schedule, and I’ve been working on a sample application that runs across Windows Azure, Google AppEngine, and Amazon EC2 – and as it’s an interactive session, my goal is to show mostly demos and walk through how the application was put together.

In the afternoon I’ll be continuing the theme of cloud computing with Demystifying Cloud Computing (ITS204) in the IT Managers Track.  This will be an update of the session that I delivered at TechEd US, with a goal of giving IT Managers the foundational information on what cloud computing is, and why they should care.

To conclude the week on Friday, I’ll be presenting Patterns for Cloud Computing (ARC309) which takes architects and senior developers through 5 patterns for the cloud.  If you’ve been following my recent posts on my blogs, then this will be the session that brings all this together. 

PDC, Los Angeles

The week following I’ll be heading back to the West coast for PDC in Los Angeles.  I have a BOF Session this year on Will Cloud Computing change your life?  This is an INETA organized panel, and I’ll be in good company with Aaron Skonnard, David Pallmann, Michael Stiefel and others.

QCon, San Francisco

My final stop will be QCon in San Francisco.  This will be my first time at a QCon event. and as I know Floyd and the team well, I’m really looking forward to it.  I’m presenting my “Patterns for Cloud Computing” session to open the cloud computing track at the event.

Rebuilding Machines

With the previous builds of Windows 7, and now the RTM, I've had more than enough experience of rebuilding my machines over the past few months. One of the things I've created as a result is a "build script" for each of my development machines – it's still largely manual (although it would be great to have something automated here), but I find it acts as a good checklist to make sure that the machine is setup the way I need with all the necessary applications.

As it's a mixed bag of applications and settings, I thought I would spend a few minutes outlining what this build script looks like – some of which might be useful you upgrade/rebuild your own machines – and would love to hear of anything that I could potentially be including!

Base Operating System

First things first – got to load the OS and configure all the settings. This includes:

  • The actual OS itself (Windows 7). I don't do much to the setup, apart from use a local account that's different to my domain account. Doing this prevents any conflict between c:users{account} and c:users{account.domain} directories.
  • Next, add the machine to the domain. Before rebooting, I also make sure to add my domain account to the local administrators group (so that I'll be able to log into the machine afterwards).
  • Reboot
  • Login, and enter the Windows activation code
  • Run Windows Update (great for checking for those updated drivers not found during setup)
  • Install Antivirus Software (I'm running Microsoft's Forefront Client Security)

    Next I install any remaining drivers on the machine:

  • For my Lenovo machines this includes the TrackPoint driver and the ThinkVantage Power Manager utility. If this is my desktop machine, then this includes the drivers for a Wacom tablet.
  • Any printer drivers not picked up by default with Windows 7(for a Samsung Laser at home)
  • I also run the Windows Experience Index which is good for showing whether any drivers are potentially missing (e.g. if I get a 1.0 for the display, something is up)

    Now for some Windows shell configurations:

  • Start Menu / GPEDIT.MSC / Administrative Templates / Start Menu and Taskbar -> enable "Add Search Internet link to Start Menu". This enables me to type search criteria into the start menu and search directly from the start menu.
  • Start Menu / Advanced System / Remote tab -> enable this machine to be accessed via remote desktop (RDP). Required for accessing machines remotely.
  • Same dialog / Performance Tab -> uncheck all of the "animate xxx" settings, all of the "fade xxx" settings, and the "slide open combo boxes". I find that this helps remove a lot of the transition bottlenecks on older graphics hardware.
  • Right click on desktop/personalize/Windows Color / Advanced Appearance Settings -> In here I changes the border padding from 4px to 1px. I've never understood why the border padding had to be so thick…
  • Start Menu / cmd.exe / Properties -> Set the command prompt font to Consolas 16, green text on a black background. Much easier on the eyes as I spend a lot of time in the command prompt window.
  • Start Menu / Power Options -> set my power options accordingly for the machine. This normally means making sure that the machine does not go into hibernation while on AC power.
  • Start Menu / Regional -> Add a new keyboard type / Japanese IME. So that I can type in Japanese


    After the operating system is up and running to my liking, it's time to get my data on the machine.

  • First thing is to install Live Mesh (removing the device from the existing mesh if this was an existing machine).
  • I use Live Mesh to synchronize two primary folders between all my machines – one for projects that I'm currently working on, and one for tools, a collection of everyday tools that I just can't live without. I add these as two desktop folders.
  • Having these as desktop folders is great for Windows Explorer, but cumbersome to access from the command line and scripts. To overcome this, I use SysInternal's Junction to create NTFS junction points for c:projects and c:tools -> both of which point to the corresponding Live Mesh folder.
  • In Windows Explorer, I also add the projects folder to my favorites, which makes it display in the left hand column on open/save dialog boxes.
  • I use Keith Brown's Password Minder together with a PWM file in my Mesh to act as a password store across all machines.
  • One of my favorite editing tools is Notepad2, which I keep in my c:tools folder and also add to the "Send To" menu by running "shell:sendto" from the Start Menu.
  • Searching is really important to my everyday use, so I use Start++ from Brandon Paddock, which gives me access to a whole set of shortcuts from the Start Menu. I also create a junction for the settings directory (%userprofile%appdatalocal) to point to my sync'd tools directory so that all of my shortcuts are sync'd through Live Mesh.
  • I've also created several OSDX files that I install – for example, one that searches Amazon and another that searches the Microsoft downloads sites. I pin two of these (Amazon and Microsoft Downloads) to the Start Menu through GPEDIT.MSC/Admin/Windows Components/Windows Explorer/Pin option.

    Office Applications

    By this point I've got the operating system setup and all my data accessible. Now it's time for Office applications.

  • Install Office 2007 SP1
  • Configure my Outlook Account for Microsoft Exchange
  • Enable Windows Update for Office Applications when prompted.
  • Go to Windows Update and apply all of the patches, inc. SP2.
  • Configure an IMAP account for my home Email.
  • Switch off desktop alerts (too much mail to keep getting toast for each one!).
  • Set the default plain text font from Courier to Calibri.
  • Configure the shared calendar settings for my wife's shared calendar and also remove the tasks view from my calendar pane. (I have too many tasks to really make use of this functionality).
  • Once Office is complete, I install Mind Manager – one of my favorite mind mapping tools.
  • Install Office Communicator to get office IM and VOIP access.
  • Install Expression Studio 3 – primarily for Expression Blend (when doing anything in Silverlight or WPF) and Expression Web (IMO, one of the best HTML authoring environments out there).
  • Install FeedDemon for my RSS updates, and switch off the desktop alerts for this also.
  • PDF Reader. My favorite is FoxIt Reader, just because it's darn quick.
  • Virtual Clone Drive. One of my favorite utilities for mounting ISO files as drives within Windows Explorer.
  • BulletProof FTP. One of the most reliable FTP appli
    cations that I've come across

    Now that all the applications are installed, there's a little more configuration.

  • I have a ton of macros that support GTD (Getting Things Done) that you may have seen from earlier posts. This is where I load these into Outlook and create shortcuts for these.
  • I also setup OneNote, pointing it to a shared set of notebooks in my Live Mesh folders, and also configuring the screen capture utility to save to the clipboard only (anything else is just overkill).

    Development Environment

    By this point I have the machine at a point where I can use general applications, but not really write any code. Next step is to get all of the developer applications up and running.

  • Visual Studio 2008
  • Reboot, and then apply Visual Studio 2008 SP1.
  • Windows 7.0 SDK. I don't use much out of here, but there are a few tools (e.g. XamlPad) that I can't live without.
  • Team Explorer 2008. For connecting to my TFS shares.
  • Re-apply Visual Studio 2008 SP1 (required to get Team Explorer working correctly).
  • Configure IIS and ASP.NET on the machine (required for the Windows Azure CTP)
  • Apply my saved Visual Studio settings file (mostly includes font changes)
  • Install the Windows Azure July CTP
  • Install the .NET Service Bus July CTP
  • Install SQL Express 2008 + Advanced Services to a new instance called SQLEXPRESS08. In my opinion, SQL Express 2008 is Microsoft's best kept secret – a free database, with the power of higher end SQL server editions.
  • SQL Server 2008 SP1
  • SQL Server 2008 Books Online (mostly for the T-SQL reference – why is it that I can't remember any T-SQL commands? :-))
  • Apply hotfix #957944 which allows SQL Express 2008 to be used directly from MDF files in Visual Studio 2008.
  • Mobile SDK for Windows Mobile Standard 6.0. Mostly for small applications that I create on my Samsung Blackjack II.
  • Web PI – a great application for installing extra Web applications on your machine. From here I also install ASP.NET MVC 1.0 and Silverlight 3 SDK.
  • Virtual PC – for accessing my VHDs from the desktop.
  • Script# – wonderful tool for creating great scripts.
  • DevExpress CodeRushX – a free add on for Visual Studio that supports a number of refactoring shortcuts that I find really useful.
  • RAD Software Regular Expression Designer. Before finding this tool I was looking through books when trying to work out RegEx commands – no longer.
  • Visual Studio 2010 Beta – runs really well side by side Visual Studio 2008.

Using Search Folders in Outlook 2007 for GTD

One of my favorite features of Outlook 2007 is Search Folders.  A Search Folder is a dynamic folder, automatically populated based on a query.  For example, a Search Folder can be used to show all email over 1Mb in size.   

Being a GTD (Getting Things Done) addict, I wanted to see if I could use Search Folders to create separate folders for each of my project categories.  For example, if I have an Outlook category called TechEd 2009, wouldn’t it be nice to have a couple of search folders – one to show all of the active tasks associated with that category, the other to show all of the mail filed under that category.


Out of the box however, this is a little difficult to setup – while you can easily create a Search Folder that displays mail relating to a category, in Outlook 2007 you can’t actually create a Search Folder that filters on tasks.  After a little digging, I found out that Search Folders do support the capability of filtering other types of objects, but only querying of mail items are exposed in the Outlook UI.

To overcome this limitation however, we can use a simple macro:

Sub CreateNewSearchFolder()

   Set MyOutlookApplication = Outlook.Application
   SearchSubFolders = True
   Set MapiNamespace = Application.GetNamespace("MAPI")
   Set TasksFolder = MapiNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderTasks).Parent
   strS = "’" & TasksFolder.FolderPath & "’"

   Dim folderName As String
   folderName = InputBox("What category would you like to create a search folder for?:", "Category", "")
   Dim objSch As Search
   Dim categoryFilter As String
   categoryFilter = "(""urn:schemas-microsoft-com:office:office#Keywords"" LIKE ‘%" & folderName & "%’)"

   Dim taskFilter As String
   taskFilter = "(""""= ‘Tasks’ AND ""{00062003-0000-0000-C000-000000000046}/81010003"" <> 2) OR (NOT(""×10900003"" IS NULL) AND ""{00062003-0000-0000-C000-000000000046}/81010003"" <> 2)"
   Dim strTag As String
   strTag = "RecurSearch"

   ‘ Create the tasks folder

   Set objSch = Application.AdvancedSearch(Scope:=strS, Filter:=categoryFilter & " AND (" + taskFilter + ")", _
      SearchSubFolders:=True, Tag:=strTag)
   objSch.Save (folderName)

   ‘ Create the mail folder

   Set objSch = Application.AdvancedSearch(Scope:=strS, Filter:=categoryFilter, _
      SearchSubFolders:=True, Tag:=strTag)
   objSch.Save (folderName & " (Mail)")

End Sub

The above macro will prompt you for a category name and auto-magically create two search folders – one that will display the active tasks assigned to that category, and one that will display all items (both mail and tasks) assigned to that category. 

Your mileage with this may vary (and I’m sure you’ll believe me when I say the above is not officially supported :-)) but I’ve found this very useful to look at active tasks and filed mail for a specific GTD category without leaving the comfort my email folder list.

TechEd 2008 – Pre Conference Slides

On Monday I had the privilege of presenting at the TechEd 2008 pre-conference, the subject was "An Architectural Overview of Software + Services".  In my presentation, I wanted to show the architectural angle of the S+S message.  What does it mean?  How does SOA, SaaS, Web 2.0, RIA, etc. relate to S+S?  What are the architectural principles of S+S and what patterns can be derived from it.

Thanks for those who attended, it was great fun, and I enjoyed the feedback.  Here is the presentation for download.



Update:  Embedded slideshare deck into blog post

Your Opportunity to Speak at TechEd 2008!

The call for sessions tool is now open for the Architecture track at the TechEd Developers conference (3-6 June 2008). 

This year, the Architecture track will focus on three core areas:

· Persona (for example, “What is an architect?”, “How do I become an architect?”, “What skills does an architect need?”)

· Patterns (for example, architectural patterns including patterns and practices, areas such as user experience and distributed applications, and current trends such as software + services, composite applications)

· Practice (for example, case studies, best practices, recommendations, and other architecture-related guidance you would like to share with the audience)

If you are interested in being part of the Architecture track this year, please submit a proposal as soon as possible. To do this:

1. Visit the TechEd 2008 Call for Content website.

2. Use “TEUS-Speakers” as your access code

3. Create your profile

4. Choose our conference: “Tech Ed U.S. 2008 Developers (June 3-6)” (not to be confused with the IT Pro conference a week later)

5. Select the “Architecture” track, and complete the rest of the form with your proposal.  When the call for papers closes, you’ll hear back as to whether your session was accepted.

We are looking forward to receiving your proposal!

Update!  Deadline for submitting a proposal is December 31, 2007 – 11.59pm PST!

DarkRoom Macros for Microsoft Word

Like me, you may write a fair number of articles and documents.  Like me, you may also be constantly distracted by alerts, pings, toolbars, the temptation to ALT-TAB when you are writing. Recently, there have been a number of full screen editors that attempt to solve this.  DarkRoom is an example of one of these, written in .NET it runs as a full screen editor and provides just enough functionality to allow you to concentrate on writing your masterpiece. While these utilities are useful, many only deal with .txt files, which can make working with existing Word documents difficult.  I wanted to see if I could get a similar effect using a set of macros in Word to change colors, theme, and make the display full screen.


Here’s an example of two macros that I use to achieve a similar effect:

Sub DarkRoom()

‘ DarkRoom Macro

    ActiveDocument.Background.Fill.ForeColor.ObjectThemeColor = _
    ActiveDocument.Background.Fill.ForeColor.TintAndShade = 0#
    ActiveDocument.Background.Fill.Visible = msoTrue
    ActiveWindow.View.FullScreen = Not ActiveWindow.View.FullScreen
End Sub

As you can see, the first macro changes the background and foreground colors of the document, and sets the display to full screen.  This gives the white on black effect you can see in the video.  The opposite macro for this is aptly called LightRoom:

Sub LightRoom()

‘ LightRoom Macro

    ActiveDocument.Background.Fill.ForeColor.ObjectThemeColor = _
    ActiveDocument.Background.Fill.ForeColor.TintAndShade = 0#
    ActiveDocument.Background.Fill.Visible = msoTrue
End Sub


This simulates pressing the escape key (to restore the ribbon) and resets the document colors appropriately.

I assign these macros to ALT-D and ALT-L respectively to give me a quick way of switching between two displays when writing.  I’ve not tried this on Word 2003 (I’m using Word 2007), but I can’t see why it shouldn’t work.  If I have some more time, I may extend this by selecting a custom theme (maybe green on black Consolas instead of the automatic default) and hooking into the Windows task bar to make that disappear also.

My Bio


Simon Guest is the Senior Director of Technical Strategy in the Developer and Platform Evangelism (DPE) group at Microsoft, responsible for helping developers worldwide deliver practical and elegant solutions using Microsoft technologies. 

Since joining Microsoft in 2001, Simon has led the Microsoft Platform Architecture Team, acted as Editor-in-Chief of the Microsoft Architecture Journal, pioneered the area of .NET and Java 2 Enterprise Edition (J2EE) interoperability, worked with customers on mission critical .NET solutions, and has been a regular speaker at many conferences worldwide, including PDC, TechEd, and JavaOne. 

Before joining Microsoft, and with over 18 years in the IT industry, Simon held architect-level positions at many organizations, including Zoho Corporation, a Silicon Valley startup; Conchango, a UK based consultancy; and Herbert Smith, a leading law firm in the UK. He also worked for several years at GEC in its semiconductor manufacturing division.

Simon was born in England, and has been living in the U.S. for approximately eight years. He holds a Masters Degree in IT Security from the University of Westminster, London, and a Higher National Certificate in Software Engineering from Plymouth College. Simon is the author of numerous technical articles and books about Java, Microsoft .NET, and Web technologies, as well as maintaining a blog at