<feed xmlns:dc="http://purl.org/dc/elements/1.1/" 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="http://www.w3.org/2005/Atom" xml:lang="en-US">
    <title>Angry Hacker</title>
    <link rel="self" type="application/xml" href="http://angryhacker.com/blog/Atom.aspx" />
    <subtitle type="html">Productivity, Programming, Performance</subtitle>
    <id>http://angryhacker.com/blog/Default.aspx</id>
    <author>
        <name>Angry Hacker</name>
        <uri>http://angryhacker.com/blog/Default.aspx</uri>
    </author>
    <generator uri="http://subtextproject.com" version="Subtext Version 1.9.5.176">Subtext</generator>
    <updated>2008-07-11T23:43:09Z</updated>
    <entry>
        <title>Sweet. I am on the Channel 9 front page</title>
        <link rel="self" type="text/html" href="http://angryhacker.com/blog/archive/2008/07/11/sweet.-i-am-on-the-channel-9-front-page.aspx" />
        <id>http://angryhacker.com/blog/archive/2008/07/11/sweet.-i-am-on-the-channel-9-front-page.aspx</id>
        <published>2008-07-11T23:35:14-07:00:00</published>
        <updated>2008-07-11T23:43:09Z</updated>
        <content type="html">&lt;p&gt;Awesome, my &lt;a href="http://www.angryhacker.com/blog/archive/2008/06/20/10-reasons-why-sql-server-2008-is-going-to-rock.aspx"&gt;article&lt;/a&gt; on SQL Server 2008 made it to the front page of MSDN's Channel 9 web site.  &lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="499" alt="OnTheFrontPage" src="http://angryhacker.com/blog/images/angryhacker_com/blog/WindowsLiveWriter/Sweet.IamontheChannel9frontpage_14BA8/OnTheFrontPage_5.jpg" width="659" align="left" border="0" /&gt;&lt;/p&gt;&lt;img src="http://angryhacker.com/blog/aggbug/28.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://angryhacker.com/blog/comments/28.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://angryhacker.com/blog/comments/commentRss/28.aspx</wfw:commentRss>
        <trackback:ping>http://angryhacker.com/blog/services/trackbacks/28.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Is Firefox 3 all that and a bag of chips?</title>
        <link rel="self" type="text/html" href="http://angryhacker.com/blog/archive/2008/07/09/is-firefox-3-all-that-and-a-bag-of-chips.aspx" />
        <id>http://angryhacker.com/blog/archive/2008/07/09/is-firefox-3-all-that-and-a-bag-of-chips.aspx</id>
        <published>2008-07-09T23:05:02-07:00:00</published>
        <updated>2008-07-09T23:06:20Z</updated>
        <content type="html">&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="180" alt="get-firefox_small" src="http://angryhacker.com/blog/images/angryhacker_com/blog/WindowsLiveWriter/IsFirefox3allthatandabagofchips_14496/get-firefox_small_3.jpg" width="136" align="left" border="0" /&gt;There is no doubt that Firefox 3 is very appetizing and yummy, shall we say.  The new features are pretty sweet.  The awesome bar is, well, awesome.  I also appreciate the simplicity of the reworked Downloads and Add-ons screens.&lt;/p&gt;  &lt;p&gt;Firefox 3 has received praise unlike any release in recent history.  It set records, had articles up to wazoo on all the major web sites, been mentioned on &lt;a href="www.comedycentral.com/colbertreport/index.jhtml"&gt;Colbert's&lt;/a&gt;, etc...  It got into the Guinness world book of records.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="240" alt="firefox_crash" src="http://angryhacker.com/blog/images/angryhacker_com/blog/WindowsLiveWriter/IsFirefox3allthatandabagofchips_14496/firefox_crash_3.png" width="218" align="right" border="0" /&gt;What's been left out of the coverage is the litany of crasher bugs.  I get this several times a day on several different PCs.   It's been there through the RC/beta releases and there have been tickets filed against it.  Please fix.&lt;/p&gt;  &lt;p&gt;Another inconsistency that was introduced has to do with opening all links in a bookmark folder.  If you click on a folder and select 'Open All in Tabs', Firefox 3 (as in all previous versions), wipes out the existing tabs and replaces them with new ones.  However, if you wheel-click on the folder, it adds the tabs to the set of existing ones, unlike the previous versions.   &lt;/p&gt;  &lt;p&gt;Ok, I am done complaining for the day.&lt;/p&gt;&lt;img src="http://angryhacker.com/blog/aggbug/27.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://angryhacker.com/blog/comments/27.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://angryhacker.com/blog/comments/commentRss/27.aspx</wfw:commentRss>
        <trackback:ping>http://angryhacker.com/blog/services/trackbacks/27.aspx</trackback:ping>
    </entry>
    <entry>
        <title>10 reasons why SQL Server 2008 is going to rock</title>
        <link rel="self" type="text/html" href="http://angryhacker.com/blog/archive/2008/06/20/10-reasons-why-sql-server-2008-is-going-to-rock.aspx" />
        <id>http://angryhacker.com/blog/archive/2008/06/20/10-reasons-why-sql-server-2008-is-going-to-rock.aspx</id>
        <published>2008-06-20T22:35:51-07:00:00</published>
        <updated>2008-06-20T22:46:17Z</updated>
        <content type="html">&lt;p&gt;Just like its predecessor, SQL Server 2008 is taking its sweet time to actually ship.  However, unlike its predecessor, it won't just be a "worthwhile upgrade".  It will kick ass.&lt;/p&gt;  &lt;p&gt;Here are the top 10 reasons why.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;10.  &lt;strong&gt;Plug-in model for SSMS&lt;/strong&gt;.   SSMS 2005 also had a plug-in model, but it was not published, so the few developers that braved that environment were flying blind.  Apparently for 2008, the plug-in model will be published and a thousand add-ins will bloom.  &lt;/p&gt;    &lt;p&gt;9.  &lt;strong&gt;Inline variable assignment.&lt;/strong&gt;  I often wondered why, as a language, SQL languishes behind the times.  I mean, it has barely any modern syntactic sugar.  Well, in this version, they are at least scratching the the tip of the iceberg.  &lt;/p&gt;    &lt;p&gt;Instead of:&lt;/p&gt;    &lt;div&gt;     &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @myVar &lt;span class="kwrd"&gt;int&lt;/span&gt; 
&lt;span class="kwrd"&gt;SET&lt;/span&gt; @myVar = 5&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;
    &lt;br /&gt;you can do it in one line:&lt;/p&gt;

  &lt;div&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @myVar &lt;span class="kwrd"&gt;int&lt;/span&gt; = 5&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;
    &lt;br /&gt;Sweet. 

    &lt;br /&gt;&lt;/p&gt;

  &lt;p&gt;8.  &lt;strong&gt;C like math syntax&lt;/strong&gt;.  &lt;font color="#0000ff"&gt;SET&lt;/font&gt; @i += 5.  Enough said.  They finally let a C# developer on the SQL team.  &lt;/p&gt;

  &lt;p&gt;7.  &lt;strong&gt;Auditing.&lt;/strong&gt;  It's a 10 dollar word for storing changes to your data for later review, debugging or in response to regulatory laws.  It's a thankless and a mundane task and no one is ever excited by the prospect of writing triggers to handle it.  SQL Server 2008 introduces automatic auditing, so we can now check one thing off our to do list.&lt;/p&gt;

  &lt;p&gt;6.  &lt;strong&gt;Compression&lt;/strong&gt;.  You may think that this feature is a waste of time, but it's not what it sounds like.  The release will offer row-level and page-level compression.  The compression mostly takes place on the metadata.  For instance, page compression will store common data for affected rows in a single place.  &lt;/p&gt;

  &lt;p&gt;The metadata storage for variable length fields is going to be completely crazy: they are pushing things into bits (instead of bytes).  For instance, length of the varchar will be stored in 3 bits.  &lt;/p&gt;

  &lt;p&gt;Anyway, I don't really care about space savings - storage is cheap.  What I do care about is that the feature promised (key word here "promises") to reduce I/O and RAM utilization, while increasing CPU utilization.  Every single performance problem I ever dealt with had to do with I/O overloading.  Will see how this plays out.  I am skeptical until I see some real world production benchmarks.&lt;/p&gt;

  &lt;p&gt;5.  &lt;strong&gt;Filtered Indexes.&lt;/strong&gt;  This is another feature that sounds great - will have to see how it plays out.  Anyway, it allows you to create an index while specifying what rows are not to be in the index.  For example, index all rows where Status != null.  Theoretically, it'll get rid of all the dead weight in the index, allowing for faster queries.  &lt;/p&gt;

  &lt;p&gt;4.  &lt;strong&gt;Resource governor.&lt;/strong&gt;  All I can say is FINALLY.  Sybase has had it since version 12 (that's last millennium, people).  Basically it allows the DBA to specify how much resources (e.g. CPU/RAM) each user is entitled to.  At the very least, it'll prevent people, with sparse SQL knowledge from shooting off a query with a Cartesian product and bringing down the box.&lt;/p&gt;

  &lt;p&gt;Actually Sybase is still ahead of MS on this feature.  Its ASE server allows you to prioritize one user over another - a feature that I found immensely useful.&lt;/p&gt;

  &lt;p&gt;3.  &lt;strong&gt;Plan freezing&lt;/strong&gt;.  This is a solution to my personal pet peeve. Sometimes SQL Server decides to change its plan on you (in response to data changes, etc...).  If you've achieved your optimal query plan, now you can stick with it.  Yeah, I know, hints are evil, but there are situations when you want to take a hammer to SQL Server - well, this is the chill pill. &lt;/p&gt;

  &lt;p&gt;2.  &lt;strong&gt;Processing of delimited strings.&lt;/strong&gt;   This is awesome and I could have used this feature...well, always.  Currently, we pass in delimited strings in the following manner:&lt;/p&gt;

  &lt;div&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;exec&lt;/span&gt; sp_MySproc &lt;span class="str"&gt;'murphy,35;galen,31;samuels,27;colton,42'&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;
    &lt;br /&gt;Then the stored proc needs to parse the string into a usable form - a mindless task.&lt;/p&gt;

  &lt;p&gt;In 2008, Microsoft introduced Table Value Parameters (TVP).  &lt;/p&gt;

  &lt;div&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; TYPE PeepsType &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; (Name &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(20), Age &lt;span class="kwrd"&gt;int&lt;/span&gt;) 
&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @myPeeps PeepsType 
INSERT @myPeeps &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="str"&gt;'murphy'&lt;/span&gt;, 35 
INSERT @myPeeps &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="str"&gt;'galen'&lt;/span&gt;, 31 
INSERT @myPeeps &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="str"&gt;'samuels'&lt;/span&gt;, 27 
INSERT @myPeeps &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="str"&gt;'colton'&lt;/span&gt;, 42

&lt;span class="kwrd"&gt;exec&lt;/span&gt; sp_MySproc2 @myPeeps &lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;&lt;/p&gt;

  &lt;p&gt;
    &lt;br /&gt;And the sproc would look like this:&lt;/p&gt;

  &lt;div&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; sp_MySproc2(@myPeeps PeepsType READONLY) ...&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;
    &lt;br /&gt;The advantage here is that you can treat the Table Type as a regular table, use it in joins, etc.  Say goodbye to all those string parsing routines.&lt;/p&gt;

  &lt;p&gt;1. &lt;strong&gt;Intellisense&lt;/strong&gt; in the SQL Server Management Studio (SSMS).  This has been previously possible in SQL Server 2000 and 2005 with &lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="129" alt="Intellisense" src="http://angryhacker.com/blog/images/angryhacker_com/blog/WindowsLiveWriter/10reasonswhySQLServer2008isgoingtorock_13E6B/Intellisense_3.png" width="295" align="right" border="0" /&gt; use of 3rd party add-ins like SQL Prompt ($195).  But these tools are a horrible hack at best (e.g. they hook into the editor window and try to interpret what the application is doing).  &lt;br /&gt;

    &lt;br /&gt;&lt;/p&gt;

  &lt;p&gt;Built-in intellisense is huge - it means new people can easily learn the database schema as they go.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;font style="background-color: #fcfaf0"&gt;There are a ton of other great features - most of them small, but hugely useful.  There is a lot of polishing all over the place, like server resource monitoring right in SSMS, a la Vista.  &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font style="background-color: #fcfaf0"&gt;I'd love to finish this entry on a happy note, but I can't, because I just finished perusing &lt;a href="http://msdn.microsoft.com/en-us/library/ms144275(SQL.100).aspx"&gt;Editions of SQL Server 2008&lt;/a&gt; page.  In addition to the Standard, Enterprise, Developer and Express editions, there are now Workgroup, Web, Compact (which has nothing to do with SQL Server) and Express Advanced editions.  Here is the &lt;a href="http://msdn.microsoft.com/en-us/library/cc645993(SQL.100).aspx"&gt;comparison matrix&lt;/a&gt;.  And you thought picking a version of Vista was complicated.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://angryhacker.com/blog/aggbug/26.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://angryhacker.com/blog/comments/26.aspx</wfw:comment>
        <slash:comments>38</slash:comments>
        <wfw:commentRss>http://angryhacker.com/blog/comments/commentRss/26.aspx</wfw:commentRss>
        <trackback:ping>http://angryhacker.com/blog/services/trackbacks/26.aspx</trackback:ping>
    </entry>
    <entry>
        <title>How to reference an assembly from the GAC</title>
        <link rel="self" type="text/html" href="http://angryhacker.com/blog/archive/2008/05/27/how-to-reference-an-assembly-from-the-gac.aspx" />
        <id>http://angryhacker.com/blog/archive/2008/05/27/how-to-reference-an-assembly-from-the-gac.aspx</id>
        <published>2008-05-27T05:58:53-07:00:00</published>
        <updated>2008-05-26T23:38:19Z</updated>
        <content type="html">&lt;p&gt;Oddly enough, you can't use the Add Reference... dialog box to reference an assembly from the GAC in either VS2005 or VS2008.  It seems completely counter-intuitive, but it's true.  Many developers actually think that the .NET tab of the Add Reference... dialog box &lt;em&gt;is&lt;/em&gt; the GAC listing, which, again, is not true.  &lt;/p&gt; &lt;p&gt;So why do some GACed assemblies appear in the list while others don't?   First of all, the assembly must not only exist in the GAC (e.g. c:\windows\assembly), it must also exist elsewhere on the system.  Most often, these assemblies live in the &lt;strong&gt;&lt;em&gt;Program Files\Vendor\...&lt;/em&gt;&lt;/strong&gt; directory.  Secondly, a &lt;a href="http://support.microsoft.com/kb/306149"&gt;registry&lt;/a&gt; entry tells Visual Studio what directories to scan for assemblies.&lt;/p&gt; &lt;p&gt;However, some vendors just install assemblies directly into the GAC, making it impossible for Visual Studio to reference them.  &lt;/p&gt; &lt;p&gt;However, there are ways around this problem. The one I use most often involves SharpDevelop and is obscenely simple.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Download and install the latest stable version of &lt;a href="http://sharpdevelop.net/OpenSource/SD/Download/"&gt;SharpDevelop.&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Next, open your solution in SharpDevelop.  Go to the &lt;em&gt;&lt;strong&gt;Project&lt;/strong&gt;&lt;/em&gt; menu and select the &lt;strong&gt;&lt;em&gt;Add Reference&lt;/em&gt;&lt;/strong&gt;.  Go to the GAC tab and pick whatever assembly you want.&lt;/li&gt; &lt;li&gt;Save the solution and you are done.   &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;  &lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="477" alt="SharpDevelop_AddGacRef" src="http://angryhacker.com/blog/images/angryhacker_com/blog/WindowsLiveWriter/HowtoreferenceanassemblyfromtheGAC_14BCC/SharpDevelop_AddGacRef_6.png" width="630" border="0" /&gt; &lt;/p&gt; &lt;p&gt;There is one small issue though - SharpDevelop does not support any type of web projects, particularly Web Site project type.  For this type of project, you must manually add the GACed assembly into the web.config. The referenced assemblies are typically held in the &lt;strong&gt;&lt;em&gt;configuration/system.web/assemblies&lt;/em&gt;&lt;/strong&gt; area.  Add your assembly there and make sure that the Version and PublicKeyToken match the GAC.&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="418" alt="GacMatch" src="http://angryhacker.com/blog/images/angryhacker_com/blog/WindowsLiveWriter/HowtoreferenceanassemblyfromtheGAC_14BCC/GacMatch_3.jpg" width="610" border="0" /&gt;&lt;/p&gt;&lt;img src="http://angryhacker.com/blog/aggbug/25.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://angryhacker.com/blog/comments/25.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://angryhacker.com/blog/comments/commentRss/25.aspx</wfw:commentRss>
        <trackback:ping>http://angryhacker.com/blog/services/trackbacks/25.aspx</trackback:ping>
    </entry>
    <entry>
        <title>VB6 Swiss Army Knife</title>
        <link rel="self" type="text/html" href="http://angryhacker.com/blog/archive/2008/05/01/vb6-swiss-army-knife.aspx" />
        <id>http://angryhacker.com/blog/archive/2008/05/01/vb6-swiss-army-knife.aspx</id>
        <published>2008-05-01T00:33:57-07:00:00</published>
        <updated>2008-05-01T00:33:57Z</updated>
        <content type="html">&lt;h4&gt;&lt;/h4&gt; &lt;h4&gt;&lt;/h4&gt; &lt;h4&gt;&lt;/h4&gt; &lt;h4&gt;Consultant's guide to legacy development.&lt;/h4&gt; &lt;p&gt;Being a consultant, once in a while I have to forgo the modern niceties of OOP, Reflection, Refactoring, etc... and jump into the client's old Visual Basic 6 code.  But the experience doesn't have to be crappy - there are a lot of free add-ins that extend in VB in various ways and speed up development.  This is the list of tools that I typically install to be productive.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/windows/downloads/virtualpc/default.mspx"&gt;Microsoft Virtual PC 2007&lt;/a&gt;.  You can't have all that COM junk funking up your consulting laptop.  I have a Windows 2000 Professional virtual machine that has all the VB6 goodness installed on it.  For these days, Win2k is unbelievably lean.  The entire OS install, all the patches, plus all the dev tools you need typically weigh in at no more than 3-4 GB.  The price: free.  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.vmware.com/products/player/"&gt;VMware Workstation or VMware Player&lt;/a&gt;.  Same as above, but if you have to work with hardware (like USB devices or comm ports), this is your best bet, as Microsoft's tool does not support anything external really.  VMware Workstation prices range, while the VMware Player is free.  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.angryhacker.com/download/colclassmaster.zip"&gt;Collection Class Master Add-in&lt;/a&gt;.  The VB6 strongly typed collection generator.  Originally written by &lt;a href="http://www.dotnet2themax.com/blogs/fbalena/"&gt;Francesco Balena&lt;/a&gt;, the tool is invaluable to OCD types like myself.  &lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/robgruen/archive/2006/02/22/537288.aspx"&gt;VB6 Mouse Wheel fix&lt;/a&gt;.  It's not like the mice did not have mouse wheels when VB6 came out in 1997.  But for some reason, the support did not come in the box.  The mouse wheel was only useful if you bought an MS mouse and installed the Intellimouse drivers.  That insanity came to an abrupt end, when &lt;a href="http://blogs.msdn.com/robgruen/default.aspx"&gt;Rob Gruen&lt;/a&gt; of Microsoft came up with an add-in that fixed all that.  Price: free. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.angryhacker.com/download/pdsaclassbuilder.zip"&gt;PDSA Property Creator&lt;/a&gt;.  A total convenience tool - it does one thing and one thing only: create properties.  Sure, VB ships with a wizard that is supposed to do the same thing, but it sucks.  This one sucks a lot less.  Written by a well known author &lt;a href="http://www.pdsa.com"&gt;Paul Sheriff&lt;/a&gt;.  Price: free. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mztools.com/v3/download.aspx"&gt;MZTools&lt;/a&gt;.  When VB6 was in its prime, this was the add-in to have.  That has not changed.  It's got a lot of convenience tools, it's got some refactoring tools (except we didn't it "refactoring" back then), plus some statistical analysis and auto documentation support.  Price: free. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.vbrad.com/article.aspx?id=103"&gt;ADO Stored Proc Generator Add-in&lt;/a&gt;. A simple VB6 add-in that generates the mindless stored procedure wrapper code.  Sweet. &lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://angryhacker.com/blog/aggbug/24.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://angryhacker.com/blog/comments/24.aspx</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://angryhacker.com/blog/comments/commentRss/24.aspx</wfw:commentRss>
        <trackback:ping>http://angryhacker.com/blog/services/trackbacks/24.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Subtext port to MySQL - take 2</title>
        <link rel="self" type="text/html" href="http://angryhacker.com/blog/archive/2008/03/30/subtext-port-to-mysql---take-2.aspx" />
        <id>http://angryhacker.com/blog/archive/2008/03/30/subtext-port-to-mysql---take-2.aspx</id>
        <published>2008-03-30T12:38:25-07:00:00</published>
        <updated>2008-03-30T12:47:28Z</updated>
        <content type="html">&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 0px 10px 5px 0px; border-left: 0px; border-bottom: 0px" height="110" alt="image_3" src="http://angryhacker.com/blog/images/angryhacker_com/blog/WindowsLiveWriter/SubtextporttoMySQLtake2_8C02/image_3_3.png" width="119" align="left" border="0" /&gt; A while ago I ported &lt;a href="http://angryhacker.com/blog/archive/2007/11/06/subtext-ported-to-mysql.aspx"&gt;Subtext to MySQL&lt;/a&gt;.  I've gotten a bit of feedback that suggested that the port and specially MySQL integration could be much improved.  So, I addressed a couple of issues (see below), most of them having to do with variations of MySQL installations at various web hosting companies .  As before, this &lt;em&gt;is not an official version of Subtext, but simply my port from Microsoft SQL Server to MySQL&lt;/em&gt;.  Here is the good stuff:&lt;/p&gt; &lt;h4&gt;Downloads:&lt;/h4&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font style="background-color: #ffffff"&gt;&lt;a href="http://www.angryhacker.com/download/Subtext_1.9.5.538_for_MySQL.zip"&gt;Installation&lt;/a&gt; (2.84 MB)&lt;br /&gt;&lt;a href="http://www.angryhacker.com/download/Subtext_1.9.5.538_for_MySQL_source.zip"&gt;Source&lt;/a&gt; (22.7 MB)&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;h4&gt;Fixes:&lt;/h4&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font style="background-color: #ffffff"&gt;Removed the extra unneeded files&lt;br /&gt;Fixed the location of the MySQL provider&lt;br /&gt;Subtext now accounts for whether MySQL is case sensitive&lt;br /&gt;Subtext now comes with a MySQL provider that supports medium trust&lt;br /&gt;Added more debugging information during installation&lt;/font&gt;&lt;font style="background-color: #ffffff"&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;h4&gt;Minimum Requirements&lt;/h4&gt; &lt;blockquote&gt; &lt;p&gt;MySQL 5.x.  &lt;br /&gt;Anything else that regular Subtext &lt;a href="http://haacked.com/archive/2007/05/11/subtext-1.9.5-release.aspx"&gt;requires&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt; &lt;h4&gt;GoDaddy issues&lt;/h4&gt; &lt;p&gt;Seeing how almost every issue that was reported to me revolved around GoDaddy, here are easy 20 steps to blogging with Subtext for MySQL:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Login to GoDaddy&lt;/li&gt; &lt;li&gt;Go to &lt;em&gt;Hosting &amp;amp; Servers&lt;/em&gt; menu, then pick &lt;em&gt;My Hosting Account&lt;/em&gt;.&lt;/li&gt; &lt;li&gt;Click on the &lt;em&gt;Open&lt;/em&gt; link.&lt;/li&gt; &lt;li&gt;From the &lt;em&gt;Content&lt;/em&gt; menu, pick &lt;em&gt;IIS Settings&lt;/em&gt; and create a folder.  &lt;/li&gt; &lt;li&gt;Give the folder &lt;em&gt;Set Application Root&lt;/em&gt; and &lt;em&gt;Anonymous Access&lt;/em&gt; permissions.&lt;/li&gt; &lt;li&gt;From the &lt;em&gt;Content&lt;/em&gt; menu, select &lt;em&gt;File Manager&lt;/em&gt;, check the newly created folder, then click on the Permissions button.  Uncheck &lt;em&gt;Inherit&lt;/em&gt;, then give the folder &lt;em&gt;read/write&lt;/em&gt; permissions.&lt;/li&gt; &lt;li&gt;Go to &lt;em&gt;Databases&lt;/em&gt; menu and select &lt;em&gt;MySQL&lt;/em&gt;, then click &lt;em&gt;Create Database&lt;/em&gt; button&lt;/li&gt; &lt;li&gt;For version, pick 5.0.  Give the database a name.  Note that the User ID for the database and the Database name will be the same.&lt;/li&gt; &lt;li&gt;Go into &lt;em&gt;Edit/View Details&lt;/em&gt; of the database and you'll see various information.  Stay on this page, while doing the next set of steps.&lt;/li&gt; &lt;li&gt;Unzip the Installation file you just downloaded from this page and upload the contents into the folder you just created in your hosting account.&lt;/li&gt; &lt;li&gt;Open the &lt;em&gt;web.config&lt;/em&gt; (that resides in the folder you've created) in your editor of choice.  &lt;/li&gt; &lt;li&gt;Search for the following line: &lt;em&gt;&amp;lt;add name="subtextData"  connectionString="Server=YOUR_SERVER;Database=YOUR_DB;User ID=YOUR_USER_ID;Password=YOUR_PASSWORD" /&amp;gt;&lt;/em&gt;&lt;/li&gt; &lt;li&gt;Ok, remember all the way back in the step 9, I told you stay on that page.  Great.  &lt;/li&gt; &lt;li&gt;Replace &lt;em&gt;YOUR_SERVER&lt;/em&gt; with &lt;em&gt;Host Name&lt;/em&gt; (from the web page).  &lt;/li&gt; &lt;li&gt;Replace &lt;em&gt;YOUR_DB&lt;/em&gt; with &lt;em&gt;Database Name&lt;/em&gt;.  &lt;/li&gt; &lt;li&gt;Replace &lt;em&gt;YOUR_USER_ID&lt;/em&gt; with &lt;em&gt;User Name&lt;/em&gt;.  &lt;/li&gt; &lt;li&gt;Replace &lt;em&gt;YOUR_PASSWORD&lt;/em&gt; with whatever password you assigned yourself for the database.  Great, the part for identifying the database is done.  Let's move on.&lt;/li&gt; &lt;li&gt;Search for the following line:  &lt;em&gt;&amp;lt;trust level="Full" originUrl=".*" /&amp;gt;&lt;/em&gt;&lt;/li&gt; &lt;li&gt;Comment this line out.  That means place &lt;em&gt;&amp;lt;!--&lt;/em&gt; in front of the line and &lt;em&gt;--&amp;gt;&lt;/em&gt; at the end of the line.  So it should look like this:  &lt;em&gt;&amp;lt;!--&lt;/em&gt;  &lt;em&gt;&amp;lt;trust level="Full" originUrl=".*" /&amp;gt; --&amp;gt;  &lt;/em&gt;Why?  Because for whatever reason, GoDaddy no likey when someone tells it under what trust level to run.  So even if you set it to Medium or Low or whatever else, the site will still barf.  &lt;/li&gt; &lt;li&gt;That's it.  You are ready to start blogging.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt; &lt;h4&gt;Troubleshooting&lt;/h4&gt; &lt;p&gt;If the site still does not work, you can try &lt;a href="http://angryhacker.com/blog/archive/2007/08/16/setting-up-subtext-on-godaddy.aspx"&gt;these steps&lt;/a&gt; to get to the real error.  If you are still having issues, shoot me a message via the &lt;a href="http://www.angryhacker.com/blog/contact.aspx"&gt;Contact&lt;/a&gt; link at the top.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://angryhacker.com/blog/aggbug/23.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://angryhacker.com/blog/comments/23.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://angryhacker.com/blog/comments/commentRss/23.aspx</wfw:commentRss>
        <trackback:ping>http://angryhacker.com/blog/services/trackbacks/23.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Airlines, Users and UI Follies.</title>
        <link rel="self" type="text/html" href="http://angryhacker.com/blog/archive/2007/12/15/airlines-users-and-ui-follies.aspx" />
        <id>http://angryhacker.com/blog/archive/2007/12/15/airlines-users-and-ui-follies.aspx</id>
        <published>2007-12-15T13:54:00-08:00:00</published>
        <updated>2007-12-15T13:57:45Z</updated>
        <content type="html">&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="192" alt="Airport Kiosk" src="http://angryhacker.com/blog/images/angryhacker_com/blog/WindowsLiveWriter/AirlinesUsersandUIFollies_140BF/Airport%20Kiosk_3.jpg" width="244" align="right" border="0" /&gt; Recently I was talking to my relative who works at the American Airlines counter at the airport.  He was telling me that the kiosk computers, that are in most airports now, haven't made a dent in how busy the counters are.  Bottom line, he says, is that people are afraid of using computers.&lt;/p&gt; &lt;p&gt;I have a totally different opinion.  Just happened to fly a bit ago and used a kiosk to get a boarding pass.  My opinion is that the User Interface is &lt;strong&gt;ALL&lt;/strong&gt; wrong and that is what scares people off.  &lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Problem #1.&lt;/strong&gt;&lt;/em&gt; The starting page had 4 or 5 big touch buttons on it.  There was "Get a boarding pass", "Change seat assignment", "Change meal type", etc...  If you think about, 95% of the people are there to get the effing boarding pass.  The other 5%?  Who cares, that's why airlines have people at the counter - to handle edge cases.  Why confuse the 95% with other buttons.  The simple solution is crying out to be implemented.  Have a gigantic button, that takes 3/4 of the screen real estate, inviting you to get a boarding pass.  Even if you want the kiosk to handle other requests, there is nothing wrong with placing a small link in the bottom right that takes you to "Other Services".&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Problem #2.&lt;/strong&gt;&lt;/em&gt;  For identification, the kiosk asked me to provide a driver's license or a credit card.  Ok, no problem.  However, it wanted to me place it into an ATM style slot (e.g. it sucks the driver's license in wholly).  So, let's see, 5 minutes before my boarding time, I am supposed to trust a computer I've never seen and just blindly believe that I'll get my ID back?  Sorry, I've seen enough bugs in even most well written programs to know that sh*t happens.   How about providing a grocery style or swipe type of identification system.  &lt;/p&gt; &lt;p&gt;No wonder, nobody is using the kiosks.&lt;/p&gt;&lt;img src="http://angryhacker.com/blog/aggbug/22.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://angryhacker.com/blog/comments/22.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://angryhacker.com/blog/comments/commentRss/22.aspx</wfw:commentRss>
        <trackback:ping>http://angryhacker.com/blog/services/trackbacks/22.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Ok, you don't like Acrobat.  I get it.</title>
        <link rel="self" type="text/html" href="http://angryhacker.com/blog/archive/2007/12/05/ok-you-dont-like-acrobat.--i-get-it.aspx" />
        <id>http://angryhacker.com/blog/archive/2007/12/05/ok-you-dont-like-acrobat.--i-get-it.aspx</id>
        <published>2007-12-05T20:33:32-08:00:00</published>
        <updated>2007-12-05T20:33:32Z</updated>
        <content type="html">&lt;p&gt;Overheard from the &lt;a href="http://slashdot.org/comments.pl?sid=379981&amp;amp;cid=21581373" target="_blank"&gt;discussion&lt;/a&gt;on Slashdot about PDF and Adobe Acrobat:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;NOOOOO!!! please not another upgrade. It nags me three weeks before an upgrade. NO, I DONT WANT TO FUCKING UPGRADE!!! And three weeks after an upgrade. I ALREADY FUCKING UPGRADED IT!!! Then it resets all my file extension defaults and starts opening everything in Acrobat Reader 8 even though I've told it a million times to open with Acrobat Pro 5. Fucking piece of shit must die. &lt;/p&gt; &lt;p&gt;Note to Acrobat developers, if anyone asks what you do, lie. It could be me. I will fucking kill you and then skull fuck you. I will kill your fucking family and skull fuck them. I will kill your fucking pets and skull fuck them. I will burn your fucking house down and find a way to skull fuck that too. And no jury will convict, they'll wish they had gotten to you first.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Sorry. The first hundred pages of my shit list are devoted solely to Acrobat. Deep breaths, deep breaths.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://angryhacker.com/blog/aggbug/21.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://angryhacker.com/blog/comments/21.aspx</wfw:comment>
        <slash:comments>2</slash:comments>
        <wfw:commentRss>http://angryhacker.com/blog/comments/commentRss/21.aspx</wfw:commentRss>
        <trackback:ping>http://angryhacker.com/blog/services/trackbacks/21.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Kids say the darndest things. Episode 3.</title>
        <link rel="self" type="text/html" href="http://angryhacker.com/blog/archive/2007/11/15/kids-say-the-darndest-things.-episode-3.aspx" />
        <id>http://angryhacker.com/blog/archive/2007/11/15/kids-say-the-darndest-things.-episode-3.aspx</id>
        <published>2007-11-15T23:15:32-08:00:00</published>
        <updated>2007-11-15T23:15:32Z</updated>
        <content type="html">&lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 0px 0px 10px; border-right-width: 0px" height="183" alt="image" src="http://angryhacker.com/blog/images/angryhacker_com/blog/WindowsLiveWriter/Kidssaythedarndestthings.Episode3_1496A/image_6.png" width="244" align="right" border="0" /&gt; We are sitting at the pool with some friends of ours.  My 4 year old son is chatting with a buddy of his.  &lt;/p&gt; &lt;p&gt;His friend is excitedly telling my son about the last visit to the restaurant:&lt;/p&gt; &lt;p&gt;"You won't believe who I saw.  Kobe Bryant !!!"&lt;/p&gt; &lt;p&gt;"Really?", replies my son.  "And I saw french fries and chicken nuggets."&lt;/p&gt;&lt;img src="http://angryhacker.com/blog/aggbug/20.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://angryhacker.com/blog/comments/20.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://angryhacker.com/blog/comments/commentRss/20.aspx</wfw:commentRss>
        <trackback:ping>http://angryhacker.com/blog/services/trackbacks/20.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Kids say the darndest things. Episode 2.</title>
        <link rel="self" type="text/html" href="http://angryhacker.com/blog/archive/2007/11/13/kids-say-the-darndest-things.-episode-2.aspx" />
        <id>http://angryhacker.com/blog/archive/2007/11/13/kids-say-the-darndest-things.-episode-2.aspx</id>
        <published>2007-11-13T23:19:47-08:00:00</published>
        <updated>2007-11-13T23:20:35Z</updated>
        <content type="html">&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 0px 0px 0px 10px; border-left: 0px; border-bottom: 0px" height="163" alt="image" src="http://angryhacker.com/blog/images/angryhacker_com/blog/WindowsLiveWriter/Kidssaythedarndestthings.Episode2_1198B/image_6.png" width="244" align="right" border="0" /&gt;My wife is dressing my 3 year old boy.  &lt;/p&gt; &lt;p&gt;As she is putting a white T-shirt on him, she says: "Today, you'll wear a plane T-shirt".  &lt;/p&gt; &lt;p&gt;My kid looks at the T-shirt and asks: "Where is the plane"?&lt;/p&gt;&lt;img src="http://angryhacker.com/blog/aggbug/19.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://angryhacker.com/blog/comments/19.aspx</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://angryhacker.com/blog/comments/commentRss/19.aspx</wfw:commentRss>
        <trackback:ping>http://angryhacker.com/blog/services/trackbacks/19.aspx</trackback:ping>
    </entry>
</feed>