<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>in Chris Velazquez's words... - general</title>
    <link>http://www.chrisvelazquez.com/blog/</link>
    <description>a blog fertilized by my mental droppings</description>
    <language>en-us</language>
    <copyright>Christopher S. Velazquez</copyright>
    <lastBuildDate>Tue, 19 Jan 2010 16:52:55 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>chris@chrisvelazquez.com</managingEditor>
    <webMaster>chris@chrisvelazquez.com</webMaster>
    <item>
      <trackback:ping>http://www.chrisvelazquez.com/blog/Trackback.aspx?guid=b6ca3d9a-0dbf-4250-9107-f6c55faeffbe</trackback:ping>
      <pingback:server>http://www.chrisvelazquez.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.chrisvelazquez.com/blog/PermaLink,guid,b6ca3d9a-0dbf-4250-9107-f6c55faeffbe.aspx</pingback:target>
      <dc:creator>Chris V.</dc:creator>
      <wfw:comment>http://www.chrisvelazquez.com/blog/CommentView,guid,b6ca3d9a-0dbf-4250-9107-f6c55faeffbe.aspx</wfw:comment>
      <wfw:commentRss>http://www.chrisvelazquez.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b6ca3d9a-0dbf-4250-9107-f6c55faeffbe</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I was chatting with a recruiter from New
York City, and he told me that in the past 12 years, this has been the worst market
for IT hiring that he has ever seen.  I can believe it.  I have been without
a job for several months now, and have come frustratingly close to scoring some really
good positions, only to be edged out by minutiae.<br /><br />
I applied for a Senior C# developer position at a well-known energy exploration company. 
The process started in November, and it took a while before they would even consent
to interview me.  They were very interested in my resume, and invited me for
an interview.  I thought I had totally bombed the interview - I drove home despondently. 
But the intervening recruiter told me that they have rave reviews for me and were
very interested and they wanted me back for a second interview.  This gave me
a little bit of hope.  So for my second interview I dressed to the nines, I was
spot on with every question they flung at me.  I was friendly, funny and fantastic. 
There was no way I could have blown this.  But then I got no response for a week
from the recruiter.  So I called to ask what was going on.  She told me
that they decided to pass on me because I didn't knowa WPF (Windows Presentation Foundation)
yet and they decided to go with the two other candidates where were "already approved"
by the HR department.  This truly sucked because I thought we had a genuine rapport,
and I still think I would have been the best candidate for that position.<br /><br />
And I trudge onward...<br /><p></p><img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=b6ca3d9a-0dbf-4250-9107-f6c55faeffbe" /></body>
      <title>The Job Hunt</title>
      <guid isPermaLink="false">http://www.chrisvelazquez.com/blog/PermaLink,guid,b6ca3d9a-0dbf-4250-9107-f6c55faeffbe.aspx</guid>
      <link>http://www.chrisvelazquez.com/blog/PermaLink,guid,b6ca3d9a-0dbf-4250-9107-f6c55faeffbe.aspx</link>
      <pubDate>Tue, 19 Jan 2010 16:52:55 GMT</pubDate>
      <description>I was chatting with a recruiter from New York City, and he told me that in the past 12 years, this has been the worst market for IT hiring that he has ever seen.&amp;nbsp; I can believe it.&amp;nbsp; I have been without a job for several months now, and have come frustratingly close to scoring some really good positions, only to be edged out by minutiae.&lt;br&gt;
&lt;br&gt;
I applied for a Senior C# developer position at a well-known energy exploration company.&amp;nbsp;
The process started in November, and it took a while before they would even consent
to interview me.&amp;nbsp; They were very interested in my resume, and invited me for
an interview.&amp;nbsp; I thought I had totally bombed the interview - I drove home despondently.&amp;nbsp;
But the intervening recruiter told me that they have rave reviews for me and were
very interested and they wanted me back for a second interview.&amp;nbsp; This gave me
a little bit of hope.&amp;nbsp; So for my second interview I dressed to the nines, I was
spot on with every question they flung at me.&amp;nbsp; I was friendly, funny and fantastic.&amp;nbsp;
There was no way I could have blown this.&amp;nbsp; But then I got no response for a week
from the recruiter.&amp;nbsp; So I called to ask what was going on.&amp;nbsp; She told me
that they decided to pass on me because I didn't knowa WPF (Windows Presentation Foundation)
yet and they decided to go with the two other candidates where were "already approved"
by the HR department.&amp;nbsp; This truly sucked because I thought we had a genuine rapport,
and I still think I would have been the best candidate for that position.&lt;br&gt;
&lt;br&gt;
And I trudge onward...&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=b6ca3d9a-0dbf-4250-9107-f6c55faeffbe" /&gt;</description>
      <comments>http://www.chrisvelazquez.com/blog/CommentView,guid,b6ca3d9a-0dbf-4250-9107-f6c55faeffbe.aspx</comments>
      <category>general</category>
    </item>
    <item>
      <trackback:ping>http://www.chrisvelazquez.com/blog/Trackback.aspx?guid=b2e0f424-803b-449b-852c-2892f2b74174</trackback:ping>
      <pingback:server>http://www.chrisvelazquez.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.chrisvelazquez.com/blog/PermaLink,guid,b2e0f424-803b-449b-852c-2892f2b74174.aspx</pingback:target>
      <dc:creator>Chris V.</dc:creator>
      <wfw:comment>http://www.chrisvelazquez.com/blog/CommentView,guid,b2e0f424-803b-449b-852c-2892f2b74174.aspx</wfw:comment>
      <wfw:commentRss>http://www.chrisvelazquez.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b2e0f424-803b-449b-852c-2892f2b74174</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Thank you, patient readers, for indulging my long absence.  I will be adding
some new articles shortly, including nifty tricks you can teach Subsonic to do, more
C# .NET Interop magic, more news from people with similar DNA, and perhaps some revelations
on audio processing, IMVU and search engine strategies for your blog.
</p>
        <p>
I was interested to see how people are finding this blog.  It appears to be a
common practice for IT recruiters to google prospective developers.  Many people
are finding this blog by my name "Chris Velazquez", as well as the misspelling "Chris
Velasquez".  In fact, a google search on just "Velazquez" shows this web site
in the top 100 results, despite the more obvious relevance of Spanish painter Diego
Velazquez, congresswoman Nydia Velazquez, and the fact that Velazquez is quite a common
name in the Spanish-speaking world.
</p>
        <p>
There seems to be some interest in <a href="http://www.chrisvelazquez.com/blog/CommentView,guid,9908a5a8-b6d5-4a33-941d-75acf748c5b2.aspx">C#
dictionary of delegates</a>, an alternative to using a switch statement.  While
this isn't an earth-shattering revelation, several programmers have picked up on this
technique, and I am beginning to use it more frequently in certain parts of my own
code.
</p>
        <p>
As expected, many IE7 users want to use <a href="http://www.chrisvelazquez.com/blog/PermaLink,guid,cbbfdc06-2ffe-4e6f-830f-9ccf1f73f9fe.aspx">BugMeNot</a> to
bypass mandatory registration.  And also as expected, people are having problems
trying to get MS Office and Excel to work seamlessly with their C# code. 
Surprisingly, the image of my daughter holding balloon with static cling in her hair
is becoming a hit on the search engines.
</p>
        <p>
I'll be fertilizing this blog with my mental droppings shortly.  Stay tuned!
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=b2e0f424-803b-449b-852c-2892f2b74174" />
      </body>
      <title>Back from a long absence</title>
      <guid isPermaLink="false">http://www.chrisvelazquez.com/blog/PermaLink,guid,b2e0f424-803b-449b-852c-2892f2b74174.aspx</guid>
      <link>http://www.chrisvelazquez.com/blog/PermaLink,guid,b2e0f424-803b-449b-852c-2892f2b74174.aspx</link>
      <pubDate>Tue, 15 May 2007 00:58:05 GMT</pubDate>
      <description>&lt;p&gt;
Thank you, patient readers, for indulging my long absence.&amp;nbsp; I will be adding
some new articles shortly, including nifty tricks you can teach Subsonic to do, more
C# .NET Interop magic, more news from people with similar DNA, and perhaps some revelations
on audio processing, IMVU and search engine strategies for your blog.
&lt;/p&gt;
&lt;p&gt;
I was interested to see how people are finding this blog.&amp;nbsp; It appears to be a
common practice for IT recruiters to google prospective developers.&amp;nbsp; Many people
are finding this blog by my name "Chris Velazquez", as well as the misspelling "Chris
Velasquez".&amp;nbsp; In fact, a google search on just "Velazquez" shows this web site
in the top 100 results, despite the more obvious relevance of Spanish painter Diego
Velazquez, congresswoman Nydia Velazquez, and the fact that Velazquez is quite a common
name in the Spanish-speaking world.
&lt;/p&gt;
&lt;p&gt;
There seems to be some interest in &lt;a href="http://www.chrisvelazquez.com/blog/CommentView,guid,9908a5a8-b6d5-4a33-941d-75acf748c5b2.aspx"&gt;C#
dictionary of delegates&lt;/a&gt;, an alternative to using a switch statement.&amp;nbsp; While
this isn't an earth-shattering revelation, several programmers have picked up on this
technique, and I am beginning to use it more frequently in certain parts of my own
code.
&lt;/p&gt;
&lt;p&gt;
As expected, many IE7 users want to use &lt;a href="http://www.chrisvelazquez.com/blog/PermaLink,guid,cbbfdc06-2ffe-4e6f-830f-9ccf1f73f9fe.aspx"&gt;BugMeNot&lt;/a&gt;&amp;nbsp;to
bypass mandatory registration.&amp;nbsp; And also as expected, people are having problems
trying to get&amp;nbsp;MS Office and Excel&amp;nbsp;to work seamlessly with their C# code.&amp;nbsp;
Surprisingly, the image of my daughter holding balloon with static cling in her hair
is becoming a hit on the search engines.
&lt;/p&gt;
&lt;p&gt;
I'll be fertilizing this blog with my mental droppings shortly.&amp;nbsp; Stay tuned!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=b2e0f424-803b-449b-852c-2892f2b74174" /&gt;</description>
      <comments>http://www.chrisvelazquez.com/blog/CommentView,guid,b2e0f424-803b-449b-852c-2892f2b74174.aspx</comments>
      <category>frivolity;general</category>
    </item>
    <item>
      <trackback:ping>http://www.chrisvelazquez.com/blog/Trackback.aspx?guid=488f986c-ddee-4ab5-970a-61b42cb0d63d</trackback:ping>
      <pingback:server>http://www.chrisvelazquez.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.chrisvelazquez.com/blog/PermaLink,guid,488f986c-ddee-4ab5-970a-61b42cb0d63d.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.chrisvelazquez.com/blog/CommentView,guid,488f986c-ddee-4ab5-970a-61b42cb0d63d.aspx</wfw:comment>
      <wfw:commentRss>http://www.chrisvelazquez.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=488f986c-ddee-4ab5-970a-61b42cb0d63d</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img title="You've Got Spam" alt="You've Got Spam" hspace="10" src="http://www.chrisvelazquez.com/blog/content/binary/youve_got_spam.jpg" align="right" vspace="10" border="0" />I've
raised the white flag.  I've had it with hosting e-mail.  I just purchased
an e-mail hosting plan from GoDaddy, and I'm in the process of moving all the e-mail
accounts.  And instructing customers on how to change their Outlook settings
for the new system.  Hopefully, I can get everyone moved over in the next couple
of weeks.
</p>
        <p>
The sordid tale of the <a href="http://en.wikipedia.org/wiki/Tar_baby">tar-baby</a> from
hell begins about four years ago, when I was having problems with the ISP that was
hosting my e-mail service.  As things happened, I came upon an open-source mail
server called <a href="http://www.lumisoft.ee/">Lumisoft</a> that was written in C#
and was able to handle SMTP relays, POP3 inboxes, and had a cute WinForms UI for administration. 
It must have been the macho call of the wild - I can do this!  I grabbed an old
computer, wiped it clean, installed Windows 2000 Pro on it and set up the mail server. 
I had initially intended to use it for just my own purposes, and my wife and I used
it for our e-mail.  But as things progressed, I started getting calls from customers
who were getting angry that their ISPs weren't filtering their spam and letting e-mail
viruses get through.  So I picked up <a href="http://spamassassin.apache.org/">SpamAssassin</a>,
and wrote a couple Perl scripts (shoutout: using ActiveState ActivePerl) that would
comb the mail looking for spam to tag and also tossing out anything executable. 
These Perl scripts were fired off by a little C# Windows Service I wrote in a half-hour. 
And I'm happy to say I haven't had a single e-mail virus in Outlook in four years. 
But things quickly deteorated.  To summarize:
</p>
        <ul>
          <li>
            <strong>Network downtime</strong> - my ISP doesn't answer the phone on Sundays, so
when do you think it goes down? 
</li>
          <li>
            <strong>Security Breach</strong> - a slacker at my ISP had a null VPN password, allowing
a Japanese spammer to hijack my mail server as his own personal SMTP relay. 
</li>
          <li>
            <strong>Spam</strong> - causing an increasing burden on the old 450 MHz Pentium II. 
</li>
          <li>
            <strong>Abandoned E-mail Accounts</strong> - piling up the spam and filling up the
disk 
</li>
          <li>
            <strong>Disgruntled Customers</strong> - I always know when the mail goes down, oh,
I hear about it! 
</li>
          <li>
            <strong>Clueless Customers</strong> - who sign up for all sorts of online crap and
wonder why they have so much spam! 
</li>
          <li>
            <strong>Hardware Issues</strong> - Ugh</li>
        </ul>
        <p>
I've had it up to here, and now I'm putting POSTAL to pasture. (Yes, I named the computer
"POSTAL" as a joke.  Ha ha, just serious.)  I can get 100 POP3 e-mail
accounts from GoDaddy for just $30 a year, and it comes with a webmail interface. 
The admin interface is a pain in the rear, but I'm sure they can do a better job with
uptime than I can.  I will miss having a bottomless e-mail account that users
could send 100 MB files to, but the need for that has decreased as well.  At
least I won't be wasting any more time on this.
</p>
        <p>
This is better than going postal.  Don't you think?
</p>
        <img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=488f986c-ddee-4ab5-970a-61b42cb0d63d" />
      </body>
      <title>Retiring the E-Mail Server</title>
      <guid isPermaLink="false">http://www.chrisvelazquez.com/blog/PermaLink,guid,488f986c-ddee-4ab5-970a-61b42cb0d63d.aspx</guid>
      <link>http://www.chrisvelazquez.com/blog/PermaLink,guid,488f986c-ddee-4ab5-970a-61b42cb0d63d.aspx</link>
      <pubDate>Thu, 01 Mar 2007 20:11:44 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img title="You've Got Spam" alt="You've Got Spam" hspace=10 src="http://www.chrisvelazquez.com/blog/content/binary/youve_got_spam.jpg" align=right vspace=10 border=0&gt;I've
raised the white flag.&amp;nbsp; I've had it with hosting e-mail.&amp;nbsp; I just purchased
an e-mail hosting plan from GoDaddy, and I'm in the process of moving all the e-mail
accounts.&amp;nbsp; And instructing customers on how to change their Outlook settings
for the new system.&amp;nbsp; Hopefully, I can get everyone moved over in the next couple
of weeks.
&lt;/p&gt;
&lt;p&gt;
The sordid tale of the &lt;a href="http://en.wikipedia.org/wiki/Tar_baby"&gt;tar-baby&lt;/a&gt; from
hell begins about four years ago, when I was having problems with the ISP that was
hosting my e-mail service.&amp;nbsp; As things happened, I came upon an open-source mail
server called &lt;a href="http://www.lumisoft.ee/"&gt;Lumisoft&lt;/a&gt; that was written in C#
and was able to handle SMTP relays, POP3 inboxes, and had a cute WinForms UI for administration.&amp;nbsp;
It must have been the macho call of the wild - I can do this!&amp;nbsp; I grabbed an old
computer, wiped it clean, installed Windows 2000 Pro on it and set up the mail server.&amp;nbsp;
I had initially intended to use it for just my own purposes, and my wife and I used
it for our e-mail.&amp;nbsp; But as things progressed, I started getting calls from customers
who were getting angry that their ISPs weren't filtering their spam and letting e-mail
viruses get through.&amp;nbsp; So I picked up &lt;a href="http://spamassassin.apache.org/"&gt;SpamAssassin&lt;/a&gt;,
and wrote a couple Perl scripts (shoutout: using ActiveState ActivePerl) that would
comb the mail looking for spam to tag and also tossing out anything executable.&amp;nbsp;
These Perl scripts were fired off by a little C# Windows Service I wrote in a half-hour.&amp;nbsp;
And I'm happy to say I haven't had a single e-mail virus in Outlook in four years.&amp;nbsp;
But things quickly deteorated.&amp;nbsp; To summarize:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network downtime&lt;/strong&gt; - my ISP doesn't answer the phone on Sundays, so
when do you think it goes down? 
&lt;li&gt;
&lt;strong&gt;Security Breach&lt;/strong&gt; - a slacker at my ISP had a null VPN password, allowing
a Japanese spammer to hijack my mail server as his own personal SMTP relay. 
&lt;li&gt;
&lt;strong&gt;Spam&lt;/strong&gt; - causing an increasing burden on the old 450 MHz Pentium II. 
&lt;li&gt;
&lt;strong&gt;Abandoned E-mail Accounts&lt;/strong&gt; - piling up the spam and filling up the
disk 
&lt;li&gt;
&lt;strong&gt;Disgruntled Customers&lt;/strong&gt; - I always know when the mail goes down, oh,
I hear about it! 
&lt;li&gt;
&lt;strong&gt;Clueless Customers&lt;/strong&gt; - who sign up for all sorts of online crap and
wonder why they have so much spam! 
&lt;li&gt;
&lt;strong&gt;Hardware Issues&lt;/strong&gt; - Ugh&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I've had it up to here, and now I'm putting POSTAL to pasture. (Yes, I named the computer
"POSTAL" as a joke.&amp;nbsp;&amp;nbsp;Ha ha, just serious.)&amp;nbsp; I can get 100 POP3 e-mail
accounts from GoDaddy for just $30 a year, and it comes with a webmail interface.&amp;nbsp;
The admin interface is a pain in the rear, but I'm sure they can do a better job with
uptime than I can.&amp;nbsp; I will miss having a bottomless e-mail account that users
could send 100 MB files to, but the need for that has decreased as well.&amp;nbsp; At
least I won't be wasting any more time on this.
&lt;/p&gt;
&lt;p&gt;
This is better than going postal.&amp;nbsp; Don't you think?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=488f986c-ddee-4ab5-970a-61b42cb0d63d" /&gt;</description>
      <comments>http://www.chrisvelazquez.com/blog/CommentView,guid,488f986c-ddee-4ab5-970a-61b42cb0d63d.aspx</comments>
      <category>general</category>
    </item>
    <item>
      <trackback:ping>http://www.chrisvelazquez.com/blog/Trackback.aspx?guid=6c7878b9-d673-4258-9035-0883eb635719</trackback:ping>
      <pingback:server>http://www.chrisvelazquez.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.chrisvelazquez.com/blog/PermaLink,guid,6c7878b9-d673-4258-9035-0883eb635719.aspx</pingback:target>
      <dc:creator>Chris V.</dc:creator>
      <wfw:comment>http://www.chrisvelazquez.com/blog/CommentView,guid,6c7878b9-d673-4258-9035-0883eb635719.aspx</wfw:comment>
      <wfw:commentRss>http://www.chrisvelazquez.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6c7878b9-d673-4258-9035-0883eb635719</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just came across an article from Jakob Nielson's UseIt.com web site concerning <a href="http://www.useit.com/alertbox/weblogs.html">Weblog
Usability</a>.  I figure I should go ahead and take the test and see how my own
blog stacks against the ideals of the guru.
</p>
        <p>
          <strong>Top Ten Design Mistakes in Weblogs:</strong>
        </p>
        <p>
          <strong>1. No Author Biographies - <font color="#008000">Not guilty</font></strong>
        </p>
        <p>
I have my real name and some real info about myself in the "What's this?" box to the
right.  If you visit my home page, you can even download my resume.
</p>
        <p>
          <strong>2. No Author Photo - <font color="#008000">Not guilty</font><font color="#a9a9a9">(anymore)</font></strong>
        </p>
        <p>
Yes, I have posted an unflattering, but honest picture of myself.  I do have
a nice picture of myself that was taken at my wedding by a professional photographer
almost 17 years ago.  I don't think I can really use that, though.
</p>
        <p>
          <strong>3. Nondescript Posting Titles - <font color="#008000">Not guilty</font></strong>
        </p>
        <p>
I just barely squeaked by on this.  I try to title each blurb accurately, and
when I'm in a playful mood I may throw in a double entrendre, such as "Nutty Warnings". 
Some titles are lame, I admit it.  I throw myself on the mercy of the court on
this count.
</p>
        <p>
          <strong>4. Links Don't Say Where They Go - <font color="#008000">Not guilty</font></strong>
        </p>
        <p>
This is classic Web 101 fare.  Search engines look for this; SEO depends on it.
</p>
        <p>
          <strong>5. Classic Hits are Buried - <font color="#ff0000">Guilty</font></strong>
        </p>
        <p>
The dasBlog software doesn't lend itself to breadcrumb navigation, and I have been
too busy/lazy/apathetic to do anything to about it.  I don't have any real "hits"
because I have so few readers that it probably doesn't matter.  I'll get off
with probation on this.
</p>
        <p>
          <strong>6. The Calendar is the Only Navigation - <font color="#008000">Not guilty</font></strong>
        </p>
        <p>
I do add categories to each blog entry, honest, officer!  Once again, I'm at
the mercy of dasBlog on this one because it show categories in a linear fashion instead
of a hit-based or frequency-based heuristic.
</p>
        <p>
          <strong>7. Irregular Publishing Frequency - <font color="#ff0000">Guilty</font></strong>
        </p>
        <p>
I have not made a serious attempt to publish regularly, even though I can write quickly. 
As they say in the Holy Grail, "I'm getting better".
</p>
        <p>
          <strong>8. Mixing Topics - <font color="#ff0000">Guilty, Guilty, Guilty</font></strong>
        </p>
        <p>
The fertile crevices of my brain are aching to explode with information to tell the
world.  While I do try to keep the topics programming-related, I suffer from
ADD of the fingers.  What was I writing about, now?
</p>
        <p>
          <strong>9. Forgetting That You Write for Your Future Boss - <font color="#a9a9a9">Hung
Jury</font></strong>
        </p>
        <p>
I have deliberately refrained from including profanity and NSFW content from my blog. 
So I get a silver arrow point for that.  Some people might be offended by my
cheeky humor and unabashed assessments.  If that's the case, then they have a
problem with my personality.  One of my criteria for accepting a new position
is that I can get at least a chuckle during the job interview.  If my boss has
no sense of humor, chances are he will melt down or blow up during a difficult situation,
which will make my own life miserable.  So I guess in a way you can say that
I am writing proactively in self-defense.  Yeah, that's it.
</p>
        <p>
          <strong>10. Having a Domain Name Owned by a Weblog Service - <font color="#008000">Not
guilty</font></strong>
        </p>
        <p>
Oh, c'mon!  You can't spring the $7 a year it costs to have your own domain name? 
Personally, I'm helping fund Bob Parsons' kids' college education.  But let's
not go there.
</p>
        <p>
          <strong>The Verdict</strong>
        </p>
        <p>
Cleared on six counts, found guilty of burying the evidence, negligent publishing,
and crossing the center line of my weblog.  I am hereby put on probation and
required to attend a defensive blogging class as well as blogger sensitivity training.
</p>
        <p>
Now, how well will <u>YOUR</u> blog stand up?
</p>
        <img src="http://www.chrisvelazquez.com/blog/content/binary/jakob_nielsen.jpg" border="0" /> "I'm
vahtching you"<img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=6c7878b9-d673-4258-9035-0883eb635719" /></body>
      <title>Weblog Usability - Guilty or Not Guilty?</title>
      <guid isPermaLink="false">http://www.chrisvelazquez.com/blog/PermaLink,guid,6c7878b9-d673-4258-9035-0883eb635719.aspx</guid>
      <link>http://www.chrisvelazquez.com/blog/PermaLink,guid,6c7878b9-d673-4258-9035-0883eb635719.aspx</link>
      <pubDate>Fri, 23 Feb 2007 22:15:32 GMT</pubDate>
      <description>&lt;p&gt;
I just came across an article from Jakob Nielson's UseIt.com web site concerning &lt;a href="http://www.useit.com/alertbox/weblogs.html"&gt;Weblog
Usability&lt;/a&gt;.&amp;nbsp; I figure I should go ahead and take the test and see how my own
blog stacks against the ideals of the guru.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Top Ten Design Mistakes in Weblogs:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;1. No Author Biographies - &lt;font color=#008000&gt;Not guilty&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I have my real name and some real info about myself in the "What's this?" box to the
right.&amp;nbsp; If you visit my home page, you can even download my resume.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2. No Author Photo - &lt;font color=#008000&gt;Not guilty&lt;/font&gt; &lt;font color=#a9a9a9&gt;(anymore)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Yes, I have posted an unflattering, but honest picture of myself.&amp;nbsp; I do have
a nice picture of myself that was taken at my wedding by a professional photographer
almost 17 years ago.&amp;nbsp; I don't think I can really use that, though.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;3. Nondescript Posting Titles - &lt;font color=#008000&gt;Not guilty&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I just barely squeaked by on this.&amp;nbsp; I try to title each blurb accurately, and
when I'm in a playful mood I may throw in a double entrendre, such as "Nutty Warnings".&amp;nbsp;
Some titles are lame, I admit it.&amp;nbsp; I throw myself on the mercy of the court on
this count.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;4. Links Don't Say Where They Go - &lt;font color=#008000&gt;Not guilty&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
This is classic Web 101 fare.&amp;nbsp; Search engines look for this; SEO depends on it.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;5. Classic Hits are Buried - &lt;font color=#ff0000&gt;Guilty&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The dasBlog software doesn't lend itself to breadcrumb navigation, and I have been
too busy/lazy/apathetic to do anything to about it.&amp;nbsp; I don't have any real "hits"
because I have so few readers that it probably doesn't matter.&amp;nbsp; I'll get off
with probation on this.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;6. The Calendar is the Only Navigation - &lt;font color=#008000&gt;Not guilty&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I do add categories to each blog entry, honest, officer!&amp;nbsp; Once again, I'm at
the mercy of dasBlog on this one because it show categories in a linear fashion instead
of a hit-based or frequency-based heuristic.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;7. Irregular Publishing Frequency - &lt;font color=#ff0000&gt;Guilty&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I have not made a serious attempt to publish regularly, even though I can write quickly.&amp;nbsp;
As they say in the Holy Grail, "I'm getting better".
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;8. Mixing Topics - &lt;font color=#ff0000&gt;Guilty, Guilty, Guilty&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The fertile crevices of my brain are aching to explode with information to tell the
world.&amp;nbsp; While I do try to keep the topics programming-related, I suffer from
ADD of the fingers.&amp;nbsp; What was I writing about, now?
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;9. Forgetting That You Write for Your Future Boss - &lt;font color=#a9a9a9&gt;Hung
Jury&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I have deliberately refrained from including profanity and NSFW content from my blog.&amp;nbsp;
So I get a silver arrow point for that.&amp;nbsp; Some people might be offended by my
cheeky humor and unabashed assessments.&amp;nbsp; If that's the case, then they have a
problem with my personality.&amp;nbsp; One of my criteria for accepting a new position
is that I can get at least a chuckle during the job interview.&amp;nbsp; If my boss has
no sense of humor, chances are he will melt down or blow up during a difficult situation,
which will make my own life miserable.&amp;nbsp; So I guess in a way you can say that
I am writing proactively in self-defense.&amp;nbsp; Yeah, that's it.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;10. Having a Domain Name Owned by a Weblog Service - &lt;font color=#008000&gt;Not
guilty&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Oh, c'mon!&amp;nbsp; You can't spring the $7 a year it costs to have your own domain name?&amp;nbsp;
Personally, I'm helping fund Bob Parsons' kids' college education.&amp;nbsp; But let's
not go there.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The Verdict&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Cleared on six counts, found guilty of burying the evidence, negligent publishing,
and crossing the center line of my weblog.&amp;nbsp; I am hereby put on probation and
required to attend a defensive blogging class as well as blogger sensitivity training.
&lt;/p&gt;
&lt;p&gt;
Now, how well will &lt;u&gt;YOUR&lt;/u&gt; blog stand up?
&lt;/p&gt;
&lt;img src="http://www.chrisvelazquez.com/blog/content/binary/jakob_nielsen.jpg" border=0&gt;&amp;nbsp;"I'm
vahtching you"&lt;img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=6c7878b9-d673-4258-9035-0883eb635719" /&gt;</description>
      <comments>http://www.chrisvelazquez.com/blog/CommentView,guid,6c7878b9-d673-4258-9035-0883eb635719.aspx</comments>
      <category>general;web development</category>
    </item>
    <item>
      <trackback:ping>http://www.chrisvelazquez.com/blog/Trackback.aspx?guid=47354cd4-9c0c-4840-918e-be0a00e7187a</trackback:ping>
      <pingback:server>http://www.chrisvelazquez.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.chrisvelazquez.com/blog/PermaLink,guid,47354cd4-9c0c-4840-918e-be0a00e7187a.aspx</pingback:target>
      <dc:creator>Chris V.</dc:creator>
      <wfw:comment>http://www.chrisvelazquez.com/blog/CommentView,guid,47354cd4-9c0c-4840-918e-be0a00e7187a.aspx</wfw:comment>
      <wfw:commentRss>http://www.chrisvelazquez.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=47354cd4-9c0c-4840-918e-be0a00e7187a</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img hspace="10" src="http://www.chrisvelazquez.com/blog/content/binary/peanuts.jpg" align="right" vspace="10" border="0" />Last
night, I was enjoying one of my favorite snacks, peanut butter on a spoon.  Not
the <a href="http://www.cdc.gov/ncidod/dbmd/diseaseinfo/salmonellosis_2007/outbreak_notice.htm">salmonella-infested</a> peanut-flavored
Crisco that you buy at Wal-Mart, but the good stuff: organic natural creamy peanut
butter with nothing but peanuts and salt.  And I looked at the label and saw
the following warning: "<strong>This product was manufactured in a facility that processes
nuts</strong>".  Now I know the placement of this absurd warning has something
to do with legal liability, otherwise it would make sense.  This bears a certain
similarity to <a href="http://www.wired.com/news/columns/0,72774-0.html?tw=wn_index_18">the
way we handle homeland security</a> in 2007.
</p>
        <p>
What would the world look like if we put these warnings on software?
</p>
        <ul>
          <li>
Windows XP Installation disc: <strong><font color="#ff0000">Warning</font></strong>:
this disc contains an operating system that is capable of executing coded instructions
and may be susceptible to malicious activity. 
</li>
          <li>
Microsoft Excel: <strong><font color="#ff0000">Warning</font></strong>: Errors in
formulas and macros may lead to incorrect results. 
</li>
          <li>
ActiveState ActivePerl: <strong><font color="#ff0000">Warning</font></strong>: Improper
use of the Perl programming language may result in incomprehensible gibberish. 
</li>
          <li>
World of Warcraft: <strong><font color="#ff0000">Warning</font></strong>: using this
software to excess may deteriorate your social life.</li>
        </ul>
        <p>
In a sense, I guess that's what the modal dialog box was created for.  Sometimes
you actually do need a warning if there is a side effect to the desired action. 
If I want drop a database table, I want to know before I clobber a bunch of related
stored procedures and program code.  More often than not, though, it is
for some patronizing reason that we "interrupt the proceedings with idiocy" (as Alan
Cooper puts it).  "We can't just let the user do that", I've heard from marketing
types.  I recently had the displeasure of executing an old VB app that someone
had written.  It always prompts with a modal dialog whenever one decides to change
MDI child windows.  Why?  The data had already been saved in the database
- you could reboot the computer and the data would still be available.  These
dialogs were totally unnecessary.
</p>
        <p>
The key to avoiding dialog boxes <em>ad nauseum</em> is <u>reversibility</u>. 
Any action needs to be undoable, or a group of actions taken as a whole need to be
undoable as a group.  While at Conic Systems (now Tadpole Technologies) our software
implemented an "Undo Stack".  This was a pretty sophisticated approach for the
1990's.  You can use a design pattern called "<a href="http://en.wikipedia.org/wiki/Command_pattern">Command</a>"
to partially implement this.  Unlike the IDbCommand implementers in .NET, a good
Command object has the ability to reverse itself.  You place all the Commands
on the undo stack, so the user can undo anything.
</p>
        <p>
Undo a database record - Make sure the command object has all the information it needs
to perform the delete after add, the add after delete, and the data from changed field
values.
</p>
        <p>
Undo a file deletion - don't delete files!  Rename them and send them to the <a href="http://www.codeproject.com/csharp/csdoesshell2.asp">Recycle
bin programmatically</a>.  That way you can get them back upon undo.
</p>
        <p>
Undo a graphical operation - use the State pattern to incrementally change the state
of the drawing surface and roll back to the previous state.
</p>
        <p>
OK, enough of my soapbox rant.  I don't care if people think I'm nuts.
</p>
        <img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=47354cd4-9c0c-4840-918e-be0a00e7187a" />
      </body>
      <title>Nutty Warnings</title>
      <guid isPermaLink="false">http://www.chrisvelazquez.com/blog/PermaLink,guid,47354cd4-9c0c-4840-918e-be0a00e7187a.aspx</guid>
      <link>http://www.chrisvelazquez.com/blog/PermaLink,guid,47354cd4-9c0c-4840-918e-be0a00e7187a.aspx</link>
      <pubDate>Fri, 23 Feb 2007 14:46:39 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img hspace=10 src="http://www.chrisvelazquez.com/blog/content/binary/peanuts.jpg" align=right vspace=10 border=0&gt;Last
night, I was enjoying one of my favorite snacks, peanut butter on a spoon.&amp;nbsp; Not
the &lt;a href="http://www.cdc.gov/ncidod/dbmd/diseaseinfo/salmonellosis_2007/outbreak_notice.htm"&gt;salmonella-infested&lt;/a&gt; peanut-flavored
Crisco that you buy at Wal-Mart, but the good stuff: organic natural creamy peanut
butter with nothing but peanuts and salt.&amp;nbsp; And I looked at the label and saw
the following warning: "&lt;strong&gt;This product was manufactured in a facility that processes
nuts&lt;/strong&gt;".&amp;nbsp; Now I know the placement of this absurd warning has something
to do with legal liability, otherwise it would make sense.&amp;nbsp; This bears a certain
similarity to &lt;a href="http://www.wired.com/news/columns/0,72774-0.html?tw=wn_index_18"&gt;the
way we handle homeland security&lt;/a&gt; in 2007.
&lt;/p&gt;
&lt;p&gt;
What would the world look like if we put these warnings on software?
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Windows XP Installation disc: &lt;strong&gt;&lt;font color=#ff0000&gt;Warning&lt;/font&gt;&lt;/strong&gt;:
this disc contains an operating system that is capable of executing coded instructions
and may be susceptible to malicious activity. 
&lt;li&gt;
Microsoft Excel: &lt;strong&gt;&lt;font color=#ff0000&gt;Warning&lt;/font&gt;&lt;/strong&gt;: Errors in formulas
and macros may lead to incorrect results. 
&lt;li&gt;
ActiveState ActivePerl: &lt;strong&gt;&lt;font color=#ff0000&gt;Warning&lt;/font&gt;&lt;/strong&gt;: Improper
use of the Perl programming language may&amp;nbsp;result in incomprehensible gibberish. 
&lt;li&gt;
World of Warcraft: &lt;strong&gt;&lt;font color=#ff0000&gt;Warning&lt;/font&gt;&lt;/strong&gt;: using this
software to&amp;nbsp;excess may deteriorate your social life.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
In a sense, I guess that's what the modal dialog box was created for.&amp;nbsp; Sometimes
you actually do need a warning if there is a side effect to the desired action.&amp;nbsp;
If I want drop a database table, I want to know before I clobber a bunch of related
stored procedures and program code.&amp;nbsp; More often than not, though,&amp;nbsp;it is
for some patronizing reason that we "interrupt the proceedings with idiocy" (as Alan
Cooper puts it).&amp;nbsp; "We can't just let the user do that", I've heard from marketing
types.&amp;nbsp; I recently had the displeasure of executing an old VB app that someone
had written.&amp;nbsp; It always prompts with a modal dialog whenever one decides to change
MDI child windows.&amp;nbsp; Why?&amp;nbsp; The data had already been saved in the database
- you could reboot the computer and the data would still be available.&amp;nbsp; These
dialogs were totally unnecessary.
&lt;/p&gt;
&lt;p&gt;
The key to avoiding dialog boxes &lt;em&gt;ad nauseum&lt;/em&gt; is &lt;u&gt;reversibility&lt;/u&gt;.&amp;nbsp;
Any action needs to be undoable, or a group of actions taken as a whole need to be
undoable as a group.&amp;nbsp; While at Conic Systems (now Tadpole Technologies) our software
implemented an "Undo Stack".&amp;nbsp; This was a pretty sophisticated approach for the
1990's.&amp;nbsp; You can use a design pattern called "&lt;a href="http://en.wikipedia.org/wiki/Command_pattern"&gt;Command&lt;/a&gt;"
to partially implement this.&amp;nbsp; Unlike the IDbCommand implementers in .NET, a good
Command object has the ability to reverse itself.&amp;nbsp; You place all the Commands
on the undo stack, so the user can undo anything.
&lt;/p&gt;
&lt;p&gt;
Undo a database record - Make sure the command object has all the information it needs
to perform the delete after add, the add after delete, and the data from changed field
values.
&lt;/p&gt;
&lt;p&gt;
Undo a file deletion - don't delete files!&amp;nbsp; Rename them and send them to the &lt;a href="http://www.codeproject.com/csharp/csdoesshell2.asp"&gt;Recycle
bin programmatically&lt;/a&gt;.&amp;nbsp; That way you can get them back upon undo.
&lt;/p&gt;
&lt;p&gt;
Undo a graphical operation - use the State pattern to incrementally change the state
of the drawing surface and roll back to the previous state.
&lt;/p&gt;
&lt;p&gt;
OK, enough of my soapbox rant.&amp;nbsp; I don't care if people think I'm nuts.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=47354cd4-9c0c-4840-918e-be0a00e7187a" /&gt;</description>
      <comments>http://www.chrisvelazquez.com/blog/CommentView,guid,47354cd4-9c0c-4840-918e-be0a00e7187a.aspx</comments>
      <category>general</category>
    </item>
    <item>
      <trackback:ping>http://www.chrisvelazquez.com/blog/Trackback.aspx?guid=59e3dd2c-87ab-45a4-97e6-e80f2f837c8c</trackback:ping>
      <pingback:server>http://www.chrisvelazquez.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.chrisvelazquez.com/blog/PermaLink,guid,59e3dd2c-87ab-45a4-97e6-e80f2f837c8c.aspx</pingback:target>
      <dc:creator>Chris V.</dc:creator>
      <wfw:comment>http://www.chrisvelazquez.com/blog/CommentView,guid,59e3dd2c-87ab-45a4-97e6-e80f2f837c8c.aspx</wfw:comment>
      <wfw:commentRss>http://www.chrisvelazquez.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=59e3dd2c-87ab-45a4-97e6-e80f2f837c8c</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
And sadly, that woman was not Grace Hopper.  The winner of the coveted 2006 Turing
award is none other than <a href="http://campus.acm.org/public/pressroom/press_releases/2_2007/turing2006.cfm">Fran
Allen</a>.  No, I've never heard of her either.  Apparently, she has been
a lifelong IBM software engineer, and her accomplishments include, uh, er, something
to do with optimizing compilers.  She is apparently the head of many different
computing organizations and has spent a great deal of time teaching classes as an
adjunct professor.  This reminds me of the adage, "those who can, do, those who
can't, teach".  I'm at a loss to explain why Ms. Allen was selected to
win the Turing award, other than she is an aging female software engineer,
and she is still alive to receive the award in person.  She didn't even have
an entry in Wikipedia until a few days ago, what's with that?
</p>
        <p>
          <img hspace="10" src="http://www.chrisvelazquez.com/blog/content/binary/grace_hopper.jpg" align="right" vspace="10" border="0" />It's
my opinion that if the ACM wanted to give this award to a woman that badly, they should
have honored Grace Hopper posthumously, with her family receiving the prize. 
Hopper had a major impact on the world of computing, with the invention of the
COBOL programming language, and this impact was felt most forcefully as we approached
the year 1900.  COBOL has always been the de facto standard for big-iron mainframes
that crunch data in back offices that are impervious to its stench.  And to prove
the point that people will actually pay money to romance a pig wearing lipstick,
Fujitsu is keeping the corpse alive with <a href="http://www.netcobol.com/products/windows/netcobol.html">NetCOBOL
for .Net</a>.
</p>
        <p>
So I give my personal award for best lifetime achievement to a woman in the IT industry
to Grace Hopper.  If it weren't for her contributions, we may still be using
a variant of RPG or PL/I.  Nuff said.
</p>
        <img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=59e3dd2c-87ab-45a4-97e6-e80f2f837c8c" />
      </body>
      <title>Woman wins Turing award</title>
      <guid isPermaLink="false">http://www.chrisvelazquez.com/blog/PermaLink,guid,59e3dd2c-87ab-45a4-97e6-e80f2f837c8c.aspx</guid>
      <link>http://www.chrisvelazquez.com/blog/PermaLink,guid,59e3dd2c-87ab-45a4-97e6-e80f2f837c8c.aspx</link>
      <pubDate>Thu, 22 Feb 2007 21:09:58 GMT</pubDate>
      <description>&lt;p&gt;
And sadly, that woman was not Grace Hopper.&amp;nbsp; The winner of the coveted 2006&amp;nbsp;Turing
award is none other than &lt;a href="http://campus.acm.org/public/pressroom/press_releases/2_2007/turing2006.cfm"&gt;Fran
Allen&lt;/a&gt;.&amp;nbsp; No, I've never heard of her either.&amp;nbsp; Apparently, she has been
a lifelong IBM software engineer, and her accomplishments include, uh, er, something
to do with optimizing compilers.&amp;nbsp; She is apparently the head of many different
computing organizations and has spent a great deal of time teaching classes as an
adjunct professor.&amp;nbsp; This reminds me of the adage, "those who can, do, those who
can't, teach".&amp;nbsp; I'm at a loss to explain&amp;nbsp;why Ms. Allen was selected&amp;nbsp;to
win&amp;nbsp;the Turing award, other than she&amp;nbsp;is an aging&amp;nbsp;female software engineer,
and she is still alive to receive the award in person.&amp;nbsp; She didn't even have
an entry in Wikipedia until a few days ago, what's with that?
&lt;/p&gt;
&lt;p&gt;
&lt;img hspace=10 src="http://www.chrisvelazquez.com/blog/content/binary/grace_hopper.jpg" align=right vspace=10 border=0&gt;It's
my opinion that if the ACM wanted to give this award to a woman that badly, they should
have honored Grace Hopper posthumously, with her family receiving the prize.&amp;nbsp;
Hopper had a major&amp;nbsp;impact on the world of computing, with the invention of the
COBOL programming language, and this impact was felt most forcefully&amp;nbsp;as we approached
the year 1900.&amp;nbsp; COBOL has always been the de facto standard for big-iron mainframes
that crunch data in back offices that are impervious to its stench.&amp;nbsp; And to prove
the point that people will actually pay money&amp;nbsp;to&amp;nbsp;romance a pig wearing lipstick,
Fujitsu is keeping the corpse alive with &lt;a href="http://www.netcobol.com/products/windows/netcobol.html"&gt;NetCOBOL
for .Net&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
So I give my personal award for best lifetime achievement to a woman in the IT industry
to Grace Hopper.&amp;nbsp; If it weren't for her contributions, we may still be using
a variant of RPG or PL/I.&amp;nbsp; Nuff said.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=59e3dd2c-87ab-45a4-97e6-e80f2f837c8c" /&gt;</description>
      <comments>http://www.chrisvelazquez.com/blog/CommentView,guid,59e3dd2c-87ab-45a4-97e6-e80f2f837c8c.aspx</comments>
      <category>general</category>
    </item>
    <item>
      <trackback:ping>http://www.chrisvelazquez.com/blog/Trackback.aspx?guid=fbd4ed29-70f7-4408-9766-8c7534114834</trackback:ping>
      <pingback:server>http://www.chrisvelazquez.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.chrisvelazquez.com/blog/PermaLink,guid,fbd4ed29-70f7-4408-9766-8c7534114834.aspx</pingback:target>
      <dc:creator>Chris V.</dc:creator>
      <wfw:comment>http://www.chrisvelazquez.com/blog/CommentView,guid,fbd4ed29-70f7-4408-9766-8c7534114834.aspx</wfw:comment>
      <wfw:commentRss>http://www.chrisvelazquez.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fbd4ed29-70f7-4408-9766-8c7534114834</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html">Evolution
of the Programmer</a>.  The evolution of the "Hello World" program from high
school (in BASIC) to master programmer (as a C++ COM library) and then through management. 
<p></p><p align="center"><img src="http://www.chrisvelazquez.com/blog/content/binary/evolution.jpg" border="0" /></p><img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=fbd4ed29-70f7-4408-9766-8c7534114834" /></body>
      <title>Evolution of the Programmer</title>
      <guid isPermaLink="false">http://www.chrisvelazquez.com/blog/PermaLink,guid,fbd4ed29-70f7-4408-9766-8c7534114834.aspx</guid>
      <link>http://www.chrisvelazquez.com/blog/PermaLink,guid,fbd4ed29-70f7-4408-9766-8c7534114834.aspx</link>
      <pubDate>Thu, 22 Feb 2007 17:46:25 GMT</pubDate>
      <description>&lt;a href="http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html"&gt;Evolution
of the Programmer&lt;/a&gt;.&amp;nbsp; The evolution of the "Hello World" program from high
school (in BASIC) to master programmer (as a C++ COM library) and then through management. 
&lt;p&gt;
&lt;/p&gt;
&lt;p align=center&gt;
&lt;img src="http://www.chrisvelazquez.com/blog/content/binary/evolution.jpg" border=0&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=fbd4ed29-70f7-4408-9766-8c7534114834" /&gt;</description>
      <comments>http://www.chrisvelazquez.com/blog/CommentView,guid,fbd4ed29-70f7-4408-9766-8c7534114834.aspx</comments>
      <category>frivolity;general</category>
    </item>
    <item>
      <trackback:ping>http://www.chrisvelazquez.com/blog/Trackback.aspx?guid=4c107a6f-1e48-40ac-9382-276dabef5b05</trackback:ping>
      <pingback:server>http://www.chrisvelazquez.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.chrisvelazquez.com/blog/PermaLink,guid,4c107a6f-1e48-40ac-9382-276dabef5b05.aspx</pingback:target>
      <dc:creator>Chris V.</dc:creator>
      <wfw:comment>http://www.chrisvelazquez.com/blog/CommentView,guid,4c107a6f-1e48-40ac-9382-276dabef5b05.aspx</wfw:comment>
      <wfw:commentRss>http://www.chrisvelazquez.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4c107a6f-1e48-40ac-9382-276dabef5b05</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I recently tuned into the <a href="http://www.itconversations.com/shows/detail1694.html" target="_blank">podcast
on IT Conversations</a>, hosted by Phil Windley, and featuring David Platt, .NET programmer
and author of the new book "<a href="http://www.amazon.com/exec/obidos/ASIN/0321466756/" target="_blank">Why
Software Sucks</a>".  In the podcast, Platt adds some new light to problems of
user-facing software (as opposed to programmer-facing software).  Much of what
he has to say has already been covered in Alan Cooper's unforgettable book, "<a href="http://www.amazon.com/exec/obidos/ASIN/0764526413/" target="_blank">About
Face</a>".
</p>
        <p>
So what makes some software suck?  Software is supposed to make our lives and
jobs easier to accomplish.  When software makes it difficult for a user to do
things, or forces the user to remember things, or demands that the user do a complex
dance with her keyboard and mouse, then that software sucks unequivocally.
</p>
        <p>
But if you visit the computer lab and ask the programmers what makes software suck,
they will have a totally different perspective.  Code that's hard to read, lack
of unit test coverage, tight coupling of objects, redundancy: these are the problems
that make software suck.
</p>
        <p>
My opinion is that you can have the most highly refactored code, in all of its object-oriented
goodness, and the software can still suck.  My fear is that there are many devotees
of Martin Fowler and Uncle Bob, who in their own minds believe they are writing great
software, but realize only after it has been foisted on the end user that it actually
sucks.
</p>
        <p>
When I tried to de-suckify a feature in the web application we recently released,
I was often met with fierce resistance from programmers, whereas the business analysts
were very open to new ideas on how to make the software more user-friendly. 
One example was when we were required to build an interface whereby a loan representative
could transfer the responsibility for a loan application to another loan rep. 
In our lingo, this is called "pushing a loan".  The original specification required
that the end user would enter the name of the receiving loan rep or their office then
run a search against the database.  I believed that this method would be error-prone
and that there ought to be any easier way.  I sat down with the business analyst
in charge of this new feature and asked her "What do people use this for 90% of the
time?"  She stated that most often, people would push the loan to someone else
within their own loan office.  So I asked how she would like it if, when the
user first selects the feature, he is presented immediately with a list of the loan
reps from his own office, and that this list would precede the search function on
the page.  The business analyst thought this was an excellent alternative, and
she went to draw up the new plans.  Back in the development lab, things ran afoul
because "everyone knows" that the search function "has" to be the first thing on the
page.  This was going to "break the convention" of the look and feel of the rest
of the web application, and this self-imposed directive should take priority over
giving the user what they truly want.  Also, this alternative was going to require
extra programming that we had not originally planned.  I stood my ground on the
customer's behalf, and ultimately we all did agree on this alternative presentation
of the UI.  But this incident illustrates that sometimes even software developers
who are in good communication with the end user will fail to have the end-user's best
interest as their top priority.
</p>
        <p>
In our development shop, we developers would often lapse into the flawed mentality
of "the customer's always right", and I have been just as guilty as others on this. 
The customer would dictate the requirements and the developers' task was to merely
implement whatever they came up with.  Occasionally, the customer would ask for
something so goofy that we developers would have to put our foot down and everyone
would go back to the drawing board.  Such are the risks of assigning the responsibility
of software design to the customer, in this case the business analysts.  The
business indeed knows best what the business needs, but is typically not the best
choice in deciding how to get there.  The developer has the knowledge to create
whatever a specification calls for, but his knowledge of the business need is often
very shallow.  This leaves a disconnect between the customer and the developer. 
This disconnect was partially alleviated by the agile process we used, during the
breakout sessions.  These sessions are great at defining the business need at
a high level that could be understood by both business analysts and developers. 
These session are not so good at defining the user interface.  And user acceptance
is all about the interface.
</p>
        <p>
In Cooper's book, "<a href="http://www.amazon.com/exec/obidos/ASIN/0672326140/" target="_blank">The
Inmates are Running the Asylum</a>", he introduces the concept of the "interaction
designer", a person who's job is to define the user interface and overall orchestration
for a software project.  In software development circles, the "architect" is
more like the lead programmer who has view of the entire system as a whole, including
database structures, development frameworks, and the code base.  Cooper's interaction
designer is more like an architect in the real world, and they are not so concerned
about the mechanics of making it happen as they are with getting it absolutely right
with the customer.  Programmers don't necessarily make good interaction designers,
because of their intense focus on the "how" of creating software, they lose sight
of the "what".  The interaction designer is not so concerned that the chosen
framework doesn't directly support a certain feature, they are focused on the end
product, and have the artistic license to devise the product so that it works intuitively
and flawlessly for the end user.
</p>
        <p>
In Platt's interview, he does not acknowledge many of his observations that have already
been articulated at length by Cooper.  He does offer a few helpful tips for both
end users and developers.  His tips for developers include:
</p>
        <p>
1) Make sure the project includes a "virgin" - that is, someone who is knowledgeable
in software development but comes to the table with a clean slate, unaware of the
software currently under development.  This fresh perspective will cause new
ideas to bloom outside of the box of groupthink that evolves within a development
team.
</p>
        <p>
2) Be willing to break with convention. Doing things the way they've always been done
is no longer good enough.  If you can't find the right GUI widget from your class
library, get a better class library or build it yourself.
</p>
        <p>
3) Don't let edge cases complicate the mainstream.  Programmers tend to write
software that is mathematically correct, when they should be focused on making the
actions and decisions most often taken by the end-user the top priority. Platt says
that it should be easy for the user to do things that are "good, smart and safe" and
difficult for users to do things that are "bad, stupid and dangerous".  Platt
also demonstrates that it's faster and easier to track a UPS delivery by searching
the UPS tracking number in Google than it is in UPS' own web site.  In Cooper's
"About Face", he makes the absurd analogy of putting the eject button right next to
the radio switch in the pilot's cockpit.
</p>
        <p>
4) Instrument the user experience.  Today's software allows you to be able to
report on the user's experience, so you should monitor how the user uses the software
and then use that information to improve the software for the user's actual needs
instead of their stated needs.  If your software is a web application, the simplest
thing you can do is monitor the web server logs, but you can even do more than that.
</p>
        <p>
One of the problems I see with judging software usability is that it relies on subjective
experience.  There is no one good metric to determine how much a piece of software
sucks or doesn't suck.  Aesthetic appeal is the first thing that hits the eye,
but the lasting impression is the ease of interaction.  For instance, my T-Mobile
service lets me pay my bill over the phone, and I don't even have to push a single
button; its voice commands are intuitive, succinct and accurate, and I have even paid
the bill while driving.
</p>
        <p>
I'll have more to say about these issues on future blogs.<br /></p>
        <img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=4c107a6f-1e48-40ac-9382-276dabef5b05" />
      </body>
      <title>Developing Software that Doesn't Suck</title>
      <guid isPermaLink="false">http://www.chrisvelazquez.com/blog/PermaLink,guid,4c107a6f-1e48-40ac-9382-276dabef5b05.aspx</guid>
      <link>http://www.chrisvelazquez.com/blog/PermaLink,guid,4c107a6f-1e48-40ac-9382-276dabef5b05.aspx</link>
      <pubDate>Tue, 16 Jan 2007 22:35:56 GMT</pubDate>
      <description>&lt;p&gt;
I recently tuned into the &lt;a href="http://www.itconversations.com/shows/detail1694.html" target=_blank&gt;podcast
on IT Conversations&lt;/a&gt;, hosted by Phil Windley, and featuring David Platt, .NET programmer
and author of the new book "&lt;a href="http://www.amazon.com/exec/obidos/ASIN/0321466756/" target=_blank&gt;Why
Software Sucks&lt;/a&gt;".&amp;nbsp; In the podcast, Platt adds some new light to problems of
user-facing software (as opposed to programmer-facing software).&amp;nbsp; Much of what
he has to say has already been covered in Alan Cooper's unforgettable book, "&lt;a href="http://www.amazon.com/exec/obidos/ASIN/0764526413/" target=_blank&gt;About
Face&lt;/a&gt;".
&lt;/p&gt;
&lt;p&gt;
So what makes some software suck?&amp;nbsp; Software is supposed to make our lives and
jobs easier to accomplish.&amp;nbsp; When software makes it difficult for a user to do
things, or forces the user to remember things, or demands that the user do a complex
dance with her keyboard and mouse, then that software sucks unequivocally.
&lt;/p&gt;
&lt;p&gt;
But if you visit the computer lab and ask the programmers what makes software suck,
they will have a totally different perspective.&amp;nbsp; Code that's hard to read, lack
of unit test coverage, tight coupling of objects, redundancy: these are the problems
that make software suck.
&lt;/p&gt;
&lt;p&gt;
My opinion is that you can have the most highly refactored code, in all of its object-oriented
goodness, and the software can still suck.&amp;nbsp; My fear is that there are many devotees
of Martin Fowler and Uncle Bob, who in their own minds believe they are writing great
software, but realize only after it has been foisted on the end user that it actually
sucks.
&lt;/p&gt;
&lt;p&gt;
When I tried to de-suckify a feature in the web application we recently released,
I was often met with fierce resistance from programmers, whereas the business analysts
were very open to new ideas on how to make the software more user-friendly.&amp;nbsp;
One example was when we were required to build an interface whereby a loan representative
could transfer the responsibility for a loan application to another loan rep.&amp;nbsp;
In our lingo, this is called "pushing a loan".&amp;nbsp; The original specification required
that the end user would enter the name of the receiving loan rep or their office then
run a search against the database.&amp;nbsp; I believed that this method would be error-prone
and that there ought to be any easier way.&amp;nbsp; I sat down with the business analyst
in charge of this new feature and asked her "What do people use this for 90% of the
time?"&amp;nbsp; She stated that most often, people would push the loan to someone else
within their own loan office.&amp;nbsp; So I asked how she would like it if, when the
user first selects the feature, he is presented immediately with a list of the loan
reps from his own office, and that this list would precede the search function on
the page.&amp;nbsp; The business analyst thought this was an excellent alternative, and
she went to draw up the new plans.&amp;nbsp; Back in the development lab, things ran afoul
because "everyone knows" that the search function "has" to be the first thing on the
page.&amp;nbsp; This was going to "break the convention" of the look and feel of the rest
of the web application, and this self-imposed directive should take priority over
giving the user what they truly want.&amp;nbsp; Also, this alternative was going to require
extra programming that we had not originally planned.&amp;nbsp; I stood my ground on the
customer's behalf, and ultimately we all did agree on this alternative presentation
of the UI.&amp;nbsp; But this incident illustrates that sometimes even software developers
who are in good communication with the end user will fail to have the end-user's best
interest as their top priority.
&lt;/p&gt;
&lt;p&gt;
In our development shop, we developers would often lapse into the flawed mentality
of "the customer's always right", and I have been just as guilty as others on this.&amp;nbsp;
The customer would dictate the requirements and the developers' task was to merely
implement whatever they came up with.&amp;nbsp; Occasionally, the customer would ask for
something so goofy that we developers would have to put our foot down and everyone
would go back to the drawing board.&amp;nbsp; Such are the risks of assigning the responsibility
of software design to the customer, in this case the business analysts.&amp;nbsp; The
business indeed knows best what the business needs, but is typically not the best
choice in deciding how to get there.&amp;nbsp; The developer has the knowledge to create
whatever a specification calls for, but his knowledge of the business need is often
very shallow.&amp;nbsp; This leaves a disconnect between the customer and the developer.&amp;nbsp;
This disconnect was partially alleviated by the agile process we used, during the
breakout sessions.&amp;nbsp; These sessions are great at defining the business need at
a high level that could be understood by both business analysts and developers.&amp;nbsp;
These session are not so good at defining the user interface.&amp;nbsp; And user acceptance
is all about the interface.
&lt;/p&gt;
&lt;p&gt;
In Cooper's book, "&lt;a href="http://www.amazon.com/exec/obidos/ASIN/0672326140/" target=_blank&gt;The
Inmates are Running the Asylum&lt;/a&gt;", he introduces the concept of the "interaction
designer", a person who's job is to define the user interface and overall orchestration
for a software project.&amp;nbsp; In software development circles, the "architect" is
more like the lead programmer who has view of the entire system as a whole, including
database structures, development frameworks, and the code base.&amp;nbsp; Cooper's interaction
designer is more like an architect in the real world, and they are not so concerned
about the mechanics of making it happen as they are with getting it absolutely right
with the customer.&amp;nbsp; Programmers don't necessarily make good interaction designers,
because of their intense focus on the "how" of creating software, they lose sight
of the "what".&amp;nbsp; The interaction designer is not so concerned that the chosen
framework doesn't directly support a certain feature, they are focused on the end
product, and have the artistic license to devise the product so that it works intuitively
and flawlessly for the end user.
&lt;/p&gt;
&lt;p&gt;
In Platt's interview, he does not acknowledge many of his observations that have already
been articulated at length by Cooper.&amp;nbsp; He does offer a few helpful tips for both
end users and developers.&amp;nbsp; His tips for developers include:
&lt;/p&gt;
&lt;p&gt;
1) Make sure the project includes a "virgin" - that is, someone who is knowledgeable
in software development but comes to the table with a clean slate, unaware of the
software currently under development.&amp;nbsp; This fresh perspective will cause new
ideas to bloom outside of the box of groupthink that evolves within a development
team.
&lt;/p&gt;
&lt;p&gt;
2) Be willing to break with convention. Doing things the way they've always been done
is no longer good enough.&amp;nbsp; If you can't find the right GUI widget from your class
library, get a better class library or build it yourself.
&lt;/p&gt;
&lt;p&gt;
3) Don't let edge cases complicate the mainstream.&amp;nbsp; Programmers tend to write
software that is mathematically correct, when they should be focused on making the
actions and decisions most often taken by the end-user the top priority. Platt says
that it should be easy for the user to do things that are "good, smart and safe" and
difficult for users to do things that are "bad, stupid and dangerous".&amp;nbsp; Platt
also demonstrates that it's faster and easier to track a UPS delivery by searching
the UPS tracking number in Google than it is in UPS' own web site.&amp;nbsp; In Cooper's
"About Face", he makes the absurd analogy of putting the eject button right next to
the radio switch in the pilot's cockpit.
&lt;/p&gt;
&lt;p&gt;
4) Instrument the user experience.&amp;nbsp; Today's software allows you to be able to
report on the user's experience, so you should monitor how the user uses the software
and then use that information to improve the software for the user's actual needs
instead of their stated needs.&amp;nbsp; If your software is a web application, the simplest
thing you can do is monitor the web server logs, but you can even do more than that.
&lt;/p&gt;
&lt;p&gt;
One of the problems I see with judging software usability is that it relies on subjective
experience.&amp;nbsp; There is no one good metric to determine how much a piece of software
sucks or doesn't suck.&amp;nbsp; Aesthetic appeal is the first thing that hits the eye,
but the lasting impression is the ease of interaction.&amp;nbsp; For instance, my T-Mobile
service lets me pay my bill over the phone, and I don't even have to push a single
button; its voice commands are intuitive, succinct and accurate, and I have even paid
the bill while driving.
&lt;/p&gt;
&lt;p&gt;
I'll have more to say about these issues on future blogs.&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=4c107a6f-1e48-40ac-9382-276dabef5b05" /&gt;</description>
      <comments>http://www.chrisvelazquez.com/blog/CommentView,guid,4c107a6f-1e48-40ac-9382-276dabef5b05.aspx</comments>
      <category>.net;general;web development</category>
    </item>
    <item>
      <trackback:ping>http://www.chrisvelazquez.com/blog/Trackback.aspx?guid=cfe4efb9-bbb6-4051-9845-7294c3617ce8</trackback:ping>
      <pingback:server>http://www.chrisvelazquez.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.chrisvelazquez.com/blog/PermaLink,guid,cfe4efb9-bbb6-4051-9845-7294c3617ce8.aspx</pingback:target>
      <dc:creator>Chris V.</dc:creator>
      <wfw:comment>http://www.chrisvelazquez.com/blog/CommentView,guid,cfe4efb9-bbb6-4051-9845-7294c3617ce8.aspx</wfw:comment>
      <wfw:commentRss>http://www.chrisvelazquez.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cfe4efb9-bbb6-4051-9845-7294c3617ce8</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Last Friday, I got a chance to meet with the new customer.  I got up early, dusted
off my hard hat and put on my best business casual clothes and took a 4-hour road
trip to "Dinoland" (Texas' Permian Basin, land of dinosaur fossils and black gold). 
We had our kickoff meeting at the local BBQ place, and then drove over to the gas
processing plant, where I was able to sink my nicest shoes into 2 inches of mud. 
I should have worn jeans and work boots like I had originally planned.  Anyway,
we had a rather long engineering planning meeting.  At the meeting, the engineers
drew all sorts of cryptic diagrams and spoke a language with which I am unfamiliar,
though it did use English to connect the jargon.  And I thought to myself, so
this is how we programmers must look like to outsiders - cryptic indecipherable language,
UML and ORD diagrams that have the appearance of being "right", and inside jokes that
they don't get but seem to crack everyone else up.  It was educational to be
on the "outside" for a change.
</p>
        <img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=cfe4efb9-bbb6-4051-9845-7294c3617ce8" />
      </body>
      <title>Outside looking in</title>
      <guid isPermaLink="false">http://www.chrisvelazquez.com/blog/PermaLink,guid,cfe4efb9-bbb6-4051-9845-7294c3617ce8.aspx</guid>
      <link>http://www.chrisvelazquez.com/blog/PermaLink,guid,cfe4efb9-bbb6-4051-9845-7294c3617ce8.aspx</link>
      <pubDate>Mon, 08 Jan 2007 18:20:35 GMT</pubDate>
      <description>&lt;p&gt;
Last Friday, I got a chance to meet with the new customer.&amp;nbsp; I got up early, dusted
off my hard hat and put on my best business casual clothes and took a 4-hour road
trip to "Dinoland" (Texas' Permian Basin, land of dinosaur fossils and black gold).&amp;nbsp;
We had our kickoff meeting at the local BBQ place, and then drove over to the gas
processing plant, where I was able to sink my nicest shoes into 2 inches of mud.&amp;nbsp;
I should have worn jeans and work boots like I had originally planned.&amp;nbsp; Anyway,
we had a rather long engineering planning meeting.&amp;nbsp; At the meeting, the engineers
drew all sorts of cryptic diagrams and spoke a language with which I am unfamiliar,
though it did use English to connect the jargon.&amp;nbsp; And I thought to myself, so
this is how we programmers must look like to outsiders - cryptic indecipherable language,
UML and ORD diagrams that have the appearance of being "right", and inside jokes that
they don't get but seem to crack everyone else up.&amp;nbsp; It was educational to be
on the "outside" for a change.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.chrisvelazquez.com/blog/aggbug.ashx?id=cfe4efb9-bbb6-4051-9845-7294c3617ce8" /&gt;</description>
      <comments>http://www.chrisvelazquez.com/blog/CommentView,guid,cfe4efb9-bbb6-4051-9845-7294c3617ce8.aspx</comments>
      <category>general</category>
    </item>
  </channel>
</rss>