<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>Alexey Online</title>
  <link rel="alternate" type="text/html" href="http://www.alexeyonline.com/Blog/" />
  <link rel="self" href="http://www.alexeyonline.com/Blog/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2010-10-06T21:37:45.0434412-07:00</updated>
  <author>
    <name>Alexey Kouzmitch</name>
  </author>
  <subtitle>To Blog or not to Blog? This is my answer!</subtitle>
  <id>http://www.alexeyonline.com/Blog/</id>
  <generator uri="http://www.dasblog.net" version="1.9.7174.0">DasBlog</generator>
  <entry>
    <title>The five whys</title>
    <link rel="alternate" type="text/html" href="http://www.alexeyonline.com/Blog/2010/10/07/TheFiveWhys.aspx" />
    <id>http://www.alexeyonline.com/Blog/PermaLink,guid,64e786af-7ce5-4cd7-8215-5b508e4dc86e.aspx</id>
    <published>2010-10-06T21:37:45.0434412-07:00</published>
    <updated>2010-10-06T21:37:45.0434412-07:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
It is an interesting fact that some of the principles of Agile engineering have come
out of the Japanese auto industry. Iterative development and Lean are just some examples.
Another interesting concept is a root-causing technique known as <a href="http://en.wikipedia.org/wiki/5_Whys" target="_blank">The
5 Whys</a>. The basic idea is to keep asking why after getting past the immediate
problem. Doing so can lead to uncovering a much broader problem, which if solved would
solve the original symptom and then some. Let’s say the floor is wet. An example of
the method could go something like this:
</p>
        <p>
The floor is wet!
</p>
        <ol>
          <li>
Why? The ceiling is leaking… 
</li>
          <li>
Why? The roof has a hole in it… 
</li>
          <li>
Why? A tree fell on the roof… 
</li>
          <li>
Why? There is a  tree is too close to the building… 
</li>
          <li>
Why? There aren’t regulations in place ensuring trees are planted far away enough
from buildings to prevent them from falling onto them and causing damage…</li>
        </ol>
        <p>
You can go on of course, but you can see how 5 questions get you to a much broader
problem.
</p>
        <p>
One parallel I find myself drawing recently is between seniority of an engineer and
the number of whys they routinely ask when dealing with problems. College hire and
junior developers will typically simply solve the problem reactively, asking only
a single question. More senior engineers will see deeper into the root cause of the
issue and solve that problem instead thereby saving others time as well.
</p>
        <p>
This is obviously only a single dimension of growth, but can be a good way to gauge
someone’s level of insight. So ask yourself, how many whys do you ask in your everyday
tasks and whether you peer deep enough into the problem you are facing. This can often
unmask problems you either didn’t see or can lead you to question some assumptions
you haven’t questioned in the past but which cause you or your team lots of pain.
Coupled with courage to answer those additional whys you can succeed.
</p>
        <img width="0" height="0" src="http://www.alexeyonline.com/Blog/aggbug.ashx?id=64e786af-7ce5-4cd7-8215-5b508e4dc86e" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Window 7 tips &amp;amp; tricks</title>
    <link rel="alternate" type="text/html" href="http://www.alexeyonline.com/Blog/2009/02/07/Window7TipsAmpTricks.aspx" />
    <id>http://www.alexeyonline.com/Blog/PermaLink,guid,d886b869-62b9-490c-b769-17bc9624429e.aspx</id>
    <published>2009-02-06T16:01:23.3468464-08:00</published>
    <updated>2009-02-06T16:03:16.2963569-08:00</updated>
    <category term="Technical" label="Technical" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,Technical.aspx" />
    <category term="Windows 7" label="Windows 7" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,Windows%2B7.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/Window7tipstricks_E158/Win%207%20thumb_2.jpg">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Win 7 thumb" border="0" alt="Win 7 thumb" align="right" src="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/Window7tipstricks_E158/Win%207%20thumb_thumb.jpg" width="164" height="164" />
          </a> Tim
Sneath posted quite a valuable collection tips &amp; tricks for the Windows 7 Beta
users. Some of these tips existed even before Win 7. Definitely worth checking out.
</p>
        <p>
          <a title="http://blogs.msdn.com/tims/archive/2009/01/12/the-bumper-list-of-windows-7-secrets.aspx" href="http://blogs.msdn.com/tims/archive/2009/01/12/the-bumper-list-of-windows-7-secrets.aspx">http://blogs.msdn.com/tims/archive/2009/01/12/the-bumper-list-of-windows-7-secrets.aspx</a>
        </p>
        <p>
I am pasting my favorite (keyboard shortcuts, what a surprise!!!) below:
</p>
        <p>
          <strong>Windows Management. </strong>By now, you’ve probably seen that Windows 7 does
a lot to make window management easier: you can “dock” a window to the left or right
half of the screen by simply dragging it to the edge; similarly, you can drag the
window to the top of the screen to maximize it, and double-click the window top /
bottom border to maximize it vertically with the same horizontal width. What you might
not know is that all these actions are also available with keyboard shortcuts: 
</p>
        <ul>
          <li>
            <strong>Win+Left Arrow </strong>and <strong>Win+Right Arrow </strong>dock; 
</li>
          <li>
            <strong>Win+Up Arrow </strong>and <strong>Win+Down Arrow </strong>maximizes and restores
/ minimizes; 
</li>
          <li>
            <strong>Win+Shift+Up Arrow </strong>and <strong>Win+Shift+Down Arrow </strong>maximizes
and restores the vertical size. 
</li>
        </ul>
        <p>
This side-by-side docking feature is particularly invaluable on widescreen monitors
– it makes the old Windows way of shift-clicking on two items in the taskbar and then
using the context menu to arrange them feel really painful. <img width="0" height="0" src="http://www.alexeyonline.com/Blog/aggbug.ashx?id=d886b869-62b9-490c-b769-17bc9624429e" /></p>
      </div>
    </content>
  </entry>
  <entry>
    <title>Visual Studio Test Runner Tricks for Test Driven Development</title>
    <link rel="alternate" type="text/html" href="http://www.alexeyonline.com/Blog/2009/01/16/VisualStudioTestRunnerTricksForTestDrivenDevelopment.aspx" />
    <id>http://www.alexeyonline.com/Blog/PermaLink,guid,4f7db646-d7df-4f60-b6ea-1b29f7eb5fc0.aspx</id>
    <published>2009-01-16T14:01:23.927-08:00</published>
    <updated>2009-01-16T14:43:40.2677366-08:00</updated>
    <category term="Development" label="Development" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,Development.aspx" />
    <category term="TDD" label="TDD" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,TDD.aspx" />
    <category term="Technical" label="Technical" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,Technical.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I use Visual Studio 2008 in combination with MSTest to do Test Driven Development.
One of the most important and frequent tasks when practicing TDD is running your tests.
Much has been said about NUnit’s better fit with TDD (in great part due to their standalone
test runner that simply re-runs all your tests when the assembly is rebuilt), but
it doesn’t have to be as bad as it may be out of the box with only a few tricks and
tweaks to Visual Studio.
</p>
        <p>
Firstly, it’s extremely important to know your keyboard shortcuts. It always amazes
me when I see developers write a whole bunch of code using both hands on the keyboard
and then reach for the mouse to click the green Play button to run it. Ctrl-F5 runs
your code, F5 debugs it; it’s that simple. With TDD, however, there is another step
between writing and running your code. It is running your tests. Visual Studio’s approach
to test management is very QA oriented, but it does have the simpler commands for
running tests within the current context as well as ALL tests and they have keyboard
shortcuts defined by default. Here they are and they all perform a build first if
necessary as well:
</p>
        <table border="1" cellspacing="0" cellpadding="2" width="400">
          <tbody>
            <tr>
              <td valign="top" width="200">
                <strong>Shortcut</strong>
              </td>
              <td valign="top" width="200">
                <strong>Command</strong>
              </td>
            </tr>
            <tr>
              <td valign="top" width="200">
Ctrl-R A</td>
              <td valign="top" width="200">
Run all Tests</td>
            </tr>
            <tr>
              <td valign="top" width="200">
Ctrl-R T</td>
              <td valign="top" width="200">
Run Tests in Current Context</td>
            </tr>
            <tr>
              <td valign="top" width="200">
Ctrl-R Ctrl-A</td>
              <td valign="top" width="200">
Debug all Tests</td>
            </tr>
            <tr>
              <td valign="top" width="200">
Ctrl-R Ctrl-T</td>
              <td valign="top" width="200">
Debug Tests in Current Context</td>
            </tr>
          </tbody>
        </table>
        <br />
        <p>
          <em>Note that these in fact are keystroke macros and mean that you first press Ctrl-R
and then press A by itself.</em>
        </p>
        <p>
Sometimes, a complete rebuild is required to flush old binary artifacts and this by
default requires going into the menus. Ctrl-Shift-B shortcut builds the solution so
I find it useful to map Ctrl-Alt-Shift-B to the Rebuild Solution command. You can
do this easily from the Tools-&gt;Options Menu:
</p>
        <p>
          <a href="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/VSTestRunnerTDDTricks_C5D4/image_6.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Bind Rebuild Solution Command in Options Dialog" border="0" alt="Bind Rebuild Solution Command in Options Dialog" src="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/VSTestRunnerTDDTricks_C5D4/image_thumb_2.png" width="244" height="143" />
          </a>
          <br />
          <em>Click to enlarge</em>
        </p>
        <p>
Finally, the test-runner window could become cluttered with test results once the
number of tests increases significantly. This makes finding the failed test somewhat
painful. If you look at the 4 possible Result values for the tests—Pending, In Progress,
Failed, and Passed—you may notice that all but Passed have an ‘i’ in them and we only
care about tests that don’t pass. So if you filter the Test Result window to only
show tests with an ‘i’ in the Result you get a list of all tests in Progress or Pending
but which filters out the successful tests and leaves only the Failed ones behind
after the test run is done.
</p>
        <p>
          <a href="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/VSTestRunnerTDDTricks_C5D4/image_8.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/VSTestRunnerTDDTricks_C5D4/image_thumb_3.png" width="244" height="46" />
          </a>
          <br />
          <em>Click to enlarge</em>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
Unfortunately, the filter setting doesn’t stick between VS restarts and you have to
repeat the process but it’s quick and simple.
</p>
        <p>
With these settings I find writing and running tests a breeze in Visual Studio. 
These suggestions will work in Visual Studio 2005 as well although VS 2005 test runner’s
performance issues are a mroe difficult issue to overcome.
</p>
        <img width="0" height="0" src="http://www.alexeyonline.com/Blog/aggbug.ashx?id=4f7db646-d7df-4f60-b6ea-1b29f7eb5fc0" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Windows 7 First Impressions</title>
    <link rel="alternate" type="text/html" href="http://www.alexeyonline.com/Blog/2009/01/13/Windows7FirstImpressions.aspx" />
    <id>http://www.alexeyonline.com/Blog/PermaLink,guid,56da3b7b-5143-4650-a5d3-d1e0e202455b.aspx</id>
    <published>2009-01-12T22:11:43.1491161-08:00</published>
    <updated>2009-01-12T22:19:45.0399451-08:00</updated>
    <category term="General" label="General" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,General.aspx" />
    <category term="Technical" label="Technical" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,Technical.aspx" />
    <category term="Windows 7" label="Windows 7" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,Windows%2B7.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>Disclaimer: I work for Microsoft<br />
Disclaimer 2: Parts of the group that I work for are responsible for some components
in Windows</em>
        </p>
        <p>
I work at a group at Microsoft that is responsible for delivering several components
of the next version of Windows, so having heard about and seen glimpses of the new
OS I have long planned to try it out and with Windows 7 Beta being made available
to the public this week, I decided to give it a shot. Microsoft prides itself of eating
its own dogfood (perhaps with varying degrees of success from instance to instance,
but nonetheless) and installing Windows 7 Beta can be done over the network boot like
you would any other OS you may need for work.
</p>
        <p>
I use a Dell XPS M1330 laptop for work and it’s a great Vista machine that is light
weight and has great Dell battery life (I am saying this having experience battery
“life” according to HP and Toshiba in the past which primarily involves reviving your
battery back to life by plugging it in). The laptop is equipped with 4 Gigs of RAM
and a dedicated NVidia 8400M GS video card. To date I was running Server 2008 x64
on it in order to take advantage of some of the server features that aren’t available
on Vista but I decided that an excellent way to truly try out Win 7 would be on my
day-to-day machine. I have kept it purposely free of development related things in
order to keep performance up.
</p>
        <p>
So I opted to burn a bootable image of Win7 and wipe the machine clean with anew install.
Win 7 is based on Vista’s sources and at the moment shares the same set of SKUs with
its predecessor. I ended up with Win7 Enterprise Edition which as of the Beta build
has all the features of Ultimate (Games are included but need to be added post-install
through the Programs and Features item in Control Panel). The installation experience
was very much like Vista except for some minor changes in theming such as the background
of the installer and some window coloring. This is actually a good thing since Vista’s
installation process is fast and straightforward. One notable difference was in the
portion of the installation that happens upon the first time the system boots up.
Win7, having detected my wireless card, prompted me to pick which network to connect
to.
</p>
        <p>
Below is a list of my first impressions with the new OS.
</p>
        <p>
          <strong>Hardware and Software Support</strong>
        </p>
        <p>
Hardware works. Win7 detected all of the hardware on my system except for the fingerprint
reader, driver for which was available from Dell. This is a contrast from Vista x64
install that required me downloading quite a few drivers from Dell. This is expected,
however, since the driver model is mostly unchanged from Vista and has been around
long enough for the manufacturers to catch up.
</p>
        <p>
Most applications simply work with no issues. So far I haven’t found an application
that refused to run with a minor exception of Skype where only the 4.0 Beta would
work, but similar issues exist with version 3 on Vista as well. Win 7 is developed
with Application Compatibility (AppCompat for short) as one of the top pillars and
so far it has been great. Google Chrome runs but the rendering engine doesn’t work
so it’s not really usable. Live Mesh has an issue where it keeps turning transparency
off on Windows and the taskbar – it’s rather annoying actually…
</p>
        <p>
          <strong>Windows Experience Index (WEI)</strong>
        </p>
        <p>
WEI measures performance of 5 key areas of every computer on a uniform scale: Calculations
per second (Processor), Memory operations per second (Memory), Desktop Performance
for Windows Aero (Graphics), 3D gaming and business graphics performance (Gaming Graphics)
and Disk Data Transfer Rate (Primary Hard Disk). In Vista, the rating went from 1.0
(poor) to 5.9 (excellent). In Win 7 the scale can go up to 7.9 to account for newer
and faster hardware. Of course having the same hardware as before, my score hasn’t
really changed since I’ve had Vista installed. While these scores can be mildly affected
by installing newer, updated drivers from hardware manufacturers that squeeze as much
performance as possible from your existing hardware, the way to really kick them up
a notch is to upgrade the hardware. The overall system score is determined by the
lowest number and as such I am limited at 2.9 by the laptop-grade hard-drive that
the system came with (and will remain with as well…).
</p>
        <p>
          <strong>Taskbar Redesign</strong>
        </p>
        <p>
In my opinion the taskbar is getting it’s first major update in Windows 7 since it
was introduced in Windows 95. While it’s not a complete re-imagining of how we use
Windows, it’s a different enough take on how the Windows taskbar works.
</p>
        <p>
The quick Launch toolbar has been replaced by an ability to Pin applications to the
taskbar. When an application is pinned, it’s icon will always be displayed in the
Taskbar
</p>
        <p>
Taskbar buttons are now rearrangeable. It is finally possible to move buttons for
various running applications on the taskbar. It’s a small but a very welcome change.
</p>
        <p>
Right clicking on the task bar buttons now brings up a menu of actions that are application
specific. Gone is the familiar and standard, yet of limited usefulness Minimize/Maximize/etc.
menu. Here’s an example of what right-clicking on Windows Live Messenger brings up.
</p>
        <p>
          <a href="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/Windows7FirstImpressions_F8BF/image_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/Windows7FirstImpressions_F8BF/image_thumb.png" width="152" height="244" />
          </a>
        </p>
        <p>
Since the Quick Launch toolbar is gone, the Desktop Preview button is now a tiny bar
in the bottom right corner of the screen (given that your taskbar is on the bottom
of course). Hovering over the button will make all the windows transparent so you
can see the desktop, while clicking on it will hide all the windows and show the desktop.
</p>
        <p>
 
</p>
        <p>
          <strong>Start Menu updates</strong>
        </p>
        <p>
The recent applications and recent Items menu has been combined and now an app that
has document types associated with it will have an arrow next to it when listed in
the Recent Applications view. Clicking the arrow will show recently opened documents.
</p>
        <p>
          <a href="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/Windows7FirstImpressions_F8BF/image_6.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/Windows7FirstImpressions_F8BF/image_thumb_2.png" width="244" height="77" />
          </a> 
becomes: <a href="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/Windows7FirstImpressions_F8BF/image_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/Windows7FirstImpressions_F8BF/image_thumb_1.png" width="244" height="72" /></a></p>
        <p>
This provides an easy shortcut for a fairly frequent scenario (at least for me) whereas
I launch Excel to open a document I recently worked on.
</p>
        <p>
Much like the smart right-click menu on the taskbar, the Start menu also displays
available actions for a recent application that is already running.
</p>
        <p>
          <a href="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/Windows7FirstImpressions_F8BF/image_8.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/Windows7FirstImpressions_F8BF/image_thumb_3.png" width="244" height="123" />
          </a>
        </p>
        <p>
 
</p>
        <p>
          <strong>Performance</strong>
        </p>
        <p>
Shutdown/Start-up is faster. Granted I am running on a fresh OS install, but having
already installed Office and Visual Studio, the OS still restarts quickly. Time will
tell how fast it will remain since typically windows start-up/shut-down performance
deteriorates over time.
</p>
        <p>
Wi-Fi seems to work better. At Microsoft, we have to go between buildings all the
time and there are several networks using a variety of authentication flavors around.
They all require a certificate to be installed on the machine and Win 7 auto-enrolled
with the certificate (when I joined the domain) and has been on wireless ever since. 
</p>
        <p>
          <strong>
          </strong> 
</p>
        <p>
          <strong>Desktop</strong>
        </p>
        <p>
The Desktop now includes an ability to use Rotating Backgrounds. Small feature, but
neat. Makes looking at your desktop more interesting every time.
</p>
        <p>
There is now a quick link to Change the screen resolution which eliminates the need
to select Personalize –&gt; Display Settings. Now it’s only a right-click on the Desktop
away.
</p>
        <p>
There are now some gesture-driven interaction with windows. Dragging a window to the
top edge, will maximize it while dragging it to either side will dock it there. This
makes placing two windows side-by-side a breeze. An interesting and rather unconventional
feature (at least as far as Windows features go) is the window wipe-away. You can
grab a window and shake it from side-to-side and thus “wipe away” all the other windows
to leave it as the only one that’s not minimized. Do it again and the rest of the
windows come back…
</p>
        <p>
Another noticeable change is the lack of the Windows Sidebar. The gadgets are now
free floating and can be set to be on top of other windows. It’s an interesting decision
and certainly reclaims the space the sidebar could at times take up on lower resolution
monitors, but it does make gadgets useful primarily only when the desktop is visible.
Features like wipe-away and Desktop Preview should make taking a glance at the gadgets
fairly easy, however.
</p>
        <p>
 
</p>
        <p>
          <strong>The Beta experience</strong>
        </p>
        <p>
This being a Beta release of Windows means that bugs may still be present, application
issues may come up and features may not have the best polish. To account for all of
the above, Win 7 provides a “Send Feedback” on in the title bar of all windows (well,
almost all windows). Clicking on the link brings up a really nifty Issue Report tool
that allows you to describe your issue in detail as well as record a video reproducing
the issue. This makes it easy to submit feedback on anything from bugs to feature
suggestions. 
</p>
        <p>
 
</p>
        <p>
          <strong>Final Thoughts</strong>
        </p>
        <p>
My first impression of Win 7 is definitely positive. The new UI seems fresh and there
are some real usability improvements in some of the core Windows interactions. I was
rather skeptical at first of the big-button taskbar wondering if it will not let me
manage my windows effectively, but so far it has enabled me to do it quite well. For
more information, you should look at the <a href="http://www.winsupersite.com/faq/windows_7.asp" target="_blank">Paul
Thurrott's Windows Supersite</a>. It provides a good FAQ on this and other versions
of Windows as well as some other Microsoft Technologies.
</p>
        <img width="0" height="0" src="http://www.alexeyonline.com/Blog/aggbug.ashx?id=56da3b7b-5143-4650-a5d3-d1e0e202455b" />
      </div>
    </content>
  </entry>
  <entry>
    <title>SQL Server Service Manager Rev.10</title>
    <link rel="alternate" type="text/html" href="http://www.alexeyonline.com/Blog/2007/12/05/SQLServerServiceManagerRev10.aspx" />
    <id>http://www.alexeyonline.com/Blog/PermaLink,guid,c3c4d97e-f0aa-4bda-aee1-d43e68416016.aspx</id>
    <published>2007-12-04T23:29:12.2043979-08:00</published>
    <updated>2008-03-06T12:42:44.4438499-08:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/SQLServerServiceManagerRev.10_14A1A/image_2.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 30px 0px 50px; border-right-width: 0px" height="466" alt="image" src="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/SQLServerServiceManagerRev.10_14A1A/image_thumb.png" width="310" align="right" border="0" />
          </a>I
just updated my SQL Server Service Manager application. It's designed to manage services
that are part of SQL Server 2000 &amp; 2005. It has support for multiple instances
on the same machine and allows creation of saved sets of services for quick control.
Can be useful to bulk start/stop SQL (when you need memory) or for switching between
multiple instances. The newest version adds support for "Pinning Down" services so
that the current set is the start-up one. I also updated the UI to look better on
Vista (minor sizing).
</p>
        <p>
          <a title="SQL Server Service Manager" href="http://www.alexeyonline.com/Deploy/SQLServerServiceManager/" target="_blank">Version
1.0.0.10 is available as ClickOnce here</a>.
</p>
        <p>
ENJOY.
</p>
        <img width="0" height="0" src="http://www.alexeyonline.com/Blog/aggbug.ashx?id=c3c4d97e-f0aa-4bda-aee1-d43e68416016" />
      </div>
    </content>
  </entry>
  <entry>
    <title>TDD a graph traversal algorithm</title>
    <link rel="alternate" type="text/html" href="http://www.alexeyonline.com/Blog/2007/11/08/TDDAGraphTraversalAlgorithm.aspx" />
    <id>http://www.alexeyonline.com/Blog/PermaLink,guid,de1eb9e8-8394-4359-ae72-228818ea101e.aspx</id>
    <published>2007-11-07T21:40:31.563-08:00</published>
    <updated>2007-11-07T22:24:53.5006963-08:00</updated>
    <category term="Development" label="Development" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,Development.aspx" />
    <category term="TDD" label="TDD" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,TDD.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I am playing around with the <a href="http://creators.xna.com" target="_blank">XNA
Framework</a> and in the process of writing a game, I need to perform in essence a
graph traversal. Given a 3D board (of w x h x d cells), I need to from a starting
position and "up" direction to go around the board and figure out all reachable locations.
So If you have a cube in space and you start on one of the faces, I need to get all
cells on the surface of the cube. It gets a bit more complicated once you throw in
rules like "you can't traverse through walls" and "if you reach an edge, you in essence
go over it and rotate" (sort of like going around the globe, but around a cube...
if that makes sense).
</p>
        <p>
Anyway... I am trying to do as much Test Driven Development as possible and this problem
got me thinking. It's nothing new to write some code that will iterate through a graph,
keeping track of visited cells and figuring out others, but I was trying to figure
out how to do this in a testable manner without exposing all kinds of internals about
the traversal class. After all, if it's private, it's an implementation detail. But
I needed to say "do one pass and show me the node list" type of thing. So I decided
to use .Net 2.0 iterator method instead. It allows you to create a function that returns
an IEnumerable&lt;T&gt; and the iterate over the results within a foreach loop. Within
the method you can use yield return statements to return values as they are generated
and the method execution will continue with IEnumerable&lt;T&gt;.MoveNext() method
is called. When there are no more results to return, a yield break statement is used
to end the iteration process.
</p>
        <p>
Here's what a method that returns nothing looks like.
</p>
        <pre class="code">
          <span style="color: rgb(0,0,255)">internal</span>
          <span style="color: rgb(43,145,175)">IEnumerable</span>&lt;<span style="color: rgb(43,145,175)">StarLocationInfo</span>&gt;
GetStarLocations() { <span style="color: rgb(0,0,255)">yield</span><span style="color: rgb(0,0,255)">break</span>;
}</pre>
        <a href="http://11011.net/software/vspaste">
        </a>
        <p>
As I progressed through writing various tests, I could simulate conditions such as
"when on a plane, return the current position and four children next to it". In the
spirit of TDD it could look something like this:
</p>
        <p>
        <span style="color: rgb(0,0,255)">internal</span><span style="color: rgb(43,145,175)">IEnumerable</span>&lt;<span style="color: rgb(43,145,175)">StarLocationInfo</span>&gt;
GetStarLocations()<br />
        {<br />
            <span style="color: rgb(0,0,255)">yield</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">StarLocationInfo</span>(startPosition);<br />
            <span style="color: rgb(0,0,255)">yield</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">StarLocationInfo</span>(startPosition
+ <span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">Vector3</span>(1,
0, 0));<br />
            <span style="color: rgb(0,0,255)">yield</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">StarLocationInfo</span>(startPosition
+ <span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">Vector3</span>(0,
1, 0));<br />
            <span style="color: rgb(0,0,255)">yield</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">StarLocationInfo</span>(startPosition
+ <span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">Vector3</span>(-1,
0, 0));<br />
            <span style="color: rgb(0,0,255)">yield</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">StarLocationInfo</span>(startPosition
+ <span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">Vector3</span>(0,
-1, 0));<br />
            <span style="color: rgb(0,0,255)">yield</span><span style="color: rgb(0,0,255)">break</span>;<br />
        }
</p>
        <p>
So all of this allowed me to write tests like this:
</p>
        <pre class="code">        [<span style="color: rgb(43,145,175)">Test</span>] <span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,255)">void</span> OnPlaneFourChildrenAreReturned()
{ <span style="color: rgb(43,145,175)">GameBoard</span> testBoard = CreatePlane(); <span style="color: rgb(43,145,175)">GameBoardStarTraverser</span> traverser
= <span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">GameBoardStarTraverser</span>(testBoard, <span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">Vector3</span>(2,
2, 0), <span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">Vector3</span>(0,
0, -1)); <span style="color: rgb(43,145,175)">List</span>&lt;<span style="color: rgb(43,145,175)">StarLocationInfo</span>&gt;
expectedList = <span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">List</span>&lt;<span style="color: rgb(43,145,175)">StarLocationInfo</span>&gt;(5);
expectedList.Add(<span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">StarLocationInfo</span>(2,
2, 0)); expectedList.Add(<span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">StarLocationInfo</span>(1,
2, 0)); expectedList.Add(<span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">StarLocationInfo</span>(3,
2, 0)); expectedList.Add(<span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">StarLocationInfo</span>(2,
1, 0)); expectedList.Add(<span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">StarLocationInfo</span>(2,
3, 0)); RunTraversalAndVerifyExpectations(traverser, expectedList); }</pre>
        <a href="http://11011.net/software/vspaste">
        </a>
        <p>
where the last function basically runs through the results of traverser.GetStartLocations()
with a foreach loop and removes items from the expected list as it gets them from
the enumerator. It also makes sure that all of the expected values were recorded.
</p>
        <p>
In the end I ended up with a traversal algorithm that much resembles a typical graph
traversal (its breadth first) and all of its details hidden away in a iterative method,
yet I can test its behavior by setting the start conditions and essentially inspect
its results as they come out. To sum up:
</p>
        <ul>
          <li>
I was able to use TDD methods to drive the behavior of the algorithm 
</li>
          <li>
I kept the details of the implementation hidden, since all it takes to invoke the
"traverser" is a single function call. 
</li>
          <li>
I used a neat feature of .Net 2.0.</li>
        </ul>
        <p>
Note: this can be done with .Net 1.1 of course, but it's not as neat as one would
need to implement both an IEnumerable and IEnumerator interfaces in a couple of classes.
</p>
        <img width="0" height="0" src="http://www.alexeyonline.com/Blog/aggbug.ashx?id=de1eb9e8-8394-4359-ae72-228818ea101e" />
      </div>
    </content>
  </entry>
  <entry>
    <title>New Addition to the Family</title>
    <link rel="alternate" type="text/html" href="http://www.alexeyonline.com/Blog/2007/09/20/NewAdditionToTheFamily.aspx" />
    <id>http://www.alexeyonline.com/Blog/PermaLink,guid,69f1e7f8-464d-43ab-bcf5-2cc8e95b3ad8.aspx</id>
    <published>2007-09-19T17:18:30.1782596-07:00</published>
    <updated>2007-09-21T08:46:54.8566846-07:00</updated>
    <category term="Technical" label="Technical" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,Technical.aspx" />
    <category term="Vista" label="Vista" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,Vista.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
No I am not having a child!!! I am talking about my "digital" family.
</p>
        <p>
I recently put together a new system for home development and gaming use. here's the
quick spec:
</p>
        <ul>
          <li>
Intel Core 2 Quad 2.4 GHz Q6600 Processor 
</li>
          <li>
4GB Corsair PC6400 RAM (4-4-4-12) 
</li>
          <li>
EVGA NVIDIA 680i SLI Motherboard 
</li>
          <li>
2x Western Digital 320GB SATA/3GBs Hard Drives w/16MB Cache 
</li>
          <li>
XFX NVIDIA 8600GT 512MB DDR3 RAM Video Card 
</li>
          <li>
SAMSUNG 16X SATA DVD+/-R/W CD-R/W Drive w/LightScribe 
</li>
          <li>
ANTEC Sonata III case w/500W power supply</li>
        </ul>
        <p>
All of this from <a href="http://www.newegg.com/" target="_blank">newegg.com</a> for
just about a $1000 after mail in rebates and I am pretty happy with what I ended up
with. 
</p>
        <p>
The CPU is very impressive. It sports 4 cores with 32KB+32KB L1 Cache and 2 x 2MB L2
Cache on an 1066MHz FSB. The amount of cache is very impressive especially when
compared to some of the older Extreme edition processors that still cost more than
this CPU. I am running Vista Ultimate x64 and the CPU usage is typically under 15%.
The great thing abut this processor is that even if one core spikes up, it only amounts
to 25% of the total processing power. I have tried a few games on it so far and even
those have not utilized the multiple cores. I can't wait to try something that really
pushes the multiple cores on it. I did apparently end up with the older B3 stepping
that runs a bit hotter and is harder to overclock, but the newer G0's <a href="http://www.anandtech.com/cpuchipsets/intel/showdoc.aspx?i=3066" target="_blank">provide
only slight advantage</a>.
</p>
        <p>
My dev box at work has 4GB of RAM and I've always been happy with the speed, so it
was a no-brainer for me to go with 4 at home. It's almost strange, however, to have
a machine with no server components (no IIS yet, no SQL Server, etc) running on it.
It almost feels too fast!!! (ALMOST since there is actually no such thing)
</p>
        <p>
The XFX 8600GT video card was a good balance between price and performance. It sports
512MB of DDR3 RAM and has fulls support for DirectX10 all for a $130. And it came
with a copy of Company of Heroes which is a great RTS game.
</p>
        <p>
I am also finally running in RAID. I went with mirroring of the two 320GB drives into
a single 320GB partition. Seeing how this purchase was prompted by the recent near-failure
of an HD in my laptop (it still doesn't boot, and it's not dead and a whole another
story) I got so fed up with loosing data, RAID was an absolute requirement. It's also
quite speedy. I guess this is in a way a hybrid raid implementation, but it's not
software and is implemented by the motherboard. The SAMSUNG drive adds all the CD/DVD
burning capabilities i could ever desire (no thanks to the HD format wars for now...).
Note: 100% SATA system here; no IDE!!
</p>
        <p>
All of this is plugged into the EVGA motherboard running the NVIDIA nForce 680i chipset
with lots of nice features. My only complaint is lack of one extra set of USB ports.
The case has 2 in the front, and the motherboard only has one more plug-in left for
the rear expansion slot panel. I guess it was designed for a case with no USB plugs,
which I would think leaves out majority of the cases today. It does have 4 more USB
ports on the rear panel of the motherboard itself, so I've got plenty, but I ended
up with 2 cold ports on the rear expansion slot.
</p>
        <p>
ANTEC is known for having some of the quietest cases around and Sonata III proves
to be no exception. The loudest fan in the system is a small fan on the motherboard
cooling the NVIDIA chip. The case is very light and had plenty of room for all of
the components.
</p>
        <p>
Final Performance Scores:
</p>
        <p>
          <a href="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/NewAdditiontotheFamily_A807/WEI.png" atomicselection="true">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="217" alt="WEI" src="http://www.alexeyonline.com/Blog/content/binary/WindowsLiveWriter/NewAdditiontotheFamily_A807/WEI_thumb.png" width="563" border="0" />
          </a>  
</p>
        <p>
So Vista seems pretty happy. As am I!!! I can now work, develop and play at full speed
at home. Once I get to overclocking I'll post the new scores.
</p>
        <p>
Now I just have to figure out how I'm going to solve the problem of
running a home server seeing how my server laptop no longer boots.
</p>
        <img width="0" height="0" src="http://www.alexeyonline.com/Blog/aggbug.ashx?id=69f1e7f8-464d-43ab-bcf5-2cc8e95b3ad8" />
      </div>
    </content>
  </entry>
  <entry>
    <title>ReadyBoost is a Miracle</title>
    <link rel="alternate" type="text/html" href="http://www.alexeyonline.com/Blog/2007/08/01/ReadyBoostIsAMiracle.aspx" />
    <id>http://www.alexeyonline.com/Blog/PermaLink,guid,04cdc876-0517-4c57-9da3-c21a176067a9.aspx</id>
    <published>2007-08-01T14:03:54.0801868-07:00</published>
    <updated>2007-08-01T14:59:34.2051868-07:00</updated>
    <category term="General" label="General" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,General.aspx" />
    <category term="Vista" label="Vista" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,Vista.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I run Vista Ultimate on a Dimension XPS at home. As good as the machine was 3 years
ago when I got it, 1 Gig of RAM is just not cutting it anymore. With another Gig still
costing over a $100, I decided to try the poor man's solution. I went out and got
a $20 1Gig USB memory stick and plugged it into the PC.
</p>
        <p>
Vista includes a feature called ReadyBoost. There have been plenty of posts about
it, but I wanted to point out that it really does work. I was doing some tinkering
with the XNA Framework (more on that later) and having a couple of Visual Studio Express
instances running along with 3D Studio MAX instance and an IE window or 2 (or 5) was
taking its tall on the system. 
</p>
        <p>
With the memory stick in and configured to be used for ReadyBoost, the system is SIGNIFICANTLY
more responsive. Switching between windows is now practically instantaneous and launching
a new IE window doesn't take a good portion of 30 seconds anymore. Another noticable
thing is the responsiveness of the system when I sit back down in front of it after
not suing it for a day. It's common for the computer to "wake up" for a few minutes
when this happens, but ReadyBoost (which is essentially a cache for the swap file)
makes that a non-issue.
</p>
        <p>
Eventually I will add another Gig of RAM to that box which will probably reduce the
effectiveness of the ReadyBoost cache. It would be interesting to see how much the
extra RAM will help vs. ReadyBoost...
</p>
        <p>
Couple of notes about ReadyBoost:
</p>
        <ul>
          <li>
External Memory readers are not supported, so you can't plug an SD card into your
printer. But a built-in SD reader (as some laptops have now-a-days) can work.
The tell tale sign is if your reader comes up as an empty drive in the OS when there
is no card in it, it will not work. 
</li>
          <li>
The memory has to be fast enough. This is arbitrary and most new USB sticks should
work, but I have had an older 256MB stick fail to pass the speed test. <a href="http://www.codinghorror.com/blog/archives/000680.html" target="_blank">Here
are some more facts...</a></li>
        </ul>
        <p>
Overall: ReadyBoost rocks and, unless you have 2+ Gigs of RAM, it is totally
worth it.
</p>
        <div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:18c79c33-2e01-4754-9b8e-bdfb1779e96b" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati
Tags: <a href="http://technorati.com/tags/Vista" rel="tag">Vista</a>, <a href="http://technorati.com/tags/ReadyBoost" rel="tag">ReadyBoost</a></div>
        <img width="0" height="0" src="http://www.alexeyonline.com/Blog/aggbug.ashx?id=04cdc876-0517-4c57-9da3-c21a176067a9" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Alexey Online 3.0</title>
    <link rel="alternate" type="text/html" href="http://www.alexeyonline.com/Blog/2007/08/01/AlexeyOnline30.aspx" />
    <id>http://www.alexeyonline.com/Blog/PermaLink,guid,e3af2938-18d2-4a35-a171-f47ab1a6d78a.aspx</id>
    <published>2007-08-01T13:15:44.3145618-07:00</published>
    <updated>2007-08-01T13:34:12.1114368-07:00</updated>
    <category term="General" label="General" scheme="http://www.alexeyonline.com/Blog/CategoryView,category,General.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I am taking a third stab at this whole blogging thing. I am no novice this time around
and I think I know what I want out of my blogging setup. The first foray was with
.Text a couple years back and was fun but got frustrating since the comments system
didn't have built-in Captcha support. 
</p>
        <p>
I decided to switch to Windows Live Spaces. That was also fun, but had its drawbacks
as well. Eventually, I ran out of image space (which I realized when old posts started
showing images from newer ones). Having moved out to Washington state to work for
MS, settling in and getting into the thick of things at work took priority over blogging.
</p>
        <p>
Here's the third foray. DasBlog gets contributed to and used by the never sleeping <a href="http://www.computerzen.com" target="_blank">Scott
Hanselman</a>, which gives me plenty of confidence that it works well for even high
volume blogging.
</p>
        <p>
So I hope third time's the charm....
</p>
        <img width="0" height="0" src="http://www.alexeyonline.com/Blog/aggbug.ashx?id=e3af2938-18d2-4a35-a171-f47ab1a6d78a" />
      </div>
    </content>
  </entry>
</feed>
