<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-16934172</id><updated>2011-11-27T18:56:10.246-06:00</updated><category term='power shell'/><category term='looking back'/><category term='JAX-RPC'/><category term='configuration'/><category term='java'/><category term='app server'/><category term='Logitech Marble Mouse'/><category term='release numbering'/><category term='windows'/><category term='JAX-WS'/><category term='fail'/><category term='web services'/><category term='hacking XML'/><category term='heavy sigh'/><category term='software development'/><title type='text'>Random Non-Sequiturs</title><subtitle type='html'>BLOG, TYPICAL, ONE EACH</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-16934172.post-8955410297161972538</id><published>2010-02-18T10:29:00.005-06:00</published><updated>2010-02-18T11:53:07.423-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='release numbering'/><title type='text'>I shall be released!</title><content type='html'>Had one of those brain-cramping moments at work the other day.  As part of our project, we have to use a tool developed by another team at our company.  We were using release "1.0 RC1".  Normally, an "RC" (release candidate) release means that the official "1.0" release is imminent, and should be identical to the "RC" release.  But the other day, we were informed that support for a new feature will be available in: release "1.0 RC2".  What??!?&lt;br /&gt;&lt;br /&gt;The theory behind a "release candidate" is that the code is done and ready for release (hence the name).  All the bugs have either been fixed or documented, and you're just giving users a pre-release to see if any new bugs turn up in the field.  The usual process is that if no major bugs are found, you'll just re-issue the release candidate as the final version.  There can be trivial changes, like changing any embedded release IDs from "1.0 RC1" to "1.0" or maybe "1.0 FINAL", but absolutely NO code changes.  Obviously, my company's suffering from a significant nomenclature failure.  There's a term for what they're releasing, and that's a "milestone release".  So why didn't they use that term?  To quote the Tao (&lt;a href="http://www.topsail.org/tao.html"&gt;of Programming&lt;/a&gt;): "These are great mysteries."&lt;br /&gt;&lt;br /&gt;I was fuming about this the other day, and I came up with a hierarchy of release types.  Check these out and see if I've covered all the bases:&lt;br /&gt;&lt;table&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Name&lt;/td&gt;&lt;td&gt;Numbering scheme&lt;/td&gt;&lt;td&gt;Description&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Major release&lt;/td&gt;&lt;td&gt;X[.0[.0]]&lt;/td&gt;&lt;td&gt;Significant improvements through major rewrites.  May not have an actual release number, but instead a distinct name.&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Minor release&lt;/td&gt;&lt;td&gt;X.M[.0]&lt;/td&gt;&lt;td&gt;Introduces new features, but is mostly compatible with previous minor releases within its major release.&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Maintenance release&lt;/td&gt;&lt;td&gt;X.M.m&lt;/td&gt;&lt;td&gt;Usually reserved for bug-fixes, may include minor functional improvements (like support for new devices or file formats).&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Release candidate&lt;/td&gt;&lt;td&gt;X.M.m RC-n&lt;/td&gt;&lt;td&gt;Sort of a "shakedown cruise".  Note that there may be several release candidates, depending on how vigorous your beta-testers are.&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Preview release&lt;/td&gt;&lt;td&gt;X.M.m [Feature] Preview&lt;/td&gt;&lt;td&gt;An interim release to permit testers to play with some new feaure(s).  Preview releases are intended to be used outside of the development team, so they should be relatively free of bugs, and any limitations should be clearly documented.&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Milestone release&lt;/td&gt;&lt;td&gt;X.M.m M-n&lt;/td&gt;&lt;td&gt;A periodic release, usually when some major new functionality has been introduced.  Very similar to a feature release, the only difference is that feature releases are usually targeted at end users, and milestone releases are more oriented towards development partners or other allied groups.  Milestones may be more buggy, or have the bare minimum of functionality required to "support" a feature.&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Interim release&lt;/td&gt;&lt;td&gt;Varies&lt;/td&gt;&lt;td&gt;A periodic release, usually just to the QA team.  A work-in-progress, interim releases serve to aggregate bug fixes and incremental improvements.  Some companies may require that nothing new be broken, but often there are no guarantees beyond the development team's assurance that the release represents their best effort to date.&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Daily build&lt;/td&gt;&lt;td&gt;X.M.m-YYYYMMDD&lt;/td&gt;&lt;td&gt;Usually only seen at sites employing Continuous Integration (CI), this is a build created from a snapshot of the development repository, often kicked off at midnight.  May be used by QA teams, but often only monitored for regression test results. Numbering scheme varies, often a project code name is used instead of a release number.&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Latest build&lt;/td&gt;&lt;td&gt;Varies, possibly [Project name]-YYYYMMDD_HH:MM:SS&lt;/td&gt;&lt;td&gt;Again, usually only seen at sites employing CI.  This is a snapshot of the current source repository.  Absolutely NO guarantees about quality or function beyond the fact that it compiles (which can be a significant milestone in itself, sometimes!)&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;So what sort of release hierarchy do you (or your team) use?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-8955410297161972538?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/8955410297161972538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=8955410297161972538&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/8955410297161972538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/8955410297161972538'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2010/02/i-shall-be-released.html' title='I shall be released!'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-743292659659271416</id><published>2009-01-26T07:52:00.003-06:00</published><updated>2009-01-26T12:17:30.269-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='power shell'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Windows PowerShell: FAIL</title><content type='html'>&lt;span style="font-size:+3;font-weight:bold"&gt;What I wanted:&lt;/span&gt;&lt;br /&gt;    &lt;tt&gt;find . -name *.class -exec rm {} \;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:+3;font-weight:bold"&gt;What I was &lt;a href="http://www.microsoft.com/technet/scriptcenter/topics/msh/cmdlets/remove-item.mspx"&gt;told&lt;/a&gt; would work:&lt;/span&gt;&lt;br /&gt;    &lt;tt&gt;Remove-Item .\* -recurse -include .class&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:+3;font-weight:bold"&gt;What I would have settled for (if it had worked):&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;set fso = CreateObject("Scripting.FileSystemObject")&lt;br /&gt;set fileExpr = new RegExp&lt;br /&gt;fileExpr.Pattern = "class$"&lt;br /&gt;fileExpr.IgnoreCase = True&lt;br /&gt;set curDir = fso.GetFolder(".")&lt;br /&gt;CleanDir curDir, fileExpr&lt;br /&gt;&lt;br /&gt;Sub CleanDir(Dir, Expr)&lt;br /&gt;    for each File in Dir.Files&lt;br /&gt; if Expr.test(File.Name) then&lt;br /&gt;     fso.DeleteFile(Dir.Name &amp; File.Name)&lt;br /&gt; end if&lt;br /&gt;    next&lt;br /&gt;    for each SubDir in Dir.SubFolders&lt;br /&gt; CleanDir SubDir, Expr&lt;br /&gt;    next&lt;br /&gt;end sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:+3;font-weight:bold"&gt;What I finally wound up doing:&lt;/span&gt;&lt;br /&gt;[In windows explorer]&lt;br /&gt;Right-click on directory-&gt;Search&lt;br /&gt;Click in "Enter all or part of the file name" text box, type ".class"&lt;br /&gt;Click "Search"&lt;br /&gt;Wait&lt;br /&gt;Hit Ctrl-A to select all&lt;br /&gt;Hit "Delete"&lt;br /&gt;Wait (for almost a full minute!  WTF?)&lt;br /&gt;Click close button.&lt;br /&gt;&lt;br /&gt;Apparently they're shooting for a consistent level of difficulty no matter what the task.  Replicate an enterprise database?  Five minutes.  Import it into Excel, flag outliers and print a formatted report?  Five minutes.  Delete the file after printing?  Five minutes...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-743292659659271416?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/743292659659271416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=743292659659271416&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/743292659659271416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/743292659659271416'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2009/01/windows-powershell-fail.html' title='Windows PowerShell: FAIL'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-6842922339451048800</id><published>2008-01-11T09:10:00.000-06:00</published><updated>2008-01-11T10:17:23.476-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Logitech Marble Mouse'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking XML'/><title type='text'>Logitech SetPoint == teh suxx0r!</title><content type='html'>&lt;span style="font-family:georgia;"&gt;I like Logitech's trackballs.  People were amazed that I would actually spend my own money for a Logitech trackball for my work computer when I had a perfectly good mouse.  At last count I had two of the original Trackman Marble, two corded and one cordless Trackman Marble Wheel, and a Marble Mouse.  I got the Marble Mouse because my thumb started to be tired if I worked on the computer too long at night (after working on one all day at the office).  So, I have the Marble Mouse at work.&lt;br /&gt;&lt;br /&gt;The Marble Mouse has two large buttons on either side, and it also has two small buttons just above the large ones.  Logitech's SetPoint utility can be used to map those to a keypress or action.  When I originally got the MM, I set it up so that the left small button paged down, and the right one paged up.  I used it this way for so long, it's become second nature.  So when they aren't mapped properly, it drives me nuts.&lt;br /&gt;&lt;br /&gt;I just started a new job, with a new computer.  I unpacked the MM and hooked it up and downloaded the latest SetPoint from the Logitech site.  Launched it up and went to customize the buttons and WTF?  I could map the left one to page up, but there was no page down listed.  I checked out the installation directory, and there was this XML file (&lt;span style="font-weight: bold;font-family:courier new;" &gt;default.xml&lt;/span&gt;) with all these "handler sets" configured.  It certainly looked like both page down and page up were supported, so why weren't they available?  Further digging showed a ton of configuration files in the &lt;span style="font-weight: bold;"&gt;All Users/Application Data/Logitect/SetPoint&lt;/span&gt; directory, but they all had helpful names like "1000001F".  So I STFW to see if anyone else had posted a solution to this.  Someone had written an "uberButton" utility that claimed to enable all features for all buttons, but it was an 8M executable, which I thought was a little much for my purposes.  So I poked around some more and found a directory named "&lt;span style="font-weight: bold;"&gt;Logitech/SetPoint&lt;/span&gt;" in my profile's application data directory.  I checked, and lo and behold, there were the current mappings in a file named &lt;span style="font-weight: bold;font-family:courier new;" &gt;user.xml&lt;/span&gt;.  They were references to the handler sets I had noticed in the &lt;span style="font-family:courier new;"&gt;default.xml&lt;/span&gt; file.  So I whipped out Vim and changed the references to point to the page up and down handlers.  There were also some application-specific "overrides" for these functions, so I set those up too.  Logged out and back in and voila!  The MouseMan rides (properly) again!&lt;br /&gt;&lt;br /&gt;Here's what the configuration file looks like:&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;Source&amp;gt;&lt;br /&gt;   &amp;lt;UserOptions&amp;gt;&lt;br /&gt;      &amp;lt;UserOption Name="BeepKeyboardSettings"&amp;gt;0&amp;lt;/UserOption&amp;gt;&lt;br /&gt;      &amp;lt;UserOption Name="ShowKeyboardPopupSettings"&amp;gt;1&amp;lt;/UserOption&amp;gt;&lt;br /&gt;      &amp;lt;UserOption Name="ShowKeyboardTraySettings"&amp;gt;1&amp;lt;/UserOption&amp;gt;&lt;br /&gt;      &amp;lt;UserOption Name="ShowTrayIcon"&amp;gt;1&amp;lt;/UserOption&amp;gt;&lt;br /&gt;      &amp;lt;UserOption Name="ShowKeyboardSettings"&amp;gt;1&amp;lt;/UserOption&amp;gt;&lt;br /&gt;   &amp;lt;/UserOptions&amp;gt;&lt;br /&gt;   &amp;lt;Apps&amp;gt;&lt;br /&gt;      &amp;lt;App&amp;gt;c:\\progra~1\\micros~2\\office11\\outlook.exe&amp;lt;/App&amp;gt;&lt;br /&gt;      &amp;lt;App&amp;gt;c:\\program files\\outlook express\\msimn.exe&amp;lt;/App&amp;gt;&lt;br /&gt;      &amp;lt;App&amp;gt;c:\\progra~1\\micros~2\\office11\\winword.exe&amp;lt;/App&amp;gt;&lt;br /&gt;      &amp;lt;App&amp;gt;c:\\progra~1\\micros~2\\office11\\powerpnt.exe&amp;lt;/App&amp;gt;&lt;br /&gt;      &amp;lt;App&amp;gt;c:\\progra~1\\micros~2\\office11\\excel.exe&amp;lt;/App&amp;gt;&lt;br /&gt;   &amp;lt;/Apps&amp;gt;&lt;br /&gt;   &amp;lt;Devices&amp;gt;&lt;br /&gt;      &amp;lt;Device DisplayName="Marble Mouse" Class="PointingDevice" Model="16777328" NumberOfButtons="4" ConnectionID=""&amp;gt;&lt;br /&gt;         &amp;lt;Param ACCELERATION="1" AIRACCELERATION="4" AirSpeedX="50" AirSpeedY="50"&lt;br /&gt;                   AppSpecific="0" ButtonSwapped="0"&lt;br /&gt;                   DefaultGameModeResolutionPresets=""&lt;br /&gt;                   DefaultGameModeResolutionPresetsY="" DistinctAirCursor="1"&lt;br /&gt;                   EnableCentering="1" GameDeviceSuggestGameMode="0"&lt;br /&gt;                   GameDeviceSuggestOS="0" GameModeButtonAddGame="0"&lt;br /&gt;                   GameModeButtonResDown="0" GameModeButtonResUp="0"&lt;br /&gt;                   GameModeButtonResUpWrap="0" GameModeKeepAcceleration="1"&lt;br /&gt;                   GameModeKeepKeypress="1" GameModeKeepOther="0"&lt;br /&gt;                   GameModeKeepRightLeft="1" GameModeKeepSpeed="1"&lt;br /&gt;                   GameModeNotification="0" GameModeResolutionNbPreset="0"&lt;br /&gt;                   GameModeResolutionPresets="" GameModeResolutionPresetsY=""&lt;br /&gt;                   GameParticipate="0" GameParticipateDefault="0" GamePowerMode="0"&lt;br /&gt;                   GameReportEnabled="1" GameReportRate="2" GameResIndex="2"&lt;br /&gt;                   GameUseAdvanced="0" GamingType="0" LowBatPercentLevel="5"&lt;br /&gt;                   MenuLocBottom="-1" MenuLocLeft="-1" MenuLocRight="-1"&lt;br /&gt;                   MenuLocTop="-1" MenuSize="0" OfficePowerMode="0"&lt;br /&gt;                   ShowButtonsPage="1" SmartMove="0" SpeedX="25" SpeedY="25"&lt;br /&gt;                   StromboliMice="0" TouchPadMice="0" TrackballMice="1" Trails="0"&lt;br /&gt;                   TrailsLength="0" UserBatteryMode="0" VScrollAcceleration="0"&lt;br /&gt;                   VScrollSpeed="0" VoIPClient="" smartshiftmode="0"/&amp;gt;&lt;br /&gt;         &amp;lt;Buttons&amp;gt;&lt;br /&gt;            &amp;lt;Button Number="1" Name="1"&amp;gt;&lt;br /&gt;               &amp;lt;Param IconLoc="" Type=""/&amp;gt;&lt;br /&gt;               &amp;lt;Trigger Class="ButtonPress"&amp;gt;&lt;br /&gt;                  &amp;lt;Param Button="1" FirstRepeatDelay="0" RepeatDelay="0"&lt;br /&gt;                                       Silent="1" Type="0"/&amp;gt;&lt;br /&gt;                  &amp;lt;TriggerState Name="ButtonDownUp" HandlerSet="LeftClick"&amp;gt;&lt;br /&gt;                     &amp;lt;Handler Class="MouseButton"&amp;gt;&lt;br /&gt;                        &amp;lt;Param ButtonName="PrimaryButton"/&amp;gt;&lt;br /&gt;                     &amp;lt;/Handler&amp;gt;&lt;br /&gt;                  &amp;lt;/TriggerState&amp;gt;&lt;br /&gt;               &amp;lt;/Trigger&amp;gt;&lt;br /&gt;            &amp;lt;/Button&amp;gt;&lt;br /&gt;            &amp;lt;Button Number="2" Name="2"&amp;gt;&lt;br /&gt;               &amp;lt;Param IconLoc="" Type=""/&amp;gt;&lt;br /&gt;               &amp;lt;Trigger Class="ButtonPress"&amp;gt;&lt;br /&gt;                  &amp;lt;Param Button="2" FirstRepeatDelay="0" RepeatDelay="0"&lt;br /&gt;                                       Silent="1" Type="0"/&amp;gt;&lt;br /&gt;                  &amp;lt;TriggerState Name="ButtonDownUp" HandlerSet="RightClick"&amp;gt;&lt;br /&gt;                     &amp;lt;Handler Class="MouseButton"&amp;gt;&lt;br /&gt;                        &amp;lt;Param ButtonName="SecondaryButton"/&amp;gt;&lt;br /&gt;                     &amp;lt;/Handler&amp;gt;&lt;br /&gt;                  &amp;lt;/TriggerState&amp;gt;&lt;br /&gt;               &amp;lt;/Trigger&amp;gt;&lt;br /&gt;            &amp;lt;/Button&amp;gt;&lt;br /&gt;            &amp;lt;Button Number="4" Name="3"&amp;gt;&lt;br /&gt;               &amp;lt;Param IconLoc="" Type=""/&amp;gt;&lt;span style="color:red"&gt;&lt;br /&gt;               &amp;lt;Trigger Class="ButtonPress"&amp;gt;&lt;br /&gt;                  &amp;lt;Param Button="4" FirstRepeatDelay="0" RepeatDelay="0"&lt;br /&gt;                                       Silent="0" Type="0"/&amp;gt;&lt;br /&gt;                  &amp;lt;TriggerState Name="ButtonDownUp" HandlerSet="PageDown"&amp;gt;&lt;br /&gt;                     &amp;lt;Handler Class="KeyStroke"&amp;gt;&lt;br /&gt;                        &amp;lt;Param KeyName="{PGDN}"/&amp;gt;&lt;br /&gt;                     &amp;lt;/Handler&amp;gt;&lt;br /&gt;                     &amp;lt;AppOverride App="mm.exe" HandlerSet="AppOverride_MindMapperBackward"/&amp;gt;&lt;br /&gt;                     &amp;lt;AppOverride App="winword.exe" HandlerSet="AppOverride_WordBackward"/&amp;gt;&lt;br /&gt;                     &amp;lt;AppOverride App="msimn.exe" HandlerSet="AppOverride_OutlookExpressBackward"/&amp;gt;&lt;br /&gt;                     &amp;lt;AppOverride App="outlook.exe" HandlerSet="AppOverride_OutlookBackward"/&amp;gt;&lt;br /&gt;                     &amp;lt;AppOverride App="powerpnt.exe" HandlerSet="AppOverride_PowerPointBackward"/&amp;gt;&lt;br /&gt;                     &amp;lt;AppOverride App="nlnotes.exe" HandlerSet="AppOverride_LotusNotesBackward"/&amp;gt;&lt;br /&gt;                     &amp;lt;AppOverride App="excel.exe" HandlerSet="AppOverride_ExcelBackward"/&amp;gt;&lt;br /&gt;                  &amp;lt;/TriggerState&amp;gt;&lt;br /&gt;               &amp;lt;/Trigger&amp;gt;&lt;/span&gt;&lt;br /&gt;            &amp;lt;/Button&amp;gt;&lt;br /&gt;            &amp;lt;Button Number="5" Name="4"&amp;gt;&lt;br /&gt;               &amp;lt;Param IconLoc="" Type=""/&amp;gt;&lt;br /&gt;               &amp;lt;Trigger Class="ButtonPress"&amp;gt;&lt;br /&gt;                  &amp;lt;Param Button="5" FirstRepeatDelay="0" RepeatDelay="0"&lt;br /&gt;                                       Silent="0" Type="0"/&amp;gt;&lt;span style="color:red"&gt;&lt;br /&gt;                  &amp;lt;TriggerState Name="ButtonDownUp" HandlerSet="PageUp"&amp;gt;&lt;br /&gt;                     &amp;lt;Handler Class="KeyStroke"&amp;gt;&lt;br /&gt;    &amp;lt;Param KeyName="{PGUP}"/&amp;gt;&lt;br /&gt;                     &amp;lt;/Handler&amp;gt;&lt;br /&gt;                     &amp;lt;AppOverride App="mm.exe" HandlerSet="AppOverride_MindMapperForward"/&amp;gt;&lt;br /&gt;                     &amp;lt;AppOverride App="winword.exe" HandlerSet="AppOverride_WordForward"/&amp;gt;&lt;br /&gt;                     &amp;lt;AppOverride App="msimn.exe" HandlerSet="AppOverride_OutlookExpressForward"/&amp;gt;&lt;br /&gt;                     &amp;lt;AppOverride App="outlook.exe" HandlerSet="AppOverride_OutlookForward"/&amp;gt;&lt;br /&gt;                     &amp;lt;AppOverride App="powerpnt.exe" HandlerSet="AppOverride_PowerPointForward"/&amp;gt;&lt;br /&gt;                     &amp;lt;AppOverride App="nlnotes.exe" HandlerSet="AppOverride_LotusNotesForward"/&amp;gt;&lt;br /&gt;                     &amp;lt;AppOverride App="excel.exe" HandlerSet="AppOverride_ExcelForward"/&amp;gt;&lt;br /&gt;                  &amp;lt;/TriggerState&amp;gt;&lt;/span&gt;&lt;br /&gt;               &amp;lt;/Trigger&amp;gt;&lt;br /&gt;            &amp;lt;/Button&amp;gt;&lt;br /&gt;         &amp;lt;/Buttons&amp;gt;&lt;br /&gt;      &amp;lt;/Device&amp;gt;&lt;br /&gt;   &amp;lt;/Devices&amp;gt;&lt;br /&gt;&amp;lt;/Source&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;You can browse through the default.xml file and check out what kind of functions are available.  This file appears to cover all Logitech keyboards and mice, so there are a lot of things available (zoom in/out, volume up/down, standby/restart/shutdown/logoff, VoIP w/Skype, browser next/previous/search...).  From the looks of it, you should also be able to create your own handler sets to handle app-specific functions, or even launch external programs.  So if you have to perform some obnoxious series of commands on a regular basis (like, say, FTP an HTML file to a server and launch a browser to look at it), you could script those and bind them to a mouse button!  Could be really handy, given a suitably bizarre set of circumstances...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-6842922339451048800?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/6842922339451048800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=6842922339451048800&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/6842922339451048800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/6842922339451048800'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2008/01/logitech-setpoint-teh-suxx0r.html' title='Logitech SetPoint == teh suxx0r!'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-2581715288690273360</id><published>2007-10-15T23:31:00.001-05:00</published><updated>2009-01-03T05:47:09.199-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='looking back'/><category scheme='http://www.blogger.com/atom/ns#' term='heavy sigh'/><title type='text'>Selling out -- Round II</title><content type='html'>For my first "real" job, I was hired out of college before I'd finished my degree.  I left to move to The Big City (Chicago) and to make triple what I'd been earning with two half-time computer programming jobs in Iowa.  It was rough, as move-to-the-big-city-from-Hicksville-and-get-a-real-job first jobs often are, but the company I worked for was good, I really liked the people I worked with, and I was both challenged to come up with innovative solutions and given the leeway (if not the budget) to implement whatever solution I deemed best.  However, the company was a non-profit, and I got discouraged whenever I talked with any of my old college friends who had likewise gotten real jobs and were making significantly more than I was.  So, after a couple of years I jumped ship, selling out for a 20% raise and a change of scenery (to Philadelphia).  The people at my new job were nice enough, but I was now a junior developer, and had to follow corporate standards and have a lot of my projects designed by some one else.  I missed my old job, but there was no way to go back.&lt;br /&gt;&lt;br /&gt;Fast forward to today.  I'm working for a company I like, with people I really get along with, and I have the freedom to implement whatever solutions I like using whatever technologies I like.  It's taken me a good four years of consulting and networking to get where I'm at, and I'm finally happy about my job for the first time in a long time.  So I probably should have expected the phone call.&lt;br /&gt;&lt;br /&gt;As it turns out, somebody (a recruiter) I'd worked with when I was consulting had kept a copy of my resume.  He'd never been able to place me because I was only looking for jobs in Lincoln, and there weren't many companies in Lincoln that used Java.  Now, it seems, one of the few that did was looking for new senior-level staff.  So, under the misapprehension that "it never hurts to talk", I sent an updated copy of my resume to the recruiter.  "Just to see what they had to say".  Well, what they said was basically "20+% pay raise, team technical lead, possible promotion to junior architecture position within a year".  So, I did what anyone who had been cast aside by his corporate overlord at some point in his career would do.  I jumped.  Sold out.  Turned my back on the folks who had given me the freedom to exercise my technical judgement and the support to make me successful at it, and headed on down the line.&lt;br /&gt;&lt;br /&gt;[Actually, I'm still on good terms with them, and agreed before I left to make myself available to provide whatever knowledge transfer I could once they hired my replacement, but still...]&lt;br /&gt;&lt;br /&gt;So now, here I am, with my big paycheck and my serious-sounding title (not quite "Lord of the Realm, Defender of the Faith, Emperor of the Enterprise Service Bus", but better than "Spec Programmer II") and I'm wondering how I'm going to fit in around here.  Everybody's very nice, and I've been able to contribute and I have projects and everything, but I still don't feel like I did the right thing.  I mean, I did (it wasn't just for the money, there were significant career-direction factors that played a part), it just doesn't feel that way yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-2581715288690273360?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/2581715288690273360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=2581715288690273360&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/2581715288690273360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/2581715288690273360'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2007/10/selling-out-round-ii.html' title='Selling out -- Round II'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-3314352146978502210</id><published>2007-06-13T12:22:00.000-05:00</published><updated>2007-08-14T12:17:02.884-05:00</updated><title type='text'>The JAXP hits!!--More--</title><content type='html'>I had a spare moment, so I thought I'd shoot myself in the foot.  Well, the shooting was unintentional, but it happens so often under these circumstances, you'd think I'd have figured out when to flinch by now.&lt;br /&gt;&lt;br /&gt;Standard near-end-of-project clean-up, replacing any remaining "err.printStackTrace()" calls with proper logging statements and other tidying-up.  I had in my notes "Add input XML validation".  We hadn't had any problems with XML formatting before, but it seemed like a good thing to have when we went into production (can you hear the warning siren going off?).  So I cons up a quick XMLValidator class with an inputIsValid() method and get that working.  Plug it into the project and test all the various inputs we have, everything is happy, so I deploy it to our test server and have our external development partner have a go at it.&lt;br /&gt;&lt;br /&gt;On the first run, he reports "Hey, it gives me a validation error."  So we check, and sure enough, he's got one of the attributes misspelled.  We fix that and re-submit and he gets another one.  We check, and find another one.  Fix and re-submit, get another validation failure.  Only this time, we can't figure out why.  The error message he's getting is "cvc-elt.1: Cannot find the definition of 'SchoolInfo'" (which is one of the elements in our schema).  We can't find the problem, so I cut the XML from the server log and submit it on my test system where I can step through the validation with the debugger.  Lo and behold, no problem! :/&lt;br /&gt;&lt;br /&gt;So what's different between dev and test?  Same app server, same jar file, whoops!  I'm running Java 1.5 on my dev server, but the test server is 1.6 (why?) .  Poke around a bit (OK, a lot) and find out that J2SE1.5 uses JAXP 1.3, while 1.6 uses JAXP1.4.  Hmmm, so what's the difference?  Well, it's not exactly documented anywhere, but when validating under JAXP1.4, you have to explicitly make the DocumentBuilderFactory (from which you create the parser that creates the document that you pass to the validator...) namespace-aware, and tell it that the resulting parser will be used for validation.  Which makes sense, I guess, it's just that all this (and so much more!) is included with the JDK, and there's no real migration guide or set of comprehensive release notes that spells out these changes.  And let's face it, if there were, it would be so big nobody would read it anyway.  It &lt;span style="font-style: italic;"&gt;would&lt;/span&gt; be nice if they could provide total backwards compatibility, but I know that's not always possible.&lt;br /&gt;&lt;br /&gt;I dunno, I finally got Ruby 1.8.5 installed, and got Rails set up, and I'm working through &lt;a href="http://www.pragmaticprogrammer.com/titles/rails2/"&gt;Dave Thomas's Rails book&lt;/a&gt;, and I'm finding it's much quicker to develop in Rails than JEE.  Of course, I haven't done anything much in Rails yet (and I don't know Ruby &lt;em&gt;at all&lt;/em&gt;), but I've got a project that I had to shelve because it was taking too long to write in Java, and I'm going to dust off those notes and see if I can get it done in Ruby.  If so, then I may have to roll out some Ruby utilities here at the orifice and see if I can get them entrenched.  From what I can see, .NET isn't going to make web development any quicker than JEE, so I might as well push for something that is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-3314352146978502210?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/3314352146978502210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=3314352146978502210&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/3314352146978502210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/3314352146978502210'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2007/06/jaxp-hits-more.html' title='The JAXP hits!!--More--'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-7659351614583088190</id><published>2007-01-16T17:13:00.000-06:00</published><updated>2007-04-16T16:31:34.242-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='app server'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><category scheme='http://www.blogger.com/atom/ns#' term='JAX-RPC'/><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><title type='text'>Back from Web Services Hell</title><content type='html'>Well, what a long, strange, nasty, standards-ridden trip it's been!  I started working on my WS project, using NetBeans and the Sun app server (aka the &lt;a href="https://glassfish.dev.java.net/"&gt;Glassfish Project&lt;/a&gt;).  Everything's fine, I'm able to create a web service, deploy it on the server, create a WSDL file, create a test client, everything happy little web-service developers do.  Obviously, things were going too well.  So I get ready to make the service available to a third-party company we're working with. Since I can't just stick my development machine outside the firewall, I find out where we deploy our other web services.  Well, it turns out all of our other web services are written in either .NET (our "approved" development platform) or LotusScript.  Obviously, neither of these were going to work.  However, we had a couple of legacy apps that were written in Java, so there was an app server available, it just wasn't accessible to outside users.  I was assured that opening a hole in the firewall wouldn't be a problem, so I should just go ahead and test my service and once it was ready they'd open it up.  OK, sounds good, I thought, and handed over a copy of my WAR file.  "Oh, we can't use that."  Um, what? "We need an EAR file."  My blinking was met with a blank stare.  OK, fine, whatever, it is but the work of a moment to create an EAR file that has my WAR file in it.  I hand it over to the powers that be (who are really pretty good developers, but not sysadmins) and ask that they let me know when it's been deployed.&lt;br /&gt;&lt;br /&gt;A couple of minutes later, I get a log file.   A big one.&lt;br /&gt;&lt;br /&gt;Seems our app server only supports Java up to version 1.4.2 (yeah, three guesses which one &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; is...), and I made heavy use of JAX-WS (which uses JSR-181 annotations, all of which are part of Java 1.5).  Being the clever, resourceful person I am, I immediately went bitching to my manager.  Turns out that even the latest version of The App Server That Time Forgot didn't support Java 1.5.  However, as soon as I started looking, I discovered that they were releasing a &lt;span style="font-style: italic;"&gt;new &lt;/span&gt;new version, which allegedly did support 1.5.  So I downloaded it and immediately discovered that its support was pretty much limited to running 1.4.2 apps on a 1.5 JVM ("No JEE 5 support for you!"). &lt;br /&gt;&lt;br /&gt;So I got a copy of the popular open-source IDE that the app server company bases its tools on.  Turns out the IDE doesn't have a "server profile" for the &lt;span style="font-style: italic;"&gt;new&lt;/span&gt; new app server version, so it wasn't able to talk to it (even though it supported the new release, and the &lt;span style="font-style: italic;"&gt;new&lt;/span&gt; new version was a minor release of that).  So I got the "toolkit" that was supposed to work with the &lt;span style="font-style: italic;"&gt;new&lt;/span&gt; new version.  Turns out it didn't support JAX-WS.  So I got the Web Services clip-on/extension/module.  Turns out it was only  &lt;span style="font-style: italic;"&gt;mostly&lt;/span&gt; compatible with JAX-WS (full compatibility coming RSN).  It further turns out that once the Web Services c/e/m was installed, the toolkit was only &lt;span style="font-style: italic;"&gt;marginally&lt;/span&gt; compatible with the app server.&lt;br /&gt;&lt;br /&gt;So I fudged and poked and tweaked and Googled and grepped and read and read and read.  I loaded updates, I loaded patches, I got beta code, I got alpha code, I got third-party code.  I got add-ons and clip-ons and extensions and modules.  Finally, I caught myself humming "One Piece at at Time" by Johnny Cash, and that's when I decided it wasn't going to work.&lt;br /&gt;&lt;br /&gt;Hmmmm, what to do, what to do...  Do I scrap my current implementation and step back to those golden days of yesteryear and rewrite my code using JAX-RPC interface semantics?  Or do I take that idle Oracle server I built and put the Sun app server on it and have them stick that out in the open?  A quick conversation with my VP and it all started falling into place.  It boiled down to the fact that I was proposing we use hardware we already owned, so we didn't have to coordinate with anyone else, and it was an already-proven solution.  I was a  month past my original "I could probably write this in a week or so" estimate, so expediency ruled the day and we did the deed.  I was able to finish the work quickly once that was done (Total time creating web service with four methods: 2.5 wks.  Total time trying to figure out how to make it work on app server X: 3 wks.).&lt;br /&gt;&lt;br /&gt;I just deployed the service yesterday, and I'm waiting for the "We can't use this — it's just what we asked for!" call.  Guess I'll just cement the curse by writing up the documentation...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-7659351614583088190?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/7659351614583088190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=7659351614583088190&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/7659351614583088190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/7659351614583088190'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2007/01/back-from-web-services-hell.html' title='Back from Web Services Hell'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-116129779768453491</id><published>2006-10-19T17:00:00.000-05:00</published><updated>2006-10-19T17:46:11.826-05:00</updated><title type='text'>XSL FTW!</title><content type='html'>Just got a new project at work.  We need to interface to another company's information system, and they want us to use web services.  OK, cool, I'm all about the SOA (or will be once I do a little research), let's see what they've got.  Interface specs, XML-RPC, all looks good until I get to the sample data they're sending.  All their data is expressed as XML &lt;span style="font-style: italic;"&gt;attributes&lt;/span&gt;.  I know there's no hard consensus on elements vs. attributes, but I personally hold to the idea that attributes are for meta-data, and data itself should be in elements.  I tried to ignore it, but it kept bugging me.  I know that for the project I'm on, I'll just wind up working with what they give me, and suck it up.  But I deperately wanted to convert it.  Hey, it should be easy with XSL, right?  Well, I suppose if you actually &lt;span style="font-style: italic;"&gt;knew&lt;/span&gt; XSL, it probably would be.  It took me a couple of hours to figure out the proper incantations of selectors and elements to get it done, but finally I did.  And just on the off chance there's some other attribute-hater out there, here it is (sorry about the formatting!):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;xsl:stylesheet xsl="http://www.w3.org/1999/XSL/Transform"&gt;&amp;lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;xsl:template match="*"&amp;gt;&lt;br /&gt;     &amp;lt;xsl:variable name="tagName" select="name()"/&amp;gt;&lt;br /&gt;     &amp;lt;xsl:element name="{$tagName}"&amp;gt;&lt;br /&gt;         &amp;lt;xsl:text&amp;gt;&lt;br /&gt;         &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;         &amp;lt;xsl:for-each select="@*"&amp;gt;&lt;br /&gt;         &amp;lt;xsl:variable name="tagName" select="name()"/&amp;gt;&lt;br /&gt;         &amp;lt;xsl:element name="{$tagName}"&amp;gt;&amp;lt;xsl:value-of select="."/&amp;gt;&amp;lt;/xsl:element&amp;gt;&lt;br /&gt;         &amp;lt;xsl:text&amp;gt;&lt;br /&gt;         &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;         &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;         &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;     &amp;lt;/xsl:element&amp;gt;&lt;br /&gt;     &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;xsl:template match="@*|processing-instruction()|comment()"&amp;gt;&lt;br /&gt;      &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;    &amp;lt;xsl:apply-templates&lt;br /&gt;         select="@*|node()|processing-instruction()|comment()"/&amp;gt;&lt;br /&gt;      &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/xsl:stylesheet&gt;&lt;/span&gt;&lt;/span&gt;Invoke it with Xalan (or your XSLT processor of choice).  I use the command "java org.apache.xalan.xslt.Process -in stuff.xml -xsl cvtAttrs.xsl" (where the script is in 'cvtAttrs.xsl', of course).&lt;br /&gt;&lt;br /&gt;Share and enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-116129779768453491?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/116129779768453491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=116129779768453491&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/116129779768453491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/116129779768453491'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2006/10/xsl-ftw.html' title='XSL FTW!'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-115375616572332959</id><published>2006-07-24T10:02:00.000-05:00</published><updated>2006-07-24T10:49:25.786-05:00</updated><title type='text'>Hybrid Opinion</title><content type='html'>Well, just hit a new high in the Honda: 53.7 MPG over 550 miles.  These were all in-town miles, average speed was probably somewhere around 30-35.  Not bad, all things considered.  For some reason, my mileage always seems to improve in the summer.  I assume it's got something to do with "summer blend" gas, either more or less ethanol, I don't know.  I do know that I'm hard-pressed to break 47 during the winter.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Random thoughts on the hybrid debate:&lt;/h3&gt;I've been seeing a fair amount of commentary on how economical hybrids are, with a lot of people opining that you'll never make back the "premium" you pay to buy a hybrid.  I've read analyses that show that it takes longer to recoup the additional money spent to buy a hybrid than that average driver owns a car.  That the published numbers don't reflect the actual mileage you'll get.  Well, that just doesn't seem to be the case, at least here at Chez Random (which has a three-car garage).&lt;br /&gt;&lt;br /&gt;First, the hybrid wasn't really more expensive than the non-hybrid.  Yes, it was more expensive than a base-model Civic, but it also comes with a lot of features you didn't get on the base model: anti-lock brakes, side-impact air bags, and an AM/FM/CD radio with subwoofer are the ones that jump immediately to mind.  Add it all up, and you're close to the starting price for the high-end model.  One thing I have to mention, though, is that you really don't have any choice on the hybrid options: I think the only choices I had were the color, whether I wanted a CD changer in the trunk and whether I wanted splash guards.  No sunroof, no electric seats, no leather interior, nada.  Oh, I did get some nifty mag wheels, but only because they're a special lightweight alloy that contributed to the gas mileage.  Anyway, the point is, the price was right in line for a similarly-configured gas-only model, so I don't think I paid any more for the car (certainly not after the hybrid-purchase tax rebates, which totalled a cool couple thousand).&lt;br /&gt;&lt;br /&gt;And mileage not making the published figures?  Um, frankly I can't remember what the advertised mileage was on the Civic, but I doubt it was much over 50 (I seem to recall that the Insight, Honda's cramped two-seat serious hybrid, gets about 60, so I'm sure the 4-seat, 4-door Civic gets less than that).  And that's about what I'm getting, so there's no problem there.  I do know that when I gas up, it's considerably cheaper than filling either of the other two cars (which can break $50 with today's prices).  Of course, a big part of that is the Civic's tank size (about twelve gallons), which is about two-thirds the size of the tanks in the other cars.  But if I drive either of the other two daily, I wind up filling them about once a week.  I fill they Honda maybe once a &lt;span style="font-style: italic;"&gt;month&lt;/span&gt;, and then it's more of an inconvenience than a trial.&lt;br /&gt;&lt;br /&gt;I am a bit worried about resale value.  The battery pack is supposed to last for about eight years, and cost around $3000 to replace (2004 prices).  So if I sell it after seven years, I expect the price drop to be considerable.  Hopefully, this won't be a problem, since I tend to keep cars for awhile (my other car is an '87), and I bought the extended warranty expressly because it will cover the battery pack replacement.  But if for some reason I do have to sell it, then that may be an issue.  Or not, depending on how much the battery packs cost by then.  I will be surprised if they haven't come up with an idea or two on making it more economical, but I also won't be surprised if the gummint hasn't slapped some kind of disposal or recycling fee on the new packs.  If worst comes to worst, I hear that the pack is really just a couple hundred rechargable D batteries, maybe I'll just fire up the ol' soldering iron and fix it myself!  Of course, a couple hundred rechargable D batteries will cost a bit, maybe I should start collecting them now...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-115375616572332959?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/115375616572332959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=115375616572332959&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/115375616572332959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/115375616572332959'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2006/07/hybrid-opinion.html' title='Hybrid Opinion'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-115142929256818931</id><published>2006-06-27T11:57:00.000-05:00</published><updated>2006-06-27T12:28:12.653-05:00</updated><title type='text'>Party like it's 1972!</title><content type='html'>Dick Nixon's in the White House, inflation's threatening to go double-digit, and you've got a deadline on that payroll-processing code.  You head to the office, sit down at your VT-100 (no more VT-52, w00t!) and log in to the development PDP-11.  In a few seconds you're staring at the familiar command prompt of V7 Unix...&lt;br /&gt;&lt;br /&gt;How can you relive those thrilling days of yesteryear?  Can't help with the White House or the economy, but I can put you in the driver's seat of your own V7 Unix machine running on a simulated PDP-11.&lt;br /&gt;&lt;br /&gt;First, get a copy of the &lt;a href="http://simh.trailing-edge.com/"&gt;SIMH simulator&lt;/a&gt; from Trailing Edge Technologies.  Under "Software Kits to run on SIMH", grab the PDP-11 Unix V7 file.  Extract the files to the same directory you loaded the simulators into.&lt;br /&gt;&lt;br /&gt;Once you've got everything loaded, fire up the PDP-11 simulator and enter the following commands:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;sim&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;set cpu u18&lt;/span&gt;&lt;br /&gt;sim&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;set rl0 RL02&lt;/span&gt;&lt;br /&gt;sim&gt; &lt;span style="color: rgb(102, 51, 255);"&gt;at rl0 unix_v7_rl.dsk&lt;/span&gt;&lt;br /&gt;sim&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;set rl1 RL02&lt;/span&gt;&lt;br /&gt;sim&gt; &lt;span style="color: rgb(102, 51, 255);"&gt;at rl1 unix_r1_diska.dsk&lt;/span&gt;&lt;br /&gt;RL creating new file&lt;br /&gt;Create bad block table on last track? [N] &lt;span style="color: rgb(102, 51, 255);"&gt;&lt;cr&gt;&lt;/span&gt;&lt;br /&gt;sim&gt; &lt;span style="color: rgb(102, 51, 255);"&gt;boot rl0&lt;/span&gt;&lt;br /&gt;@&lt;span style="color: rgb(102, 51, 255);"&gt;boot&lt;/span&gt;&lt;br /&gt;New Boot, known devices are hp ht rk rl rp rm vt&lt;br /&gt;: &lt;span style="color: rgb(102, 51, 255);"&gt;rl(0,0)rl2unix&lt;/span&gt;&lt;br /&gt;mem = 177856&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;And there you are!  PDP-11 Unix V7 in single-user mode.  Creating additional terminals and bringing the system up in multi-user mode is left as an exercise for the reader.&lt;br /&gt;&lt;br /&gt;I realize this information is probably only interesting to old Unix geeks, but I wanted to put it out there because I had to do a lot of digging to find out how to make this work.  I've used V[67] Unix, but I've never had to boot it, and I've certainly never had to configure a PDP-11 before.  I figure a lot of people are in a similar situation, and hopefully this information will help someone.&lt;br /&gt;&lt;br /&gt;Now, all I need to do is get VMS up and running on the simulated VAX and I'll be a happy camper!  Although this emulator seems to emulate the speed of the old hardware as well, so I may not be terribly happy with the result...&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-115142929256818931?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/115142929256818931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=115142929256818931&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/115142929256818931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/115142929256818931'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2006/06/party-like-its-1972.html' title='Party like it&apos;s 1972!'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-114658658794302819</id><published>2006-05-02T11:00:00.000-05:00</published><updated>2006-05-02T11:16:29.076-05:00</updated><title type='text'>Le plus ca change...</title><content type='html'>Quick update: left the State, took up with &lt;a href="http://www.factsmgt.com"&gt;FACTS Management&lt;/a&gt; , now doing "data integration".  Basically I'm in charge of making sure clients (schools) can seamlessly connect to our systems and we can share data with them.  Right now I'm attempting to install Oracle 10gR2 on a scavenged box (dual 3Ghz Xeons w/2.5G) that I've put Solaris 10 on.  "Standing up in a canoe", as the joke goes.&lt;br /&gt;&lt;br /&gt;It's a good company, and getting better (they were just purchased by &lt;a href="http://www.nelnet.net/"&gt;Nelnet&lt;/a&gt;).  And it's soooo much nicer than working for the State.  No offense, Staties, but the private sector has bigger and better toys.  I'm currently on a three-month contract-to-hire, but just this morning my boss asked if I was happy, and when I indicated I was he said he was going to see about converting me early.  Nelnet has some good benefits, so things may get even better.  Have to see, have to see....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-114658658794302819?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/114658658794302819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=114658658794302819&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/114658658794302819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/114658658794302819'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2006/05/le-plus-ca-change.html' title='Le plus ca change...'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-114176735398205636</id><published>2006-03-07T15:13:00.000-06:00</published><updated>2006-05-19T11:54:37.600-05:00</updated><title type='text'>Suck-a-doodle doo</title><content type='html'>&amp;lt;whine&amp;gt;Had to do a complete reinstall of Solaris which wiped out my user partition and I lost all my stored email, my resume and web site&amp;lt;/whine&amp;gt;&lt;br /&gt;&lt;br /&gt;Now that I've got that off my chest, I just wanted to share a very interesting idea I ran across today.  It's a post on Dave Thomas' blog (now a &lt;a href="http://wiki.pragprog.com/cgi-bin/wiki.cgi/CodeKatas"&gt;wiki entry&lt;/a&gt;) talking about practicing.  Practice seems to be more of a, well, a practice with people who have vocations requiring physicals skills (musicians, athletes, etc.).  But shouldn't programmers practice too?  Dave says yes, and after reading what he has to say, I'm inclined to agree.  Especially for those of us who aren't in "agile" shops, and who perhaps spend two months designing, six weeks coding and two months testing.   After spending the last couple of years honing my skills with design patterns, UML and other high-level concerns, Dave's katas have brought me "back down to earth", with their focus on the basics: what is the best data structure to use, how do I decide what's the best algorithm for this situation, is it better to write some code or just invoke a system utility?&lt;br /&gt;&lt;br /&gt;Maybe it's just me (stuck in the middle of the "two months of testing" leg of the cycle), but thinking about these aspects of system design really brought home the essence of development: deliver a system that solves someone's problem(s).  Not that I haven't been doing that, but lately I've been more focused on delivering solutions using "industry best practices" than I have with actually &lt;span style="font-style: italic;"&gt;solving the problem&lt;/span&gt;.  I'll defend myself by saying that the design artifacts are, on my current project, a deliverable, and so I spent a large amount of time making sure that I followed The Process.  But in the end, it's the solution that matters, and I wonder if I might not have been led, perhaps by hype, somewhat astray.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-114176735398205636?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/114176735398205636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=114176735398205636&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/114176735398205636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/114176735398205636'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2006/03/suck-doodle-doo.html' title='Suck-a-doodle doo'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-114071510910407815</id><published>2006-02-23T10:44:00.001-06:00</published><updated>2006-02-23T11:18:29.243-06:00</updated><title type='text'>Solaris upgrades</title><content type='html'>Well, the blush is off the rose, Solaris-wise.  I have spent the last couple of nights whacking my Ultra 20 with a blunt installer, to little effect.  First, I installed the Ultra 20 1.2 supplemental update (updates the BIOS and installed new drivers for the built-in hardware).  That went all right, but when I rebooted I couldn't get the network interface working.  I quickly figured out it was something with DNS (I could ping my router and print server just fine, but anything not in /etc/hosts was unreachable).  So after a couple of hours tweaking this and poking that and whacking the other, I found out that Solaris doesn't like the DNS server that RoadRunner provides.  It's there, and my wife's Windows box doesn't seem to have a problem with it, but Solaris won't talk to it.  Fortunately, I have an alternate public DNS server configured, but unfortunately Solaris won't use it.  For some reason, it thinks that the RR server sends it a valid 'domain not found' response.  Once it gets a response from a server, it uses that server for all further requests.  I finally used nslookup(1) to query my alternate name server, and then Solaris started to use it.  Chalk up two hours to "learning experience".&lt;br /&gt;&lt;br /&gt;Last night, glutton for punishment that I am, I installed the new Solaris Update utility.  It analyzed my system, then ran off to Sun to find out what I needed.  57 patches!  So I let it download them all and install what it could.  Then it said I needed to reboot to install the rest.  Since I'd already blown my uptime (148 days), I didn't think it was any big deal.  So I reboot, and the box says it's in system maintenance mode and starts installing patches.  It installs a bunch, then seems to just sit there.  It looks like all the patches have been successfully installed, so I go ahead and reboot.  When the system comes back up, it's a &lt;span style="font-style: italic;"&gt;lot&lt;/span&gt; different: it's now using the Grub boot loader, and no longer shows the boot messages as it comes up.  It also tells me that it can't initialize nge0 (the network interface), which I'm not looking forward to digging into again.  Then, it tells me to wait while the X server starts, followed in a few seconds by the notice that the X server cannot be started.  Not Good.  I've got a job application to fill out, and my email to check, I really can't be wasting hours sorting out some system misconfiguration issue.  So I scarf the wife's laptop and go trolling for clues.  While dredging through the Sun "Miscellaneous hardware" forum (where all the workstation issues go), I find a mention of a Yahoo! newsgroup dedicated to x86 Solaris.  So I hie myself over there, and lo and behold, someone else has reported this same issue!  Unfortunately, there was no resolution posted, but someone did point out there was a utility (kdmconfig) that would allow you to switch to the Sun X server (Solaris 10 uses the X.org server by default).  I did that, and was able to get X up (albeit at 1024x768 instead of the 1600x1200 I favor).  So I got back into the patch tool and backed out the two patches that looked most likely to be responsible.  When I rebooted, the Sun X server started, so I went in and set the default back to the X.org server.  Which then failed to start again.  I checked the log file, and it seems to indicate that the nVidia driver (I am using an NVS280 card) was found and initialized itself, but it can't find or initialize the graphics card.  So I switched back to the Sun server and resolved to call Sun Support.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-114071510910407815?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/114071510910407815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=114071510910407815&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/114071510910407815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/114071510910407815'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2006/02/solaris-upgrades_23.html' title='Solaris upgrades'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-113933605531379474</id><published>2006-02-07T11:47:00.000-06:00</published><updated>2006-02-14T10:57:27.590-06:00</updated><title type='text'>Hack of the day</title><content type='html'>Well, this hasn't happened in a while.  I had an idea, wrote it up in vi, then compiled and ran it, and it compiled cleanly and worked the first time!  Obviously it's a trivial example, but  it's kind of neat, so I thought I'd share.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Background:&lt;/span&gt; On my current project, we have some boilerplate logging code that has to go into every method.  It looks something like this:&lt;br /&gt;   &lt;span style="font-family:courier new;"&gt;logEvent("Module", ErrorConstants.EVENT_START, "Method name");&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;I got a comment on a code review that I should be defining string constants for my module and method names, since string constants should never be directly used in code (yes, that's the kind of shop we have here...)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The idea:&lt;/span&gt; I had had another idea regarding allocation tracing, and I remember that (since Java 1.4) you could get access to the call stack via a Throwable.  A quick glance at the JavaDocs showed that you can get both the class and method names from the stack trace.  This led to the quick&amp;dirty code shown here:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   private String getMethodName() {&lt;br /&gt;       Throwable t = new Throwable();&lt;br /&gt;       StackTraceElement[] ste = t.getStackTrace();&lt;br /&gt;&lt;br /&gt;       String methodName = ste[1].getMethodName();&lt;br /&gt;&lt;br /&gt;       return methodName;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   private String getModuleName() {&lt;br /&gt;       Throwable t = new Throwable();&lt;br /&gt;       StackTraceElement[] ste = t.getStackTrace();&lt;br /&gt;&lt;br /&gt;       String moduleName = ste[1].getClassName();&lt;br /&gt;&lt;br /&gt;       return moduleName;&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Quick &amp; dirty == no JavaDoc or comments.  Could be worse, I could have written it all on one line!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Denoumont:&lt;/span&gt; "Warning: may contain code which is too intense for young programmers".  Turns our my solution (replacing all hard-coded strings with dynamic code to obtain the module and method names) was too...something for my team.  They never really said what, just that they didn't think it was a good idea.  This is a CMM Level 5 crew, and they don't really accept outside ideas well.  Oh well, it'll go into my bag of tricks, and I'm sure I'll find a use for it on another project.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-113933605531379474?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/113933605531379474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=113933605531379474&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/113933605531379474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/113933605531379474'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2006/02/hack-of-day.html' title='Hack of the day'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-113925089848284678</id><published>2006-02-06T12:29:00.000-06:00</published><updated>2006-02-06T12:37:14.756-06:00</updated><title type='text'>Parse error: brain halted</title><content type='html'>&lt;span style="font-family: georgia;"&gt;My daughter got me the other day.  We were poking around in the library downstairs, and she found a shelf of books that we had picked up at the Lincoln Public Library's annual shelf-clearing sale.  They were all books that looked nice, but that we thought she wasn't old enough for yet (ratio of pictures to text wasn't high enough).  Anyway, she picked up a copy of &lt;/span&gt;&lt;span style="font-style: italic; font-family: georgia;"&gt;Curious George Rides a Bike&lt;/span&gt;&lt;span style="font-family: georgia;"&gt;.  I read her the title, and she asked, "Daddy, what's curious mean?"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;My brain vapor-locked for a second.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;Then I explained, and we read the book, and she enjoyed it.  So then we spent the next half-hour or so reviewing the books on the "not-yet" shelf and picked out several to take upstairs to put in her library.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-113925089848284678?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/113925089848284678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=113925089848284678&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/113925089848284678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/113925089848284678'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2006/02/parse-error-brain-halted.html' title='Parse error: brain halted'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-113805448428566061</id><published>2006-01-23T16:01:00.000-06:00</published><updated>2006-01-23T16:16:59.896-06:00</updated><title type='text'>On the road again...</title><content type='html'>&lt;span style="font-family: georgia;"&gt;Well, what an enchanting winter it's been!  Took a trip out to LA (cold, rainy, not at all as advertised), then out to Philadelpha for Thanksgiving with Fran's family.  Then a quick trip out to Pueblo to see my folks as my Dad had, not emergency, but certainly short-notice heart surgery (he had a cardio stress test, and they stopped him about ten minutes into it and had him go straight up to pre-op).  So, we were pretty much travelled out come Christmas, so we spent it quietly at home.  I did the traditional stay-up-late-assembling-toys Dad thing (since Fran had done the traditional go-all-out-buying-toys-for-the-only-child thing), which was cool.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;My big post-holiday buzz has been getting the 944 back on the road again.  It had been languishing in the garage with a stuck (down, of course) drivers side window, and I was going to fix it in my Copious Free Time (SM).  Then Fran's car developed an oil leak.  Turned out to be gaskets that I didn't have the tools, time or shop manuals to fix.  So, we bundled it off to the Audi dealer in Omaha.  We took it in on a Saturday and couldn't pick it up until the following Monday, which meant that Fran would have to take the Honda to work and I would have to get the Porsche running.  So I spent Sunday evening tearing the door apart and fixing the window (turned out to be a bad window switch) and charging the battery and installing the car seat for Gabrielle.  She loves it (she gets to sit in the front seat), and I get to drive like I mean it again.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-113805448428566061?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/113805448428566061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=113805448428566061&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/113805448428566061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/113805448428566061'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2006/01/on-road-again.html' title='On the road again...'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-113078478420755110</id><published>2005-10-31T12:41:00.000-06:00</published><updated>2005-10-31T12:53:04.223-06:00</updated><title type='text'>New toy</title><content type='html'>&lt;span style="font-family: georgia;"&gt;Well, such a deal!  For my birthday, my lovely wife got me an iPod.  Black, 30G, the new one that does video.  It's really cool!  Yeah, I know I'm pretty late to this particular party, but I've invested a lot into some good stereo gear over the years, so I tend to listen to music at home and in the car, not *everywhere* that I go.  Oh sure, I've wished I'd had something I could listen to while mowing the lawn and stuff, but not so often that I've ever actually gone out and purchased something.&lt;br /&gt;&lt;br /&gt;I've been watching the iPod Phenomenon, as I'm sure all geeks have, and I've been really amazed at the speed and depth of its penetration.  I get the occasional overpriviliged Yuppie catalog, and they're all loaded with iPod accessories -- FM transmitters to play your tunes in the car, docks and speakers and holsters and armbands and cases and lanyards and on and on.  I usually don't glance much at these, but yesterday I saw that Klipsch makes an iPod dock, and now I want one.  It's too expensive, but it looks like a nice rig, and if it really is made to Klipsch standards, then it could be pretty sweet.&lt;br /&gt;&lt;br /&gt;Oddly enough, this is really our second iPod.  I actually got one (a pink Mini) for my wife the last time we were going on vacation, but she opined that she wouldn't use it that much, and that we could do something better with the money.  Yesterday, after playing with mine, she admitted that she kind of regrets sending it back.  Her birthday's coming up in a month or so, I wonder...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-113078478420755110?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/113078478420755110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=113078478420755110&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/113078478420755110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/113078478420755110'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2005/10/new-toy.html' title='New toy'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-113018321186179818</id><published>2005-10-24T14:24:00.000-05:00</published><updated>2005-10-24T15:05:38.866-05:00</updated><title type='text'>Ruby on Rails: Um, yeah, maybe</title><content type='html'>&lt;span style="font-family: georgia;"&gt;Well, I was going to plunk down some hard-earned study time to finally get my hands dirty and learn about &lt;/span&gt;&lt;a style="font-family: georgia;" href="http://www.springframework.org/"&gt;Spring&lt;/a&gt;&lt;span style="font-family: georgia;"&gt; when I got sidetracked.  A lot of the Java news sites were carrying stories about this new technology &lt;/span&gt;&lt;a style="font-family: georgia;" href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;&lt;span style="font-family: georgia;"&gt;. I remember looking at Ruby a few years ago and thinking it looked like a neat language, but I never really spent any time with it. Now it's got this new Active Record concept and people are claiming impressive productivity gains, so I thought I'd bite and check it out in earnest.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;So. I get my box all set up (build &amp; install Ruby 1.8.3, build &amp;amp; install PostgreSQL 8.0.4 [in 2m15s!], download RubyGems so I can download Rails, download Rails). Now to find a quick tutorial that will get me up and running....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;Well, given that I'm on a Solaris box now, there's no Quicktime for me, so the on-line "learn Ruby in 15 min" video is out. I got a copy of the Ruby LRM, which is pretty good, but it's not the quick tutorial I was looking for. And as far as I can tell, there isn't one. What I had in mind was something like the Struts sample: copy it to the Tomcat webapp directory, let it deploy, then browse it and its source code. I can't even find an example of a web page with Ruby embedded in it! Maybe I just don't know where to look, but it shouldn't be that hard. Oh, and mod_ruby refuses to build for me (something about "gcc: unknows flag -Xa, unknown language idlfull", something like that). I'm building for Apache 2, so maybe that build wasn't tested. I only tried the latest version, so maybe I should drop back one or two (I was using something like 1.2.4, which just came out, it didn't look like much had changed in the last couple of versions). When I find the time, yeah, maybe....&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-113018321186179818?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/113018321186179818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=113018321186179818&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/113018321186179818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/113018321186179818'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2005/10/ruby-on-rails-um-yeah-maybe.html' title='Ruby on Rails: Um, yeah, maybe'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-112774431028652012</id><published>2005-09-26T09:03:00.000-05:00</published><updated>2005-09-26T09:18:30.436-05:00</updated><title type='text'>Now It Can Be Told</title><content type='html'>&lt;span style="font-family: georgia;"&gt;Well, after much wailing and gnashing of teeth (why does useradd(1) try to create home directories under /home if Solaris reserves that for mount points?), I now have my shiny new Ultra 20 up and running.  I got a user account added so I don't have to run as root, and I've at least looked at the included software (Java Studio Enterprise and Java Studio Creator).  Haven't actually had enough time to create a project yet, but I think I've got everything else squared away enough so I can focus on Java develoment.  The box comes pre-loaded with JDK 1.5.0, which is nice.  I'm not sure if it's the 64-bit or 32-bit version, though.&lt;br /&gt;&lt;br /&gt;Interestingly, the box seems to get faster as I use it.  When I first started playing with it, it seemed to take forever for a new terminal window to pop up.  Now it's (subjectively) quicker.  The CDE seemed definitely quicker than GNOME, but that's not too surprising given that it's been out longer (I remember using it HP workstations back in the mid-90s).  The GNOME environment is no slouch, though.  I first used GNOME back with it first came out, when I was running RH5.2 with (I think) the 2.0.36 kernel.  It was usable, but I eventually switched to Enlightenment.  Then I dropped Linux for good and went over to NetBSD and never looked back.  I hope Solaris works out.&lt;br /&gt;&lt;br /&gt;I got Apache started, but I think I'm going to see what the Sun application server has to offer before I go much farther down the infrastructure setup route.  I'll probably wind up installing all kinds of stuff (Tomcat, JBoss, Resin, Jetty) before I'm done, but I'm going to start out with the Sun suite and see what the creators of Java have managed to do.  I have a feeling I'm going to be downloading Eclipse sooner rather than later, though.  It's like vi -- my fingers know it too well to leave it behind for long.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-112774431028652012?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/112774431028652012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=112774431028652012&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/112774431028652012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/112774431028652012'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2005/09/now-it-can-be-told.html' title='Now It Can Be Told'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-112740429122468833</id><published>2005-09-22T10:37:00.000-05:00</published><updated>2005-10-24T15:06:30.580-05:00</updated><title type='text'>Open mouth, insert bullet, close</title><content type='html'>&lt;span style="font-family: georgia;"&gt;Well, I can't take it anymore. I ordered a 19" LCD monitor from the Dell Outlet for $318 (+ $36 s/h), then found one with almost identical specs at the local Sam's Club for $349. Works out to be a little more expensive with tax, but I don't have to wait a week and a half for it to be delivered. I forgot, this is the reason I went with a Gateway 7330GZ from Best Buy instead of the Dell Inspiron: I needed a laptop quickly for a trip, and Dell couldn't ship fast enough. I dunno, this build-to-order, just-in-time inventory thing seems to be working for Dell, but they're not getting me as a customer because of it. Nothing against them, they just can't cater to the instant-gratification crowd. Oh well, they do seem to handle order cancellations well.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;One thing I am happy about, though -- it's time to fill the Honda again, and I finally broke 50mpg average for a tank. This tank, I've averaged 51.4mpg; not bad, considering when I was commuting to Omaha every day (70 miles at 75mph each way) I was lucky to keep it above 40. The sweet spot seems to be around 55mph, where it indicates ~80mpg, but it seems to get 60 or so at the 30-40mph I spend most of my commute at.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-112740429122468833?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/112740429122468833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=112740429122468833&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/112740429122468833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/112740429122468833'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2005/09/open-mouth-insert-bullet-close.html' title='Open mouth, insert bullet, close'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-112731523444941205</id><published>2005-09-21T09:34:00.000-05:00</published><updated>2005-09-21T11:33:58.673-05:00</updated><title type='text'>Be Careful What You Wish For</title><content type='html'>&lt;span style="font-family:georgia;"&gt;Well, synchronicity makes its typical play again. The same day I whinge about my lost-in-limbo Ultra 20 workstation, it shows up on my doorstep. So I drag it inside and unpack it. The keyboard's kind of cheap (I use a &lt;a href="http://www.pckeyboard.com/customizer.html"&gt;Unicomp Classic&lt;/a&gt; at work, and an &lt;a href="http://www.cvtinc.com/products/keyboards/stellar.htm"&gt;Avant Stellar&lt;/a&gt; at home), but it's usable. The documentation's pretty skimpy, but all I have to do is plug in the keyboard, mouse and monitor and add the power and network cables and I'm good to go, right? Well, in an alternate, reasonable reality this might have been so, but this is my life so what comes next is not unexpected: The machine roars (and I mean ROARS) to life, then quickly quiets down as the CPU temperature sensor throttles back the fan on the heat sink. The little system status light turns green, indicating that the POST went successfully. All's good, except I have no video. I should point out that I got the "medium-sized" Ultra 20, which includes 1GB of memory and an Opteron 148 CPU. It also includes an nVidia NVS280 accellerated graphics card, which supports up to two DVI monitors. I don't have a DVI monitor (yet), so I plugged my VGA monitor into the on-board video (an ATI Rage XL chipset). Apparently there's no monitor sensing or anything, video goes somewhere by default and of course, in my case, goes Somewhere Else.&lt;br /&gt;&lt;br /&gt;So, in short, I'd like to be terribly impressed by the Ultra 20, but that hasn't happened yet. Right now Plan A is to take the whole thing down to the basement and hook it up to the TV (which has a DVI input), but I still need a cable which I probably will only use once. Plan B is to get a DVI monitor, but I don't have the cash ready for a nice one and I'd hate to get a cheap one and then have to fight to justify replacing it in a few months when I have some cash together. What to do, what to do....&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-112731523444941205?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/112731523444941205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=112731523444941205&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/112731523444941205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/112731523444941205'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2005/09/be-careful-what-you-wish-for.html' title='Be Careful What You Wish For'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16934172.post-112723331656895344</id><published>2005-09-20T11:13:00.000-05:00</published><updated>2005-09-20T11:45:08.060-05:00</updated><title type='text'>What I Want</title><content type='html'>&lt;span style="font-family:georgia;"&gt;&lt;span style="font-style: italic;"&gt;All I want is a kind word, a warm bed, and unlimited power.&lt;/span&gt; -- Ashleigh Brilliant&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Power corrupts.  Absolute power is kind of neat&lt;/span&gt;. -- John Lehman, &lt;/span&gt;Secretary of the Navy, 1981-1987&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;br /&gt;Money, power, fame &amp; fortune. All of the power and none of the responsibility. The same things that everyone wants -- well, if you're an angsty teenager, anyway. For those of us in our post-formative years, this seems excessive and short-sighted. Again, perfect if you're an angsty teen.&lt;br /&gt;&lt;br /&gt;Right now, I'll settle for delivery of my Sun Ultra 20 workstation. I ordered it back in June (June! It's the middle of September! Where is the...expletives fail me...thing?). I'm actually on rev 8 of my angry letter to Sun regarding order fulfillment and customer communication, I'll probably put a little polish on it as soon as my workstation finally gets here (how many "t"s in "wretched", anyway?) and send it off with a note to "share and enjoy".  I mean, seriously, I understand about pre-selling, and I understand that Sun probably isn't used to dealing with one-off, low-margin customers, but come on!  I was never notified when the systems became available, I was never notified when my system shipped, and there was a mysterious hold on my order that was never explained to me.  Is this any way to do business?  All I have to say is, I have a 90-day return policy, and if this system doesn't rank right up there with sliced bread and shared libraries, it's going right back in the box.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16934172-112723331656895344?l=randomcoolzip.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://randomcoolzip.blogspot.com/feeds/112723331656895344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16934172&amp;postID=112723331656895344&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/112723331656895344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16934172/posts/default/112723331656895344'/><link rel='alternate' type='text/html' href='http://randomcoolzip.blogspot.com/2005/09/what-i-want.html' title='What I Want'/><author><name>Tracy Nelson</name><uri>http://www.blogger.com/profile/10765685376490906294</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
