Disable Toast Notifications in Outlook 2010

October 18th, 2011

ToastSampleWhen a new email arrives, Outlook displays a desktop alert in the bottom-right of your screen. It looks like toast popping up from a toast, or rather fading in from an ethereal desktop toaster. The problem is that it can be terribly distracting. One of the benefits of email is the offline “I’ll deal with it in a batch when I get a moment” nature. That is one of the main distinguishing factors between email and instant messaging. The problem with the toast notification is that it draws it to your attention the moment the email arrives.

Disabling the Notification
In Outlook 2010, you can disable these notifications by navigating to File->Options->Mail. From here scroll down to Message arrival and uncheck options Briefly change the mouse pointer and Display a Desktop Alert. Much better.

DisableToastNotifications

Post to Twitter Post to Yahoo Buzz Post to Delicious Post to Digg Post to Facebook Post to Reddit Post to StumbleUpon

Focus, Productivity , , ,

Exploring the LAMP Stack

October 3rd, 2011

HTML5 is the future. If that wasn’t clear to me before, then it certainly is now. I’ve known for a while that the plug-in model (Flash, Silverlight) weren’t the long-term solution, but all that XAML goodness kept me hanging around and hoping in vein. Over the last two years I’ve spent about as much time in WPF and Silverlight as I have in ASP.NET. The development environment and technology stack are very appealing to developers. The problem is that the end user doesn’t really care how an application was developed as long as it is available to them when and where they need it. It is this observation that has led me to return to the technology that will work on any platform that has a browser.

To that end I’ve been exploring the Linux, Apache, MySQL, PHP (LAMP) stack recently. If I’m going to step outside of the Silverlight bubble, then why not explore the platform that has been used to create so many successful online projects. What I’ve found so far has left me very impressed. Without any real knowledge of language, syntax, or tools, I was able to get a website up and running in just two days. It wasn’t a sophisticated website, nor did it really do anything that useful, but it did prove out a number of important concepts that would pave the way for a larger project. I was able to successfully build two web services, one using SOAP and WSDL, the other a REST based service using JSON. I was able to retrieve data from a MySQL database via these services and digest it from an AJAX client. Deployment is as simple as copying files over ftp. No configuration, no magic project files or solutions, or .user files to confuse and confound. The tools are certainly not as advanced as Visual Studio, but so far I’m very impressed by all that I’ve seen. Stay tuned for more.

Post to Twitter Post to Yahoo Buzz Post to Delicious Post to Digg Post to Facebook Post to Reddit Post to StumbleUpon

Uncategorized

MEF and MVVM – Code Sample Browser

May 9th, 2011

The Managed Extensibility Framework (also known as MEF) allows for extensible application design by providing services necessary to decouple application modules and packages.

MEFedMVVM is a framework available on CodePlex that extends the MEF concept to include the MVVM pattern for both WPF and Silverlight.

blocks    silverlight_logo

I used MEFedMVVM to create a lightweight code sample browser application to demonstrate a simple use of the MVVM pattern in Silverlight that employs MEF to couple such common services as a singleton model and view model messenger (mediator).

See it in Action
The code sample browser application is used to host the public code sample repository here:
http://code.stuartthompson.net/samplebrowser

The download archive is available here:
http://svn.stuartthompson.net/public/CodeSampleBrowser/CodeSampleBrowser.zip

Code Structure
The code sample browser is divided into five projects and uses MEF to import and export implementations between the different modules. MEFedMVVM is used to connect the views with their respective view-models. The five projects and their purposes are as follows:

CodeSampleBrowser
The main Silverlight application. This contains the xaml files that implement the views, styles, and converters necessary to present the application.

CodeSampleBrowser.ViewModels
This project contains the view-models that provide the functional interface to the application. The two main view models provide interfaces for the code sample list (navigation) and code sample detail layouts.

CodeSampleBrowser.Core
The model and core system code. The runtime implementation of ICodeBrowserModel is declared and exported as a singleton.

CodeSampleBrowser.Entities
POCOs (Plain Old CLR Objects) are declared here. They form the currency used to communicate domain values between modules.

CodeSampleBrowser.Web
A simple ASP.NET project used to host the Silverlight application during development.

 

Disclaimer: This code is provided as is, without warranty, and without guarantee of fitness for any purpose. Use at your own risk.

Post to Twitter Post to Yahoo Buzz Post to Delicious Post to Digg Post to Facebook Post to Reddit Post to StumbleUpon

Uncategorized

Enabling BitLocker in Windows 7

May 6th, 2011

BitLocker provides full disk encryption. With mounting concerns around identity theft and corporate data security it is more important than ever that everyone take steps to ensure the data stored on their personal computers is kept secure.

The following step by step instructions can be used to enable BitLocker drive encryption on a machine running Windows 7.

Disclaimer: These instructions are provided AS IS without implied warranty of any kind. USE AT YOUR OWN RISK. I will not provide support and by reading this post or using these instructions you agree that I am in no way responsible for loss of data or any other losses that result from your usage of the information contained in this post.

Step 1 – Configure Local Group Policy
BitLocker uses local group policy settings to configure its behavior. These settings must be initialized prior to running BitLocker.

Step 1.1 – Open the Local Group Policy Snapin
Click Start and in the run box type gpedit.msc

clip_image001


Step 1.2 – Navigate to the correct node in the group policy editor
Navigate to:
Local Group Policy –> Computer Configuration –> Administrative Templates –> Windows Components –> BitLocker Drive Encryption –> Operating System Drives

clip_image002

There are four settings groups that need to be configured here. Open each window in turn as specified in the following four steps. To open a settings group double-click the setting in the list.


Step 1.3 – Require additional authentication at startup
Configure BitLocker to require a startup PIN with TPM (Trusted Platform Module). This setting means that BitLocker will require the user to enter a PIN when the computer is first powered on.

clip_image003

Click Apply and OK to close the settings window.


Step 1.4 – Allow enhanced PINs for startup
Enhanced PINs allow for the use of a more diverse set of characters. Select "Enabled"

clip_image004

Click Apply and OK to close the settings window.


Step 1.5 – Configure minimum PIN length for startup
The next settings group provides a minimum PIN length to be specified.

clip_image005

Click Apply and OK to close the settings window.


Step 1.6 – Chose how BitLocker-protected operating system drives can be recovered
Specify the mechanisms through which a BitLocker protected drive can be recovered.

clip_image006

Click Apply and OK to close the settings window.


Step 1.7 – Verify that all four settings groups are shown as Enabled
THIS IS IMPORTANT! Ensure that the settings groups are enabled correctly. Once the BitLocker process begins these settings will be used without further confirmation.

clip_image007

Close the Local Group Policy Editor window


Step 2 – Enable BitLocker Drive Encryption
Now that the local group policy has been configured the system is ready for BitLocker drive encryption.

This set of steps proceeds through a series of dialogs, each of which are explained below.

Step 2.1 – Turn on BitLocker
Turn on BitLocker by right-clicking your operating system drive and select Turn on Bitlocker…

clip_image008


Step 2.2 – BitLocker initializes the drive
Wait until the initialization is complete.

clip_image009


Step 2.3 – Prepare your drive for BitLocker
clip_image010

Click the Next button to prepare your drive.


Step 2.4 – Continue preparing your drive
clip_image011

Click the Next button again to continue


Step 2.5 – Encrypt the drive
clip_image012

Click Next to initiate the drive encryption process.


Step 2.6 – Require a PIN at every startup
clip_image013

Click on the Require a PIN at every startup option.


Step 2.7 – Enter a startup PIN
Choose a PIN that will be required at every startup. It is recommended that this is a mixture of characters and numbers that is easy to remember and is different from your username and domain password. This PIN should not be a number of phrase that is printed on the case of the computer. Service tags are not appropriate PINs.

clip_image014

Click the Set PIN button to proceed.


Step 2.8 – Insert a USB thumb-drive into your laptop
This will be used to store your recovery key.

clip_image016


Step 2.9 – Save the recovery key to a USB flash drive
clip_image017

Click the Save the recovery key to a USB flash drive option.


Step 2.10 – Save the recovery key to the thumb drive
A dialog is shown listing the USB devices connected to the system. The thumb drive inserted in step 2.8 should be listed and selected.

clip_image018

Click the Save button to save the recovery key.


Step 2.11 – Proceed to next step
Click the Next button to proceed.

clip_image019


Step 2.12 – Run BitLocker system check
Ensure that the Run BitLocker system check box is checked.

clip_image020

Click the Continue button to proceed.


Step 2.13 – Restart computer
BitLocker will now perform a system check prior to encrypting drive contents.

Part of this check involves restarting the computer to ensure that the user enters their PIN correctly and that the TPM key can be unsealed using that PIN.

clip_image021

Click the Restart now button to proceed.


Step 2.14 – Enter PIN
Enter the PIN used for this computer.

clip_image023


Step 2.15 – Encryption in progress
After the machine is booted up, note that drive encryption is in progress.

clip_image025


Step 2.16 – Wait for Drive Encryption to Complete
clip_image026

clip_image027

Click Close to finish.


Congratulations! Your drive is now encrypted with BitLocker using a TPM and PIN.

Disclaimer: These instructions are provided AS IS without implied warranty of any kind. USE AT YOUR OWN RISK. I will not provide support and by reading this post or using these instructions you agree that I am in no way responsible for loss of data or any other losses that result from your usage of the information contained in this post.

Post to Twitter Post to Yahoo Buzz Post to Delicious Post to Digg Post to Facebook Post to Reddit Post to StumbleUpon

Tools , ,

Identifying 32-bit vs. 64-bit Processes

March 16th, 2011

Ever wonder if a particular process is 32-bit vs. 64-bit? As more developers start working on 64-bit machines this question is becoming more relevant. The easiest way to determine the processor architecture of a process is to use Task Manager. If you are on a 64-bit machine you can see in Task Manager that some processes have *32 next to their name. Those are the 32-bit processes, whereas the other processes are 64-bit.

32bitvs64bit-processes-in-taskman

Post to Twitter Post to Yahoo Buzz Post to Delicious Post to Digg Post to Facebook Post to Reddit Post to StumbleUpon

Debugging

TripJournal

November 30th, 2010

For the last couple of years I have been using an application called JogTracker to keep track of my daily walks using my phone and the built-in GPS capabilities. Since getting my new EVO 4G I have been looking around again for some new application. As part of that search I came across TripJournal.

tj-feature-screen-2While essentially the same style of application, TripJournal brings a lot more to the table. Instead of simply tracking your route, you can also take photographs or videos, or add text notes. These are recorded with location data so that in reviewing the trip you can see exactly where and when you took the picture or added the note. This makes for a nice journal of your route. The software offers an export to a KMZ file that can be viewed in Google Earth to replay your trip at a later date. The Lite version is free, lacks a couple of features and is ad-supported, but offers the KMZ export and so might be appropriate for many users.

So far I’ve recorded only a couple of test trips but have been extremely happy with the visual presentation of the options, ease of use, and excellent export feature. The KMZ files do contain a lot of data and so file sizes could grow pretty quickly. This shouldn’t present too much of an issue given today’s storage spaces but might be something to watch if you’re taking a long trip.

Post to Twitter Post to Yahoo Buzz Post to Delicious Post to Digg Post to Facebook Post to Reddit Post to StumbleUpon

Uncategorized

TortoiseSVN–How to checkout a repository

November 23rd, 2010

First you will need to download TortoiseSVN from here: http://tortoisesvn.net/

Once TortoiseSVN is installed your Explorer context menu will contain some new commands. You can use the SVN Checkout command to checkout from a repository:

SubversionInstructions-Checkout

Clicking the SVN Checkout command will display the checkout dialog. Here you need to supply the url of the repository as well as a destination folder on your local machine:

SubversionInstructions-CheckoutDialog

Clicking OK will begin the checkout process. If the repository is password protected you will be asked to supply your credentials after clicking OK.

Post to Twitter Post to Yahoo Buzz Post to Delicious Post to Digg Post to Facebook Post to Reddit Post to StumbleUpon

Uncategorized

Classic Gaming – Running Populous in DOSBox

November 22nd, 2010

This weekend I got the urge to play Populous, a game I haven’t seen for over fifteen years. It was a favorite of mine at a younger age and a nostalgic twinge brought it back to mind. I originally encountered Populous on the Sega Genesis but was aware also of a PC version. Some brief searching on google brought me to abandonia.com and within five minutes I had Populous up and running in DOSBox.

DOSBox is a DOS emulator for Windows that is available from SourceForge here. More information about DOSBox is available from their website.

Abandonia is a site that offers “abandonware” (sic) DOS games. These are games that have ostensibly been abandoned by their publishers in terms of profitability1.

For those unfamiliar with the process, here are the basic steps necessary to get a game up and running in the emulator.

When you first run DOSBox, two windows will spawn. The first is a monitoring service that indicates where log files are being written and the status of the main emulator. The second is the emulator window itself. The first thing to do is mount a local folder to a drive within the emulator. This is achieved using the mount command as shown in the screenshot below. By mounting c:\games\dos\populous to c: we are performing the equivalent of inserting a floppy disk into a DOS pc.

DOSBox-howto populous

Once the drive has been mounted we switch to it with c: and then can use dir to list the contents of the drive. From here it is as simple as typing the name of the main game executable to launch it. For populous there were five options. I chose popvga3.bat to run with VGA graphics and Adlib sound. For the specifics of how to run a game it is best to refer to the instructions at abandonia.com or other classic-game fan sites. The instructions are usually easy to figure out or find. For example, the instructions for Populous can be found here.

1 I am not a legal authority and offer no warranty or promise that games downloaded from abandonia.com or anywhere on the internet are legally abandoned or available for free download. Evaluate at your own risk and please respect copyright.

Post to Twitter Post to Yahoo Buzz Post to Delicious Post to Digg Post to Facebook Post to Reddit Post to StumbleUpon

Games , , , ,

Windows vs. Linux Hosting, and why the cloud is changing things…

November 12th, 2010

This isn’t a fan-boy post. I’m not trying to beat up one camp or the other. Rather, I’ve found that the cloud and technologies like Silverlight are changing the face of hosting and I thought it might be interesting to look at why that is.

I’ve hosted a variety of sites with both Windows and Linux hosts over the last ten years. I’ve run a number of different setups from a stripped down Debian distribution out of my home using DDNS, all the way up to a remotely hosted private Windows server. I’ve always liked being able to dabble in hosting sites from ASP classic, ASP.NET, PHP, Ruby on Rails, etc.. as I find it a super way to learn and sometimes one technology is just more suitable than another for the problem at hand.

 

How Do Silverlight & “The Cloud” Change This?

Microsoft_SilverlightWith the advent of Silverlight, the need for a technology specific host changes. Because Silverlight is a browser hosted solution there is absolutely no reason you can’t host it on Linux. All you have to do is upload a .xap file to the server and then include an <object> tag to that .xap file in an .html page. It’s that simple. The Silverlight code is all running on the client machine so it doesn’t matter who is delivering the html page and xap file. The rich-client experience means that the technology running on the server is irrelevant.

windows_azure_logoWhat about the server side? What about WCF? Well, the beauty of Silverlight, web services, SOAP, and all that web 2.0 goodness is that it doesn’t matter what the Silverlight app is talking to. It could have a conversation over telnet if need be to interact with remote data stores. The cloud starts to make that even more interesting. Azure was built to be an open standard. This is a good thing. You can use Visual Studio to build out your Azure projects but ultimately they are hosted in the Azure net. You don’t need a Windows host to access Azure storage, as this post shows:

http://blogs.msdn.com/b/brian_swan/archive/2010/07/19/accessing-windows-azure-queues-from-php.aspx You can use the cloud very effectively as your data store while also using Silverlight as your user interface. You could also use Windows hosting for your web services or SQL server hosting while delivering your Silverlight app from your Linux host.

linux-windowsWith UI code that runs on the client, and storage/querying that runs in the cloud, the need for a beefy server that is processing requests for thousands of simultaneous users starts to melt away. No longer do you need a powerhouse server host to deliver a highly responsive, massively multi-user website. You can offload the heavy UI work to your users and the heavy backend work to an elastic hyper-grid like Azure. By only paying for the processing and storage you use with Azure the cost of hosting drops dramatically. It will be interesting to see what effect this has on the server market moving forward.

As more and more sites move to a “free to use” model that is supported by advertising and premium subscription services, the capital costs for hosting present the largest impedance to profit. By removing the need for Windows Server 2008 licenses (currently $1000 to $4000 per machine! http://www.microsoft.com/windowsserver2008/en/us/pricing.aspx) and by lowering the hardware requirements you can dramatically affect the bottom line for SaaS services. Silverlight presents the final missing piece in this assembly by providing a rich, easy to develop, client-hosted user interface that can hold its own against Flash and let the MS-brained developers write the code.

It’s good to see Microsoft supporting more open standards to give rise to different scenarios for hosting and delivery. I’m especially impressed that both Silverlight and Azure can be run and used without any need for Windows server technology. A custom rolled internet server (like the ones we all wrote in C or C++ in our comp sci classes!) could be used to deliver the content. As long as it can serve the files it will do the job.

Post to Twitter Post to Yahoo Buzz Post to Delicious Post to Digg Post to Facebook Post to Reddit Post to StumbleUpon

Uncategorized

Software Rewrites and the Branding Dilemma

November 10th, 2010

At some point most people who work with software have been involved in a major software rewrite. The point in a software product’s lifespan where the project owners decide it is time to revisit the fundamentals of their software and start over. Sometimes this is motivated by a desire to move to a new technology stack, other times it is to address serious architectural flaws that have existed from early days. However, often the ramifications of a software rewrite are not fully understood and can lead to some nasty misunderstandings if not addressed early and often.

When software is being updated it receives a new version number that describes the magnitude of the changes. Major changes may rev the product from version 3.x to version 4.0, while smaller changes might rev only from 3.3 to 3.4. The problem creeps in when dealing with rewrites.

Teamwork When Awesome Inc. decide that their AwesomeWare 3.5 software needs to be rewritten it is likely that the company will see this rewrite as version 4.0 of the software. It is assumed that new features will be introduced in addition to the "engineering need" for a new technology stack. Software rewrites are often costly and new features are promised as a means to soften the blow of the expense of the project. In reality, however, this is not version 4.0 of the software. A software rewrite means delivering version 1.0 of the sequel to the original product. This is where the problem occurs and becomes a hard pill to swallow.

What starts as a difference in the naming/branding of the product will quickly flourish into lengthy discussions about software quality and feature parity. When software is being updated it is understood that the new version will add some new features, refine some existing features, and solve a few bugs. Existing features should not be removed unless specifically requested, and old bugs should certainly not be reintroduced. When software is being updated this is very achievable with an appropriate development process. However, when software is being rewritten these premises rarely hold true.

Software rewrites involve revisiting fundamental assumptions about the way the product works. Every department wants the opportunity to revisit the decisions they made when the first version of the product was being developed. Database architects want to fix the flaws in their schema that have crept in over the years. Product managers want to fix workflows that don’t quite work correctly, and developers will be rewriting almost every line of code from scratch. This creates a monster project that is larger in scope than the first 1.0 of the software but with much loftier expectations.

pointing-the-blame All of this leads to the development of a new product that is supposed to do everything the old product did but better and cooler and in newer technology. In reality this version 1.0 software will have all of the blemishes and warts of a first version release. Bugs that haven’t been seen since the "early years" will start to manifest themselves again. Features that were hiding in dark corners of the original product will be forgotten or just not work the same way. The product itself will change and taken on a whole new tempo. All of this comes with the benefits of having fixed fundamental architectural flaws in all layers of the product as well as having adopted a new technology stack. However, those benefits are of most visibility to technical departments and that value is hard to translate to other areas of the business.

From a branding perspective this should be AwesomeWare version 4.0 not AwesomeWare 2 version 1.0. As a result it often retains the version 4.0 branding and all of the assumptions that go along with it, for stakeholders and users alike. Somewhere in that transition it is lost that this is a version 1.0 rookie that has only been around for a few months, not a six year veteran that has been battle hardened over the years. Bug counts will spike, features from the version 3.x product will be lost, and fingers will start pointing in all directions looking for who to blame.

The reality is that performing a software rewrite the same undertaking as writing new software, no matter how much intellectual property and prior lessons learned are included. New software is new software and that means new bugs, new (and differently imagined) features, and a whole new journey towards refining what is produced into a solid product.

This isn’t to say that software rewrites aren’t sometimes the right option. Technical debt accumulates as a result of decisions made to meet business needs. Technology stacks age as better platforms and frameworks are developed. Rewriting large parts of the software is often the only means to address these issues. However, the assumption with most software from a marketing perspective is that it is a stable platform from which all new versions will be additive and progressively more stable.

office space It is important that staff in charge of technical communications make the reality of the software known to all levels of the business and to address the differences in understanding of what software versioning means. When a rewrite is undertaken it is important that all parties understand the technical reality of the situation and what can be expected as a result. Leaning on technical staff to "make it do everything the old product did but better" is not a realistic expectation and will not lead to a successful project. Instead, communicate the ramifications of decisions, and communicate them often. There will always be a difference in understanding of what a new software version means, but going into it with full communication can help lessen the impact of that difference earlier in the lifecycle and hopefully avoid some big surprises later on.

Post to Twitter Post to Yahoo Buzz Post to Delicious Post to Digg Post to Facebook Post to Reddit Post to StumbleUpon

Quality Assurance , , ,