<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>URL &gt; Average</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/" />
    <link rel="self" type="application/atom+xml" href="http://aboveaverageurl.com/atom.xml" />
    <id>tag:aboveaverageurl.com,2007-09-05://1</id>
    <updated>2008-09-07T05:19:27Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Publishing Platform 4.0</generator>

<entry>
    <title>IPv6 and... software!</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2008/09/ipv6-and-software.html" />
    <id>tag:aboveaverageurl.com,2008://1.31</id>

    <published>2008-09-07T03:31:06Z</published>
    <updated>2008-09-07T05:19:27Z</updated>

    <summary>A protocol is nothing if never used. Well, okay, maybe it can be a joke. Maybe. Okay, so that&apos;s not really a protocol. Evil Bit jokes are still positive net karma, right?Likewise, IPv6 is pretty much useless if it is...</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
    <category term="ipv6" label="ipv6" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="software" label="software" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[A protocol is nothing if never used. Well, okay, maybe it can be a <a href="http://www.faqs.org/rfcs/rfc3514.html">joke</a>. Maybe. Okay, so that's not really a protocol. Evil Bit jokes are still positive net karma, right?<br /><br />Likewise, IPv6 is pretty much useless if it is never used. I can assign the addresses all I please but ultimately if all I do is ping my desktop that sits "behind NAT" with it then for the most part the effort was wasted.<br /><br />My server runs CentOS 5.2, my desktop runs Gentoo, my laptop Debian, my router Debian, my windows desktop Vista (dual boot Server 2008), and the Vista box also has three instances of OpenBSD running within VMWare.<br /><br />I've got a pretty good testbed to see just what does/doesn't support IPv6, in terms of everything general web browsing to random system daemons to whatever end user programs you have a desire to run. So, I put together a small bit of info concerning what handles IPv6 perfectly, what is kind of broken, and what just looks at it with a mystified look on its face.<br /><br />So to start:<br /><br /><i><b>Operating Systems</b></i><br /><br /><b>Windows</b><br />As far as I know, the first IPv6 stack was available for Windows 2000 via a separate download. XP bundled it by default, but left it uninstalled. Vista has the IPv6 stack enabled by default.<br /><br /><b>Linux</b><br />Got a pretty new IPv6 stack with 2.6. Had a working stack in 2.4. I'm pretty sure 2.2 had a functional stack too, as did 2.0. Don't quote me on that.<br /><br /><b>OpenBSD</b><br />Has supported IPv6 since 2.7.<br /><br /><br /><i><b>Services/Servers</b></i><br /><br /><b>Apache</b><br />Apache has support IPv6 ever since the 2.0 release. Every component of apache that I tested supported IPv6 just fine, from general web page serving to SSL to proxies. Considering how much of the web is still on 1.3, all of those hosts will have to be upgraded to 2.0+ before a much wider IPv6 web base is available.<br /><br /><b>IIS</b><br />IIS (the Microsoft webserver) has supported IPv6 from their 6.0 release, also known as Server 2003. Most places use at least 2003 on their servers, the era of Win2k webservers kind of died out with Code Red and all of those other worms.<br /><br /><b>MySQL</b><br />Just kind of sits and looks at IPv6 like it has no clue what it is. Which is actually <a href="http://bugs.mysql.com/bug.php?id=8836">entirely true</a>. Boo.<br /><br /><b>PostgreSQL</b><br />Talks happily with IPv6. At least I think. I'm too lazy to start my local copy and check. Their <a href="http://www.postgresql.org/about/featuredetail/feature.67">page on the matter</a> isn't what one would call descriptive. No clue when this support was added.<br /><br /><b>MSSQL</b><br />Supported since their 2005 release.<br /><br /><b>Oracle</b><br />Offically supported as of <a href="http://blogs.oracle.com/stevenChan/2006/07/25/">2006</a>.<br /><br /><b>Samba</b><br />Supported as of the 3.2 release, which was actually just on June 1st of this year.<br /><br /><b>Windows SMB/CIFS</b><br />Supported with XP and onward. Probably Win2000 too.<br /><br /><br />So the servers are looking pretty good. Unless you run MySQL, which is pretty much everyone. Boo.<br /><br />At a minimum, we can serve any content over HTTP just fine, and we can access most database just fine too, unless your name starts with a "My" and ends with a "SQL."<br /><br /><br /><br /><i><b>End-user programs</b></i><br /><br /><b>Mozilla Suite</b> (and Firefox, Thunderbird, Seamonkey and friends)<br />Native IPv6 support, ever since the year <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=23811">2000.</a> Still has some work to be done according to the <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=136898">meta bug</a>, but pretty much all of those bugs are on random operating systems that don't adversely change your ability to connect to IPv6 enabled sites.<br /><br /><b>Internet Explorer</b><br />Supported IPv6 ever since 4.0, once you applied a patch from their research division. Likewise real native support was probably with 5.0, if not it was by 6.0.<br /><br /><b>Outlook</b><br />Supported as of <a href="http://support.microsoft.com/kb/924469">Outlook 2007</a>.<br /><br /><b>Kopete</b><br />Supported. The KDE project has traces of IPv6 development starting around 1999. As far as I can tell, IPv6 is natively supported in every program in 3.5.<br /><br /><b>Pidgin</b><br />Supported. Not clue as of when due to the GAIM --&gt; Pidgin name change, and I'm far too lazy to figure that out.<br /><br /><b>MSN Messenger, AIM, ICQ and friends<br /></b>Who cares? (Likely not supported, though I doubt the client is the blocker in these cases.)<br /><br /><b>PuTTY<br /></b>Supported since <a href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/wishlist/ipv6-build.html">'04</a>.<br /><br /><b>OpenSSH(d)</b><br />Supported. Probably since forever. Go OpenSSH.<br /><br /><b>irssi</b><br />Supported!<br /><br /><b>mIRC<br /></b>Not supported without loading a third-party DLL. mIRC sucks anyway.<br /><br /><b>X-Chat</b><br />Supported.... on Windows since '03, *nix and friends likely even earlier.<br /><br /><br /><br />I could go on and on and on. I won't, because I have no desire to list hundreds of thousands of software packages and their relative IPv6 states. Plus I'm getting tired and this entire post was spontaneous. Not too bad for 30 minutes of google.<br /><br />But for the most part, we've got a great picture. Every operating system, browser, and web server supports IPv6 and supports it fantastically well. Nearly every program on *nix supports IPv6 and has for quite some time, and most of the big name Windows programs support IPv6 as well.<br /><br />Not mentioned here was DNS, but the protocol has had support for it since (just about) forever and now that we have AAAA records for the root servers in the public DNS, DNS is good to go with IPv6 from start to finish.<br /><br />Now we just have to work on the ISPs and home grade routers...<br /><br />Footnote: one of the comments I got on my initial IPv6 entry was someone reporting success in integrating their LAN with IPv6. While I'm glad to hear it, I'm even more glad that when I got the "unapproved comment has been posted" notification e-mail, the corresponding IP address was a v6 address. The second I had IPv6 up and running on my server, I threw in AAAA records for pretty much everything. If I had to guess, they didn't even know they were using IPv6 to view this blog and post the comment - which is exactly the goal.<br />]]>
        
    </content>
</entry>

<entry>
    <title>IPv6</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2008/08/ipv6.html" />
    <id>tag:aboveaverageurl.com,2008://1.30</id>

    <published>2008-08-31T05:04:56Z</published>
    <updated>2008-09-07T05:45:45Z</updated>

    <summary>Not too long ago, after reading yet another &quot;the internet is dying! We&apos;re running out of address space and it&apos;s all coming by November 2010 according to Cisco!&quot; I realized that, &quot;hey waitaminute - that&apos;s just about two years from...</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
    <category term="howto" label="howto" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ipv6" label="ipv6" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[Not too long ago, after reading yet <i>another</i> "the internet is dying! We're running out of address space and it's all coming by November 2010 according to Cisco!" I realized that, "hey waitaminute - that's just about <i>two years from now.</i> That's... <i>soon.</i>"<br /><br />So I setup IPv6 for the machines I own. I still depend on IPv4 simply due to IPv6 not being available... well, most anywhere. At least not natively.<br /><br />A big part of the reason that we don't have IPv6 in more places is because... well, circular dependency here, but because it isn't around. I can't plug my laptop into any other ISP's line and use IPv6 natively, and even if I could, the chances of the average home grade router working with it is about two.<br /><br />Out of thousands.<br /><br />So to get around this, <a href="http://tldp.org/HOWTO/Linux+IPv6-HOWTO/chapter-configuring-ipv6-in-ipv4-tunnels.html">IPv6 in IPv4 tunnels</a> are used. They do exactly what their name implies: tunnels IPv6 data within IPv4 packets. The downsides to IPv6 tunneling are latency/overhead and... your ability to keep your IP addresses. If you don't have native IPv6, then your current hosting provider or ISP won't be the one giving it to you - meaning you get to get the IPs from a third party company. When your hosting provider or ISP turns IPv6 on, what are the chances that you'll be able to reassign entire blocks of IPv6 address space? Probably not too great. If you've got Comcast as your home ISP, I don't think that your tunnel broker is going to happily move your address blocks over to Comcast's control - at all.<br /><br />While the latter point is generally a deal breaker for a lot of people, in the long run, I don't care. IP address reassignment happens all the time. There's no rule stating that you must drop your tunnels once you get native IPv6, and there's no reason why it would be overly problematic or painful either. Simply bring up the native IPv6, change the DNS records, and drop your tunnels a few days later.<br /><br />With this knowledge in hand, I went poking around the vast area known as the Internet and selected <a href="http://he.net/">Hurricane Electric's</a> <a href="http://tunnelbroker.net/">IPv6 Tunnel Broker</a>.  What really sold me (for free, that is) on using HE for my tunnel was really twofold: one, their <a href="http://he.net/news/Hurricane_Electric_IPv6_Update_April_2008.pdf">views on IPv6</a> (which boil down to "we'd really like to be in business when IPv4 is exhausted, so we're going to deploy native IPv6 everywhere, provide a tunnel broker for free for anyone and everyone, and we're going to do it three years before crunch time") and two, the fact that it was free.<br /><br />In selecting HE, I also got full reverse DNS control, selection of the closest HE router to my server, full control of a /64 subnet and a /48 subnet (by request, which I requested), the possibility of adding three more /64 subnets and three more /48 subnets to my account, and full operating system support (with instructions for setup with&nbsp; linux-net-tools, iproute2, *BSD, OSX, Solaris, Windows XP+, and Cisco).<br /><br />Not bad for $0. I'm a happy customer (and a potential customer should I ever need colocation/dedicated servers).<br /><br />I setup my account with HE, logged in, and was presented with simplistic instructions on how to setup my CentOS server.<br /><br /><pre>ip tunnel add he-ipv6 mode sit remote 209.51.161.58 local 64.22.124.36 ttl 255
ip link set he-ipv6 up
ip addr add 2001:470:4:b2::2/64 dev he-ipv6
ip route add ::/0 dev he-ipv6</pre><br />I created a new 'sit' tunnel named 'he-ipv6', with remote endpoint 209.51.161.58 - coming from 64.22.124.36 - and then turned the link up. Easy enough. Then I added my /64 allocation to the newly created tunnel, and pointed the default route through that tunnel.<br /><br />Wait a minute. That's it? I'm IPv6 enabled already?<br /><br /><pre>[kyle@averageurl ~]$ ping6 ipv6.google.com
PING ipv6.google.com(2001:4860:0:1001::68) 56 data bytes
64 bytes from 2001:4860:0:1001::68: icmp_seq=0 ttl=55 time=327 ms</pre>Yup...<br /><br />From there, I requested a /48 subnet so I could allocate a few full /64 subnets to my house (a /64 for my LAN, wifi, and secondary wifi), brought some more tunnels up, and then from my desktop...<br /><br /><pre>kyle@ksb ~ $ ping6 ipv6.google.com
PING ipv6.google.com(2001:4860:0:2001::68) 56 data bytes
64 bytes from 2001:4860:0:2001::68: icmp_seq=1 ttl=54 time=325 ms</pre><br />And now my desktop is IPv6 enabled. Go ahead, ping6 2001:470:d82b:ffff::2! You'll hit my home desktop. Then ping ::3 - my Vista box. Yup, that's right! My windows box is also on the IPv6 network. :fffe::2 would be my laptop on the wifi. The entire :fffd::0/64 subnet (and corresponding wifi AP) is unused currently, but perhaps once I decide to upgrade my router's software and play with wpa_supplicant that will change.<br /><br /><br />But why did I do this? What did I gain? Well, for starters, it was really fun to use HE's <a href="http://lg.he.net/cgi-bin/index.cgi">Looking Glass</a> to run a traceroute to my desktop...<br /><br /><br /><pre>Tracing the route to IPv6 node 2001:470:d82b:ffff::2 from 1 to 30 hops

  1     2 ms   &lt;1 ms   &lt;1 ms 2001:470:0:32::2 
  2    76 ms   75 ms   75 ms 2001:470:0:35::2 
  3   103 ms  103 ms  103 ms 2001:470:0:4b::2 
  4   103 ms  103 ms  103 ms 2001:470:0:8c::2 
  5   148 ms  148 ms  148 ms 2001:470:4:b2::1 
  6   234 ms  236 ms  238 ms 2001:470:d82b:ffff::1 
  7   234 ms  233 ms  233 ms 2001:470:d82b:ffff::2</pre>... while it sits behind my IPv4 NAT router. And then my Vista computer, and then my laptop connected to the wifi. Then I got to go take a look at <a href="http://www.kame.net/">The KAME project</a> and check out the dancing turtle. It turns out that Google's IPv6 site also has an animated logo.<br /><br />But in the end, I can now access all of my computers from behind NAT, without actually using any NAT - at all. I could drop the IPv4 addresses from some computers and still retain access to them, <i>full access.</i> This may prove to be both a blessing and a curse, but given time, we'll see..<br /><br />(And yes, I know I shouldn't be using ::1 for my routers, that'll change soon enough.)<br />]]>
        
    </content>
</entry>

<entry>
    <title>Well, hello there!</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2008/05/well-hello-there.html" />
    <id>tag:aboveaverageurl.com,2008://1.29</id>

    <published>2008-05-27T18:00:00Z</published>
    <updated>2008-05-27T20:43:15Z</updated>

    <summary>Clicking back over to my blog, I read some of the things that I had posted earlier. To be honest, reading those posts now scares me to a degree. Reading this, a year later, it is plainly obvious where I...</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
    <category term="blogging" label="blogging" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="metablogging" label="meta-blogging" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[Clicking back over to my blog, I read some of the things that I had posted earlier. To be honest, reading those posts now scares me to a degree. Reading this, a year later, it is plainly obvious where I had <i>no clue what so ever what I was talking about.</i><br /><br />That's always a fun feeling. "Oh, hey, look at all of this stuff I wrote about a year and a half ago. It's... it is... so.. entirely wrong. And to think I took my time to write that, scanned it once for typos (missed many), and then attached my name to it by clicking the big 'Save' button."<br /><br />I was sorely tempted to remove my existing content (content! ha!) and start over with this post, but that feeling quickly subsided when I remembered that no matter how hard I try, and no matter how little people may care, somewhere it was archived. Saved as organized bits on a disk somewhere in the world, indexed by multiple bots, and easily found by anyone looking for my name. Kinda creepy when you think about it.<br /><br />The other reason that I quickly gave that up, is equally simple. Some of it, I actually like. I've outlined in the past in great detail things which I still believe, and a lot of my philosophies. Sure, the ratio of posts I like is still nearly three to one, but hey, I'll live with it.<br /><br />After just over a year of not touching this blog, for reasons many, I think I'll be.. well, I don't want to say "back to blogging." There's too much cliche involved with that line. I can think of no quicker way to blog deletion than by announcing my triumphant return of posting random things that no one cares about on a website that no one subscribes to (let alone visits to post comments).<br /><br />Except of course, for the bots (feed aggregators included).<br /><br />But who knows what will happen!<br />]]>
        
    </content>
</entry>

<entry>
    <title>Windows is a perfect platform.</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2007/04/windows-is-a-perfect-platform.html" />
    <id>tag:aboveaverageurl.com,2007://1.28</id>

    <published>2007-04-05T20:15:53Z</published>
    <updated>2007-09-07T23:48:33Z</updated>

    <summary>Yup. I just said it: Windows is a perfect platform. Obvious counter argument: go out there and search for &quot;windows virus scanner&quot; and check that out: 1.38 million results on Google. 53,000 if you include the quotes. Either I&apos;m wrong,...</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
        <category term="Rants" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Windows" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[<p>Yup. I just said it: Windows is a perfect platform.</p>
<p>Obvious counter argument: go out there and search for "windows virus
scanner" and check that out: 1.38 million results on Google. 53,000 if
you include the quotes.</p>
<p>Either I'm wrong, or Google is lying to me. That's a lot of results
for a virus scanner. "Windows virus" turns up 134 million. Clearly,
Windows is anything but the perfect platform. My reasons as to why it
is regarded as an imperfect, shoddy, spyware-ridden platform are very
clearly written in a packet I got ahold of recently, concerning a
website which is used extensively at work. The website in question will
be launching with a new version soon, and to inform their customers of
the upcoming changes and needed alterations to your OS (read: Windows
and Internet Explorer) in order for this website to work.</p>
<p>Quoted directly from this thirty page packet: ... "you will need to
download a new control from the [XX] site, this requires that you be
administrator of your machines for that 1st export only. Unless it is a
big company with an IT department, you are likely administrator
already."</p>
<p>Let's put this in linux terms. "You are required to run as root in
order to get this piece of software to work. You are already running as
root, so don't worry about it."<br />
The problem with Windows isn't Windows. The problem with Windows is the
absurd number of poorly written software packages, all of which require
administrator rights. This is a website, not a system reconfiguration
utility. "I know! And, so, I only require administrator rights the
first round!" One of these days, I'm going to go find out why it
requires administrator rights at all.</p>
<p>This packet then proceeds to outline all of the needed steps to get
this new website up and running on the individual computers. This
process must be repeated for every user on every computer. For me, this
means driving between three buildings, located in Sandy, Salt Lake, and
Bountiful. For the curious, that's a <a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;q=Sandy,+Utah+to+Bountiful,+Utah" mce_href="http://maps.google.com/maps?f=q&amp;hl=en&amp;q=Sandy,+Utah+to+Bountiful,+Utah">half-hour drive</a>.
The total machine count is 37. Total miles driven will be just over 50.
Time spent in transit will be roughly an hour and a half, all things
considered. Once I hit the first building, however, the real work
begins. This packet outlines that the following changes need to be made:</p>
<ol><li>Adjust the settings of the popup blocker to whitelist said website.</li><li>Ensure that the cache settings are set to check for new versions of pages automatically (and then clean the cache out).</li><li>Add the website to the "Trusted Sites" security zone.</li><li>Adjust the security settings for the "Trusted Sites" zone to allow/do the following: <b>Enable
automatic prompting of ActiveX controls, enable binary and script
behaviors, download signed ActiveX controls, download unsigned ActiveX
controls, initialize and script ActiveX controls not marked as safe,
run ActiveX controls and plugins, script ActiveX controls marked safe
for scripting, enable automatic prompting for file downloads, enable
file downloads, and enable font downloads. </b>(These are the instructions for IE6. <b>IE7
also includes enabling Loose XAML, XAML browser applications, XPS
documents, allowing previously unused ActiveX controls to run without
prompting, and oddly, disabling video and animation on a webpage that
does not use them.</b>)</li><li>Go ahead and re-read point number four there. I even put the relevant points in bold for you, so by all means, have at it.</li><li>Check the computer for any of the following toolbars, and if they
are found, reconfigure them all individually to also allow popups from
the website in question: Google, Yahoo, AOL, MSN, "or anything besides
Standard Buttons, Address Bar or Links."</li><li>The remaining pages are  dedicated to disabling or reconfiguring any other possible popup blockers.</li></ol>
<p>It should be noted that not one of those steps included instructions
that told me how to download and install said unsigned, marked not safe
for scripting, "I need admin rights to continue" ActiveX control.</p>
<p>So, come the Monday morning that this launches, I get to drive
around more than I care to, tweaking more settings that need tweaked,
decreasing the default system security, installing ActiveX controls as
administrator.</p>
<p>There is nothing wrong with Windows; there is <i>everything</i>
wrong with the average software package (and/or website, as is this
case). Because of this, Windows doesn't even have a fighting chance. If
a website you loaded up suddenly popped up a box stating that it wanted
your root password to continue, what would you do?</p>
<p>Why don't you do the same thing on Windows though?</p>
<p>Oh, right, the <i>software</i> requires it.</p>
<p>The operating system isn't broken, just all of the third-party software is.
</p>
 ]]>
        
    </content>
</entry>

<entry>
    <title>PXE Booting: Part 1: What is/isn&apos;t PXE (netbooting)</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2007/02/pxe-booting-part-1-what-isisnt.html" />
    <id>tag:aboveaverageurl.com,2007://1.27</id>

    <published>2007-02-07T01:57:18Z</published>
    <updated>2007-09-07T23:48:13Z</updated>

    <summary>You know that funky option in your computer&apos;s BIOS, &quot;Network Boot Agent&quot;? Okay, so it goes by a lot of names. &quot;Networking Boot ROM,&quot; &quot;Integrated NIC ROM,&quot; the list goes on. Maybe you&apos;ve seen the &quot;Press F12 to network boot...</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
        <category term="Internet Technologies" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[<p>You know that funky option in your computer's BIOS, "Network Boot
Agent"? Okay, so it goes by a lot of names. "Networking Boot ROM,"
"Integrated NIC ROM," the list goes on. Maybe you've seen the "Press
F12 to network boot option" around. You see this, your curiosity gets
the best of you, so you hit F12. Suddenly your computer is scanning the
ethernet subnet for a DHCP server and acquiring an IP address!</p>
<p>Only to go away really fast and continue booting up your computer
without really telling you much. Awfully anti-climatic, if you ask me.
I mean really, you add an option to your boot order, hit the button to
make it go, and it starts doing all of these wonderful things only to
promptly "stop" and advance in the boot order without telling you a
thing.</p>
<p>Let's clear up the mysticism: what you (typically) just activated
and attempted to use was this thing called PXE. PXE stands for "Preboot
Execution Enviroment." Wikipedia has an <a href="http://en.wikipedia.org/wiki/Preboot_Execution_Environment" mce_href="http://en.wikipedia.org/wiki/Preboot_Execution_Environment">awesome article</a>
(also available on the German Wikipedia) on the details of PXE, but I
may be biased in thinking that because I assisted in it's writing.
Admittedly, it has changed a fair amount over time, but the content of
the article as a whole is still there. Now, come on, I know you're lazy
and didn't read all of that artice. I'd even go as far as to say you
didn't read any of it. So, if you're still wondering "What is this PXE
thing?" I'll answer that here and now.</p>
<p>PXE is in it's most simple terms, a boot device. At least, that's
what it appears to be to your BIOS. However, instead of spinning up
your hard drive, it fires up the NIC in your computer and starts
probing for DHCP (or BOOTP, but that won't be covered here. It's pretty
much obselete). Then, once it has acquired an IP address with the
needed DHCP options set, the PXE ROM goes about downloading and
executing files off of a TFTP server.</p>
<p>So, what is PXE? A way to boot your computer without the need of a
hard drive or any real physical storage medium. It's commonly known as
netbooting. The process, as outlined above, is pretty simple. The NIC
scans for a DHCP server, and then acquires an IP address. In it's brief
exchange with the DHCP server, the client is sent several "DHCP
Options" along with the IP address, one of which is commonly known as
"filename." If the client does not find this option, it gives up and
(typically) advances with the boot order. If it finds this option,
however, it tries to download the specified file off of a TFTP server.
An additional option which can be given is "next-server" which is the
IP address of the TFTP server to contact in order to download
"filename." If the "next-server" paramater is omitted, then it defaults
to the same IP as the DHCP server, and likewise tries to download
"filename" and in turn, execute the file it downloads.</p>
<p>That's it. That right there is the majority of what PXE "is" and how
it works. Why did your computer acquire an IP address only to just
continue on booting? Because you didn't have the needed DHCP options
set. To be fair, the huge majority (99%) of all home routers lack the
ability to configure the needed options, so it's likely you've never
even heard of "DHCP Options." However, my personal feelings on how
retarded home routers are do not belong here.</p>
<p>Let's move on to a "What is/isn't PXE" list real quick.</p>
<p>PXE is:</p>
<ul><li>A way of booting your computer without a hard drive or CD-ROM (or floppy, for you old people)</li><li>Very useful - does not require physical storage in the computer to work</li><li>Light - DHCP options and a TFTP server are the only requirements</li><li>Powerful - ever wonder what it'd be like to walk into a room of
computers, turn them all on, press F12, and come back an hour later to
fresh installs of (your OS here)? I've done it with Windows, and I must
say, it's management/installation/reinstallation bliss.</li></ul>
<p>PXE isn't:</p>
<ul><li>A way to "network boot this ISO image I have here" (but it is possible given time)</li><li>... even related to the boot loader or actual software side of the
computer. It downloads a file, it runs a file, that's IT. It's not a
kernel, it lacks any real form of hardware support. It exists to run
something else, not run your system for you.</li><li>Diskless booting. Sure, it CAN do that, but again, PXE isn't there to run your system for you.</li><li>Thin clients. Refer to above statement. And statement above said above statement. You get the idea.</li><li>Overly detailed. When I started messing with PXE, it made little
sense as a whole and felt very hacked together once I got it working.
This was largely due to a lack of documentation.</li></ul>
<p>In sum, PXE has a <i>vast</i> number of capabilities, but PXE in and
of itself is pretty much worthless. You can't feed it an ISO of a
bootable CD and say "Go!," nor can you magically make an entire lab of
computers run Firefox without hardrives. I'll admit it in full: PXE
does <i>not</i> run your computer for you. <i>You</i> are in charge of that. But, it certaintly can <i>help</i> in installing OSs or running entire diskless labs. If this seems unclear, I'm sure the latter articles will clear it up.</p>
<p>In the next few parts, I'll use the following software: ISC DHCP,
tftp-hpa, pxelinux, memtest86+, and maybe a little bit of the debian
installer. Who knows, maybe I'll splurge and go overboard with some
CentOS installation over PXE, but for the most part, you're safe with
the previous list. (Don't go downloading all of the debian CDs though,
as we won't be using them.)<br />
It should also be noted that I have written and maintain the only wiki
(that I know of anyways) that is dedicated to the topic of PXE booting.
For the curious, that wiki is available <a href="http://dev.brantleyonline.com/wiki/index.php/PXE_Booting_Index" mce_href="http://dev.brantleyonline.com/wiki/index.php/PXE_Booting_Index">here</a>.
</p>
 ]]>
        
    </content>
</entry>

<entry>
    <title>Making the Jump</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2007/02/making-the-jump.html" />
    <id>tag:aboveaverageurl.com,2007://1.26</id>

    <published>2007-02-03T21:22:08Z</published>
    <updated>2007-09-07T23:47:55Z</updated>

    <summary>Microsoft Windows Vista was recently released. To be honest, I&apos;m excited for it. It brings countless good things to the windows world, and to be blunt, XP is beginning to show it&apos;s age. (Windows 2000 is timeless though, in my...</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
        <category term="Windows" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[<p>Microsoft Windows Vista was recently released. To be honest, I'm
excited for it. It brings countless good things to the windows world,
and to be blunt, XP is beginning to show it's age. (Windows 2000 is
timeless though, in my opinion. Maybe I'll post my thoughts of Win2k vs
WinXP vs Vista eventually, we'll see.) Let me say that one more time:</p>
<p><b>I am glad that Vista was released. It is an upgrade. It is worth purchasing.</b>
There are too many advantages, both in terms of the technical side of
Vista, and user interface side of Vista, to think otherwise. Once
again: <b>Vista is good.</b></p>
<p>I run a network for small business. It's a Windows network, through
and through. Pair of Win2k3 servers in two locations, a copy of MSSQL,
and two point to point T1 lines linking three buildings together. It's
all built on Windows Server technology, and I'll be dead honest here: I
haven't found a better, easier to use, scalable server system than that
of Windows Server. Let's do this in bold too: <b>Windows Server is good. Windows Server makes me happy, and it makes all of the employees happy </b>(even though they could care less, they just want to work.)<b>.</b></p>
<p>So what did I do the day Vista was released to the public?</p>
<p>Blow away my last copy of WinXP. Destroy it. That was also my last
copy of anything Microsoft that I use for my own personal computing.
Hear that? <i>No more WinXP in my blood. No more XP on anything that I personally use, be it at home or at school. Bye WinXP.</i> Vista is out, and I don't care what the critics and journalists say: Vista is worth purchasing.<br />
So, I replaced my copy of XP with Linux.</p>
<p><i>And it feels good</i>. So very good.</p>
<p>My number one complaint about Vista is two-fold: versions, and
limited features/too many features. I run networks, I build networks.
My primary computer has five different NICs in it, three of them are
1000mbit and two of them are 100mbit. Further, I have a PCI wifi card
in there, and my router is a soekris box with a hand-rolled distro
running on a CompactFlash card. <i>I like my networks, and I like them a lot.</i></p>
<p>Know what I like MOST about networks? Network<i>ing</i>. You know,
intra-device communication. The flexibility that networking provides.
File is on another computer? So what, just click click, bam, your file
is in front of you, even if you're on the opposing side of the globe.
Networking is fun.</p>
<p>Networking with Vista is not. Now, don't get me wrong: new TCP/IP
stack? Re-worked IPSEC support? Hate to break it to you people, but
with about seven clicks (with Vista) I can literally move three
buildings from open TCP/IP to straight IPSEC communications between ALL
computers, using SSL certificates. Seven clicks, and I have a network
that runs IPSEC flawlessly, and effortlessly. And no, the IPSEC implementation isn't broken: <i>it works, and it works well.</i> I'm not trying to say that Vista has horrible networking with that earlier line. The network stack, the possibilities... I love.</p>
<p>What I hate is the arbitrary limitations imposed upon the different
versions of Vista. For example, lower end versions of Vista cap the
number of connections you can have to any specific computer at five.
Let's count.. my desktop, my other desktop, my laptop, my brother's
computer, the family computer, my sister's computer, and my xbox. Oops,
<i>seven.</i> Vista  Home Basic is out of the running.</p>
<p>Also, Remote Desktop (aka 'RDP') has been essentially removed from
Vista Home editions. I can't bring up the computer's display at will
anymore, I have to install VNC or something similar.<br />
It's these little things that get at me. Want feature X? Gotta spend
more money. More connections to a computer than Y? Yeah, spend more
money, but note that you're capped at 10 period unless you drop several
thousand on a copy of Windows Server, and oh, we don't have Vista
Server out yet, it'll be another year or so.</p>
<p>This is the biggest reason I switched to Linux: <i>there are no arbitrary limitations imposed. Anywhere.</i>
I can connect thousands of machines to this one, and I can type a
single line to bring a window from a desktop to my laptop, in a secure
fashion, from anywhere in the world.</p>
<p>Let me give you a scenario here, from my everyday work. At school, I
use my laptop for everything. Notes, research, papers, reading, the
works. All of my work is kept in a subversion repository. Because of
this, I can access my up to date notes from pretty much any computer
and any OS anywhere.</p>
<p>I get home, and turn my laptop on. It boots up, and I place it in
the dock. The laptop automatically detects that it has been docked, and
brings up the wired ethernet interface. As a part of this process, it
also registers with my LAN DNS server as it obtains an IP, and then
commits my most recent set of school notes to the subversion
repository. At this point in time, I can type a line into my desktop,
and update my desktop's copy of my notes with the most recent version.</p>
<p>Further, because it has registered with my LAN DNS server, I don't
need to worry about assigning static IPs. This can be taken one step
further: whenever anyone brings over their laptop, they get the same
treatment (I should mention that I run an iTunes server on my desktop
also. Not apple software, but linux software providing the same
functions).</p>
<p>Because I run linux on my laptop and desktops, I can type one more
line and bring up windows from my laptop on to my desktop. If I have a
bookmark I want to grab, I just run firefox on my laptop and watch the
window appear on my desktop.</p>
<p>Earlier up, I mentioned I have an xbox connected to my network, and
counted it as a computer connecting to my other computers. Why? It's a
modded xbox, running a copy of <a href="http://www.xboxmediacenter.com/" mce_href="http://www.xboxmediacenter.com/">XBMC</a>.
XBMC uses libsmb from samba to give it networking with other windows
computers, in addition to having UPnP support, and the ability to
browse for iTunes shares on the network.</p>
<p>You know those mockups that Microsoft and Apple have every so often,
where it shows the "house of the future"? Where someone walks in with a
laptop and wirelessly collaborates with the people in the home? How the
music is there to be listened to, the videos to be watched, and work
just "gets done" because of the transparent technology powering it?</p>
<p>Hate to break it to you, Microsoft and Apple, but I've already got
all of that and then some. It didn't cost me a dime, it works <i>flawlessly</i>,
and I can bring as many networked devices I please into the fold
without paying more to get around an arbitrary limitation. I've got an
xbox that can play any assortment of video and audio at 1080i
resolutions in 5.1 surround, laptops plug in (or wifi in) and
mystically "just work," and then "just work" with the desktops in a
beautiful unison.<br />
I should also note that the Windows Server network I run has its bits
moved around by linux routers. Sure, Windows Server powers the
desktops, but the bits don't move from site A to B to C on their own,
and quite frankly, I wouldn't want anything Microsoft doing that for me.</p>
<p><b>I love <i>open</i> networking</b>. As a direct result of
networking with open technologies, I already have the home of the
future. Plus, all of my private networking is encrypted, transparently.
Anything that's "open to the public" is, well, just that: open. It's a
beautiful thing.</p>
<p>Sorry Vista, you don't fit that bill <i>at all.</i>
</p>
 ]]>
        
    </content>
</entry>

<entry>
    <title>Secure PHP/Database Programming</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2006/12/secure-phpdatabase-programming.html" />
    <id>tag:aboveaverageurl.com,2006://1.25</id>

    <published>2006-12-17T18:38:09Z</published>
    <updated>2007-09-07T23:46:55Z</updated>

    <summary>This guy&apos;s post about returning to his original focus (which would be Perl, Python, and PHP) reminded me of a post I had long intended to publish. It&apos;s (briefly) titled this: &quot;How to correctly write PHP code in conjunction with...</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Programming" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="SQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[<p><a href="http://www.pthree.org/2006/12/16/were-going-in-a-new-direction" mce_href="http://www.pthree.org/2006/12/16/were-going-in-a-new-direction">This guy's</a>
post about returning to his original focus (which would be Perl,
Python, and PHP) reminded me of a post I had long intended to publish.
It's (briefly) titled this: "How to correctly write PHP code in
conjunction with databases." Long title, but I can't think of anything
shorter.</p>
<p>Foreward: My database of choice would be MySQL (again, it's a PHP
focused post). Note, however, that anything I mention here is easily
applicable to any database. I have done developement on PGSQL and even,
gasp, MSSQL, and likewise I'm quite confident that everything I mention
here as far as databases go should apply to pretty much anything.</p>
<p>PHP is probably the most used language on the web. Why? It is fairly
easy to pick up, and has a huge amount of support on pretty much any
server anywhere, never mind the monstrosities of pre-existing PHP
scripts you can download from... pretty much everywhere. Forums,
download sites, e-commerce sites, you name it, you can probably find a
PHP script doing it. However, as a result, it's one of the most
commonly attacked languages out there, and while it is incredibly easy
to pick up, it's not as easy to write PHP <i>properly</i> and in a secure manner.</p>
<p>Uh-oh, I wrote "PHP" and "secure" in the same sentence. That's a bad
thing. PHP has recently recieved a fair amount of flak for it's
security, or lack thereof. One of the lead programmers for PHP whose
sole purpose was really just to make PHP more secure, <a href="http://blog.php-security.org/archives/61-Retired-from-securityphp.net.html" mce_href="http://blog.php-security.org/archives/61-Retired-from-securityphp.net.html">stepped down</a>. <a href="http://www.heise-security.co.uk/news/82500" mce_href="http://www.heise-security.co.uk/news/82500">This article</a>
is a good read on the matter, for anyone curious. From what I gather,
he stepped down for one main reason, with another one on the side. The
main reason would be the response time to security holes. The side
reason would be a view that PHP was built insecure from the ground up,
and try as he might, that wasn't going to change.</p>
<p>That debate really comes down to "it's the programmer's fault for
coding that way" vs. "you shouldn't even allow that to happen, ever."
And it's true: improperly coded PHP is a complete nightmare, riddled
with security holes, both in code and in function, and it turns into a
complete mess quickly.</p>
<p>Now, let's avoid all of that, shall we?</p>
<p>Point #1: Check all of your data for validity.</p>
<p>Now, this is no small order. PHP is typically used to take user
input, process it, and then output it. Right there, you have three
places a malicious user can attack your code: the input, the
processing/storage of the data, and finally, the output.</p>
<p>The input is one of the most commonly checked and parsed things,
and, in my opinion, wrongly so. Assume, for a moment, that everyone
everywhere is a non-malicious user. Why shouldn't they be allowed to
have a username of "<a href="http://www.governmentsecurity.org/articles/SQLinjectionBasicTutorial.php" mce_href="http://www.governmentsecurity.org/articles/SQLinjectionBasicTutorial.php">admin' or 1=1--</a>"?
Sure, it's a little weird, but then again, so is the internet as a
whole. End result, most people code to strip out less commonly used
characters. Others call htmlspecialchars(), and other flat-out deny
query execution when some special characters are detected. Oh, and then
you have the swarm of mysql_real_escape_string() people, and as a
result, every other line will be mysql_real_escape_string().</p>
<p>Now, admittedly, the last bit there (mysql_real_escape_string()) is
a real and valid solution to the bigger problem of SQL injection. But,
it is not optimal. Optimal would be using SQL statements in combination
with stored procedures. Currently, only MySQL is supported directly
with stored procedures, by ways of the mysqli functions. However, PHP's
<a href="http://us3.php.net/manual/en/ref.pdo.php" mce_href="http://us3.php.net/manual/en/ref.pdo.php">PDO</a>
project is coming along very nicely, and with that you can use SQL
statements with pretty much any database out there. SQL statments are,
to put it simply, a way of using SQL queries in a manner that
guarantees you will never be vulnerable to the most common type of SQL
injection attacks (which is generally input manipulation).</p>
<p>Now, before you touch the database (I know, I'm out of order), you
can do other sanity checks on your data. Take for instance, the ever
common URL, http://example/page.php?id=1. It's that ?id=1 part that is
common, and further, non-specific to PHP. My question to you is this:
why is it that you have countless webpages where ?id=1 is a security
hole? You can make your data checks really, really easy here: <a href="http://us3.php.net/manual/en/function.is-int.php" mce_href="http://us3.php.net/manual/en/function.is-int.php">is_int()</a>.
Really, think about it. You can completly skip all forms of data
validation in this example, by checking the results of $_GET["id"] with
is_int(). Is there ANY reason why $_GET["id"] should be anything but a
number? No? So then why are you spending so much time checking for odd
characters that shouldn't be there, when you could merely check the
datatype and know for sure that it's legit?</p>
<p>This can also easily apply to strings, or to be more defined, <a href="http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html" mce_href="http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html">UUIDs</a>
(On that page, search for "UUID()", it's roughly 2/3 of the way down).
If you know that a UUID will always be in
theaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee format, you could use a regular
expression to check that easily (not to mention to check that it only
contains a-Z and 0-9 chars).<br />
Point #2: Proper database security and design</p>
<p>If you've ever installed a PHP script that used SQL, it asked you
for a login to a SQL server of your picking. In my opinion, it should
ask you for <i>two</i> seperate logins. "Why?" That's an easy answer.</p>
<p>As it stands now, any SQL username and password you provide to a
script, generally has complete reign over the database. SELECT, UPDATE,
DELETE, the works. This poses the question: Why should someone viewing
a page (not editing, adding, removing, etc.) even have the rights to
turn a query around and run a DELETE? Does that even make sense? I sure
hope not.</p>
<p>The solution to the problem is this: have two users, with differing
rights on the SQL server itself. The first user should really only have
SELECT, the ability to run a stored procedure, check out a view or two,
and... that's it. Even at that, stored procedures that only execute
SELECT. I can't name one reason why an anonymous page view should use a
connection to the SQL server with enough rights to run an UPDATE. It
just makes no logical sense. The second user, however, still shouldn't
have UPDATE rights: rather, it should only have the ability to execute
stored procedures. Stored procedures protect your data, and can
sanitize code everywhere. Again: there is no reason why an anonymous
page view should even have the rights, let alone ability, to run an
UPDATE or a DELETE query. So, um, please stop allowing such things. It
will make the world a nicer place.</p>
<p>Point #3: Taking point #2 a step further, and seperating the code that writes from the code that reads.</p>
<p>PHP 5.0 introduced a lot of very useful object oriented
capabilities. Take for example, a mock forum, with the following
functions: $forum-&gt;view-&gt;thread(),
$forum-&gt;update-&gt;thread(). Again, there is no reason at all why
view-&gt;thread() should be calling update-&gt;thread(). Functions and
classes can be marked as private, protected, and public: please do so.
Before someone goes off and states "but end users can't execute PHP
code that I didn't write!", think again. It <i>can</i> happen. It <i>has</i> happened before. It <i>is</i> preventable. Plus, this makes your code cleaner and enforces good coding habits all around.</p>
<p>Point #4: Check your SQL output</p>
<p>As yes, the ever popular login string of "admin' or 1=1--". Commonly
used is poorly coded web scripts to gain a login as the user "admin",
you can simply google around for this and see countless example of it
pretty much everywhere.</p>
<p>But there's a bigger problem with this. Let's assume for a moment
that someone used this on a poorly coded website and succeded with a
login as user "admin." The real problem? The "or 1=1" bit. <i>You just selected every single user in the database.</i>
Here's yet another sanity check, useful for such things: *_num_rows().
This is an incredibly simple check all around: if you're trying to log
in one user, and you get four rows back, you know something somewhere
is wrong. So.... why do you allow it?</p>
<p>All of the above can really come down to two main points: data
validation, and not allowing the database rights, but rather
abstracting the rights into stored procedures. Data validation is
usually taken too far in the wrong direction (stripping characters, not
allowing query execution), while database rights are completly
overlooked. All that data validation should be, is simple sanity checks
(like is_int() and *_num_rows()). Used in combination with SQL
statments and stored procedures (with limited database access on top),
you'll quickly come to see just how secure PHP can really be.</p>
<p>The biggest problem with PHP out there currently? People try to
secure their scripts, and then they do it incorrectly. "But I stripped
out all of the backslashes!..."
</p>
 ]]>
        
    </content>
</entry>

<entry>
    <title>Installing Subversion for the small business (website)</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2006/12/installing-subversion-for-the.html" />
    <id>tag:aboveaverageurl.com,2006://1.24</id>

    <published>2006-12-13T06:47:34Z</published>
    <updated>2007-09-07T23:46:35Z</updated>

    <summary>I maintain two websites for my company. By &quot;maintain&quot;, I mean &quot;run the server, and let someone else update them.&quot; I wrote the code for one of them, and the other is a static webpage which hasn&apos;t changed in years....</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
        <category term="Internet Technologies" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[<p>I maintain two websites for my company. By "maintain", I mean "run
the server, and let someone else update them." I wrote the code for <a href="http://www.petteylegal.com/" mce_href="http://www.petteylegal.com/">one of them</a>, and the <a href="http://www.1stnationaltitle.com/" mce_href="http://www.1stnationaltitle.com/">other</a>
is a static webpage which hasn't changed in years. Those are just the
public ones, and I have plans to add several more internal websites as
we expand.</p>
<p>Oh, "as we expand." Seeing as every site will have it's own T1 line,
point to point T1 line, and linux/windows server combo, this means that
I could host the public (and private) websites on a lot of IPs, and a
lot of servers. However, I really really didn't want to have to
maintain and update website code on multiple servers. The solution?
Subversion.</p>
<p>As it stands now, we have company sites A, B, and C. C is merely a
remote location without any servers, linked into it all with a point to
point T1. Likewise, we're going to ignore that site completly. A is
considered the "home" building, and I work in the B building. The B
building actually has space for IT equiptment, and likewise that's
where the large majority of it resides. Sites A and B each have a
linux/windows server combo, but site B also has a <a href="http://boredom.brantleyonline.com/?p=27" mce_href="http://boredom.brantleyonline.com/?p=27">decent sized RAID array</a>. So, I picked the 1.2TB RAID array to house the actual subversion repositories.</p>
<p>I setup the repo server to be served over apache. I didn't bother
with SSL because 1) the point to point T1 lines run IPSEC and 2) apache
is configured to allow the login "server/server" from a hard-coded list
of IPs (which would be the servers). The server login is not allowed
write priviliges either. If you were to try to access the SVN repo from
anywhere else, the server login would not work, and further I'm the
only other one with a login. Seeing as I'm sitting about four feet away
from the SVN server, I'm not worried about plaintext transmission (but
I'll fix that when I get around to it).</p>
<p>The repo itself contains 1) all of the needed apache vhost config
files, 2) htaccess files and 3) all of the actual website data. Due to
items one and two, in httpd.conf I can throw in the line "Include
/srv/conf/vhosts/*" and never worry about having to configure apache
ever again. Likewise, if I really screw something up, it's easy to
revert all of the servers at once to a working configuration.</p>
<p>Logging is still one thing I need to figure out. Currently, the
vhosts are just set not to log anything at all. I need to think up a
way to store the logs locally on each server, yet still manage to
generate statistics for all of the servers combine. The best I can come
up with so far is a daily rotation of the logs, only at the end the
previous logs are shipped off to be stored somewhere (and likewise
merged together, and then analyzed). Unless anyone else has any better
ideas, I'll probably wind up doing that in the near future.</p>
<p>The servers have a cron job that runs nightly, which will execute
`svn up` in /srv, and then /etc/init.d/apache2 reload. That's it.
That's really all that there is to it.</p>
<p>Now I have a versioned setup for multiple servers. Further, it's
rather easy to add additional servers: USE="mysql apache2" emerge
apache php; cd /; svn co http://svn/srv. Tada. All done, just like that.</p>
<p>I would like to point out, however, that there is a reason I did not
use NFS for this. Firstly, that's a single point of failure over an
already incredibly loaded point to point T1 line. That's also the
second reason: less traffic going over the links that would be better
used to serve people files as they work through the day. Lastly, I just
don't like NFS much.</p>
<p>Plus, it allows me to update any aspect of the websites from any
computer. Never mind the local copy I can keep on my laptop and desktop
at work.</p>
<p>As a direct result of installing subversion to maintain a few
websites, I've simplified the management that I have to do, increased
my ability to effectively admin multiple servers at once, and cut back
on bandwidth running inbetween the two sites.</p>
<p>Subversion: what do you want to do today?
</p>
 ]]>
        
    </content>
</entry>

<entry>
    <title>A few reasons why I hate digg.com and all of it&apos;s &quot;users.&quot;</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2006/11/a-few-reasons-why-i-hate-diggc.html" />
    <id>tag:aboveaverageurl.com,2006://1.23</id>

    <published>2006-11-26T05:54:53Z</published>
    <updated>2007-09-07T23:46:16Z</updated>

    <summary>Ah, digg. You came around some time ago, right as &quot;Web 2.0&quot; was getting really big. Throw in the &quot;show/hide&quot; comment javascript magic and you were a perfect fit for web 2.0 and AJAX (which you really are not, despite...</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
        <category term="Rants" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[<p>Ah, digg. You came around some time ago, right as "Web 2.0" was
getting really big. Throw in the "show/hide" comment javascript magic
and you were a perfect fit for web 2.0 and AJAX (which you really are
not, despite the fancy "show/hode" comment javascript... oh right, 2001
tricks).</p>
<p>Let's review a recent "digg": "<a href="http://digg.com/gaming_news/World_of_Warcraft_scans_players_Internet_Explorer_browsing_history" mce_href="http://digg.com/gaming_news/World_of_Warcraft_scans_players_Internet_Explorer_browsing_history">World of Warcraft scans player's Internet Explorer browsing history</a>".</p>
<p>GASP! A GAME! SCANNING MY HISTORY! INVASION OF PRIVACY AND I'M GOING TO BOYCOTT AND SUE!</p>
<p>For the linked picture, aka "proof" to all of you digg users, go <a href="http://xs109.xs.to/xs109/06470/Warden.jpg" mce_href="http://xs109.xs.to/xs109/06470/Warden.jpg">here</a>. For those of you who don't care to click (I'd be one of them in your shoes, I <i>am</i> rather boring), it's a screenshot of one of the best windows programs of all times: <a href="http://www.microsoft.com/technet/sysinternals/utilities/ProcessExplorer.mspx" mce_href="http://www.microsoft.com/technet/sysinternals/utilities/ProcessExplorer.mspx">Process Explorer</a>.
In this screenshot, it shows a running copy of World of Warcraft
(WoW.exe), and then it lists every file opened by WoW.exe.
Semi-surprisingly, listed, is the poster's Internet Explorer history.
C:\Document and Settings\Greg\Local Settings\Temporary Internet
Files\Content.IE5\index.dat. Yup, that's the history all right.</p>
<p>For those of you who don't know, and I'd assume that number to be
many, World of Warcraft employs a nice little thing called "The
Warden." The Warden is WoW's anti-cheat. But, not really. That's yet
another misconception. The Warden runs every 10 or 15 seconds, <i>searches out every running process, takes a <b>hash</b> of the process name, and compares it against a list of "known bad" (read: botting, hacking, etc.) programs. </i>Yup, that's it. Compared to things like <a href="http://en.wikipedia.org/wiki/PunkBuster" mce_href="http://en.wikipedia.org/wiki/PunkBuster">PunkBuster</a>, the Warden is amazingly tame. It does basically nothing.</p>
<p>But never underestimate the power of stupidity, especially when it
numbers in the seven million users range. Their anti-cheat has been
accused of sending Social Security numbers, bank account numbers and
PINs, e-mail addresses, and other "private information that I don't
want Blizzard to have." None of this is true, of course, but again:
stupidity comes with numbers. Will said anti-cheat read your Quicken
title bar and grab your bank account number? Sure will. Will it send it
off to Blizzard? Nope. Remember: it <i>hashes</i> the process name and then <i>compares that hash to a list of known botting programs.</i></p>
<p>Average digg.com user: "So why in the world," (no pun intended) "is
this game reading my history? I know you have an anti-cheat, and I know
that it's rather invasive: BLIZZARD IS SCANNING MY WEB BROWSING
ACTIVITY AND SENDING IT ALL BACK TO THE MOTHERSHIP!" Word for word? No.
But do read the comments to the above link, and you'll find several
people stating that.</p>
<p>The screenshot <i>proves that WoW.exe can read your history. Nothing more. It does not prove anything more than that, period.</i> "But the screenshot..! The open files!" In the  words of the digg.com post:</p>
<p><i>"The linked screenshot provides proof that WoW developer Blizzard
is actively scanning players' browsing history and cookies. Early
speculation is that this is a countermeasure against cheaters, but
players are arguing that Blizzard has no right to access this highly
private data."</i></p>
<p>Hate to disappoint you, diggers: WoW <i>uses Internet Explorer as part of the in-game engine.</i> No wonder it has access to the history, it's using the browser! No joke? No joke, and no kidding. Want some proof? <a href="http://www.wowwiki.com/API_SimpleHTML_SetText" mce_href="http://www.wowwiki.com/API_SimpleHTML_SetText">Here you go</a>. Some more? <a href="http://launcher.worldofwarcraft.com/" mce_href="http://launcher.worldofwarcraft.com/">More proof for you</a>! One last bit? <a href="http://launcher.worldofwarcraft.com/alert" mce_href="http://launcher.worldofwarcraft.com/alert">Sure</a>!
Even more proof? Here's the HTTP header that the launcher sends:
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;
.NET CLR 1.1.4322; .NET CLR 2.0.50727)". Check that stuff out. Blizzard
has a reason to be in your history! Even though they aren't. Shock.</p>
<p>"But the second link you gave there is just the launcher which runs
before you start the game, and the last one is just a blank page!"
Yeah, you got me there. That's because there aren't any alerts at the
time of posting. And further, it's the "alerts" that are displayed <i>in game when you login.</i>
Seriously. You know - that box you see sometimes when you login, that
reads: "These realms are down/will be down! Enjoy your stay in WoW, and
we're deeply sorry." Yup, that's a webpage, and yup, WoW.exe uses
Internet Explorer to render it.</p>
<p>Which brings me to my (*ahem*) point. Digg users are lemmings. Here
I thought the the slashdot moderation system encouraged "group think",
but that's capped from -1 to +5. Digg is probably capped to 2^32,
allowing for stupidity and group think to the scale of 4294967296. <i>Because
one person posted a screenshot and said, "here, proof that they WATCH
ALL OF YOUR BROWSING HABITS," several hundred people hopped on the
bandwagon of "lemming," walked on over to the World of Warcraft forums,
and began spamming.</i> They don't know any better: <i>they're just another lemming.</i></p>
<p>Digg, while "cool," "popular," "web 2.0-ie," and "high traffic," has
also become a synonym for "sheer and utter stupidity on a grand scale."
It has one or two cool or funny links every so often, but the huge
majority of anything on there is just sheer stupidity. Do I care about
some guy's experience at a <a href="http://windell.oskay.net/humor/qqqfiles/extras/taco.html" mce_href="http://windell.oskay.net/humor/qqqfiles/extras/taco.html">Taco Bell</a>? Or a <a href="http://sharjeelsayed.blogspot.com/2006/03/beat-censorship-using-these-proxies.html" mce_href="http://sharjeelsayed.blogspot.com/2006/03/beat-censorship-using-these-proxies.html">list of proxies</a>? Maybe a <a href="http://www.tokenarcade.com/play-575-Distraction_Game.html" mce_href="http://www.tokenarcade.com/play-575-Distraction_Game.html">really annoying, incredibly simple game</a>? An <a href="http://www.amazon.com/gp/discussionboard/discussion.html/ref=cm_cd_ef_tft_tp/103-7691372-0737418?ie=UTF8&amp;cdForum=FxG25YX6U23CQ1&amp;cdThread=TxFM5QIRVZ1XXL&amp;displayType=CVote" mce_href="http://www.amazon.com/gp/discussionboard/discussion.html/ref=cm_cd_ef_tft_tp/103-7691372-0737418?ie=UTF8&amp;cdForum=FxG25YX6U23CQ1&amp;cdThread=TxFM5QIRVZ1XXL&amp;displayType=CVote">idiot suing Amazon</a>?</p>
<p>I believe a very good (not) description of the site is the one found if you google "digg": "<font size="-1">Technology focused news site where the stories are chosen by community members rather than editors." </font></p>
<p>Lemmings, I tell you.
</p>
 ]]>
        
    </content>
</entry>

<entry>
    <title>A public apology to the internet as a whole...</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2006/11/a-public-apology-to-the-intern.html" />
    <id>tag:aboveaverageurl.com,2006://1.21</id>

    <published>2006-11-03T21:19:28Z</published>
    <updated>2007-09-07T23:45:57Z</updated>

    <summary>About two weeks ago, my sister was hit by an IM worm. &quot;hey - i&apos;ve got pictures of the group&quot; from a good friend. Clickey clickey, bam, trojan&apos;d. This happened relatively late at night, so the following evening she came...</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
        <category term="Internet Technologies" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Windows" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[<p>About two weeks ago, my sister was hit by an IM worm. "hey - i've
got pictures of the group" from a good friend. Clickey clickey, bam,
trojan'd. This happened relatively late at night, so the following
evening she came down and asked me to fix it. A recap of what I found:</p>
<ul><li>Eight programs that phone home, download binaries, and run them</li><li>Seven trojans/backdoors</li><li>Eleven random viruses</li><li><i>One spambot<br />
</i></li></ul>
<p>Note the italics.</p>
<p>As I was cleaning the system out (before I knew of the spambot), I
noticed the wireless connection was in heavy use. I didn't think too
much about it, as it had several viruses on it then, but I also needed
the networking in order to properly clean the system. It wasn't until I
tried Trend Micro's Housecall service that I really looked into the
networking problem, and noticed four packets sent for every one
recieved.</p>
<p><i>Oops.</i></p>
<p>I grabbed a laptop, fired up an SSH session to my router, and then
started the tcpdump. I must admit, while I hate spam, it was sending a
seriously impressive volume of spam per minute. I reset tcpdump to only
output data headed to :25/tcp remote, and it was connecting to a good
fifty different servers per minute. <i>Fifty different servers per minute. That's a ton of spam, and it was all going over my home cable connection.</i></p>
<p>I decided I had better fix that little problem quickly, and that meant an iptables rule. Behold the results:</p>
<pre>pkts bytes target     prot opt in     out     source               destination&gt;</pre>
<pre>5488  263K DROP       tcp  --  *      eth0    0.0.0.0/0            0.0.0.0/0           tcp dpt:25</pre>
<p>5488 different connection attempts in a matter of minutes. That's a lot of spam.</p>
<p>What scares me is that this was just one computer on a home
residential computer. If my sister was hit with this worm, that means
her friend also has it. And due to the nature of the IM networks, that
likely means everyone my sister knows, and everyone of them and all of
their contacts, also have this spambot churning out e-mail to the
public as a whole.</p>
<p><i>Did I mention that's a lot of spam?</i></p>
<p>So, internet, sorry for not selectively blocking :25/tcp outbound in
the first place. Sorry for sending out more spam in minutes than I get
legit e-mail in three weeks. Oh, and sorry for having family members
that don't know *nix. On the flip side, I have yet to see a good MSN
client for *nix that features audio and video chat too, so until you
can get me (or rather, my sister) that...
</p>
 ]]>
        
    </content>
</entry>

<entry>
    <title>What I Really Want Out of Web 3.0</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2006/11/what-i-really-want-out-of-web.html" />
    <id>tag:aboveaverageurl.com,2006://1.22</id>

    <published>2006-11-03T21:13:03Z</published>
    <updated>2007-09-07T23:45:24Z</updated>

    <summary>Tagging. It&apos;s all the craze now. It&apos;s helpful too, as it lets me select and find what I want out of an incredibly large amount of data. Tagging is the future! So is Web 3.0. And this is what I...</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
        <category term="Internet Technologies" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Misc." scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[<p>Tagging. It's all the craze now. It's helpful too, as it lets me
select and find what I want out of an incredibly large amount of data.
Tagging is the future!</p>
<p>So is Web 3.0. And this is what I want out of it:<br />
<a href="http://boredom.brantleyonline.com/wp-content/uploads/2006/11/cars.jpg" mce_href="http://boredom.brantleyonline.com/wp-content/uploads/2006/11/cars.jpg"><img src="http://boredom.brantleyonline.com/wp-content/uploads/2006/11/cars.jpg" alt="What I Really Want Out of Web 3.0" id="image37" mce_src="http://boredom.brantleyonline.com/wp-content/uploads/2006/11/cars.jpg" /></a></p>
<p>(Right-click, View Image to enlarge, or whatever it is that you crazy IE users use. Or, heck, just click it.)
</p>
 ]]>
        
    </content>
</entry>

<entry>
    <title>Deploying Jabber and Miranda IM: thoughts and comments</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2006/09/deploying-jabber-and-miranda-i.html" />
    <id>tag:aboveaverageurl.com,2006://1.20</id>

    <published>2006-09-21T18:52:16Z</published>
    <updated>2007-09-07T23:45:03Z</updated>

    <summary>I recently installed a jabber server for my small office(s). We recently expanded to three separate buildings, one in Sandy, one in Salt Lake City, and another in Bountiful. Likewise, suddenly the ability to communicate was limited by phones and...</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
        <category term="Internet Technologies" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Windows" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[<p>I recently installed a jabber server for my small office(s). We
recently expanded to three separate buildings, one in Sandy, one in
Salt Lake City, and another in Bountiful. Likewise, suddenly the
ability to communicate was limited by phones and e-mail, and for the
large majority (80%) of the needed communication, both of those options
were either overkill (one-line e-mail?) or impractical (staying on hold
for 30 minutes, tieing up a phone line, to ask a single six-word
question).</p>
<p>It's funny how little we value the ability to easily communicate until it's suddenly not so easy.</p>
<p>I started out trying to install <a href="http://ejabberd.jabber.ru/" mce_href="http://ejabberd.jabber.ru/">ejabberd</a>,
but failed miserably. In both the Sandy and Salt Lake offices, I have a
modest linux router installed, doing all routing/firewalling/networking
in general. Likewise, throw in the DNS SRV records on a per-site basis,
in theory I would have been able to point all clients to the same host,
but end result have them all wind up connecting to their local instance
of ejabberd.</p>
<p>For those of you who don't know, ejabberd is famous for it's ability
to cluster and fail/fault-over abilities. It uses a database that is
essentially distributed by default. Further, it has a very nice web
interface for management, along with a shared roster (list of people on
the service) built-in. Sadly, I never was able to get the distributed
part of it (<i>the</i> reason to use it) working. I would add a user on
one side, and magically, that user would never appear on the other.
Huh, oh well.</p>
<p>I wound up reverting back to the tried and true method (for me, anyways) of getting a jabber server up and running: <a href="http://jabberd.jabberstudio.org/2/" mce_href="http://jabberd.jabberstudio.org/2/">jabberd2</a>.
Jabberd2 is not distributed like ejabberd, but it also typically uses
MySQL as the backend (granted, ejabberd can also, and I've never tried
to do so either, but I also know how to make jabberd2 work, and that's
what I wanted here), which I'm rather familiar with.</p>
<p>So, about twenty minutes after I gave up on ejabberd, I had a
functional jabberd2 server, up and ready to go. (For those of you
curious, I have a 1.2TB RAID5 array, on which the database server is
running. Overkill, yes, but I don't want to burden the router down with
a database server.) Now for the fun part: the client, the program that
everyone will actually be using.</p>
<p>All of the clients are running Windows XP, along with two or three Windows 2000 boxes. jabber.org has an <a href="http://www.jabber.org/software/clients.shtml" mce_href="http://www.jabber.org/software/clients.shtml">impressive list</a> of jabber clients, for pretty much any OS under the sun. In the end, I chose <a href="http://www.miranda-im.org/" mce_href="http://www.miranda-im.org/">Miranda IM</a>, for several reasons:</p>
<ul><li>Final distributed file size:  I wound up with a 556kb .msi installer that I built for it (more on that later).</li><li>Runtime size: I'm pretty sure that everyone lost maybe a megabyte
of RAM from running this, if that. Small, light, and fast are all words
that I'd use to describe this.</li><li>Ability to customize: at it's core, it's a small executable with a
large army of plugins (DLLs), providing additional functions. Likewise,
I just cut out everything except the jabber components, and hey, I have
a perfect IM client for jabber and jabber only.</li><li>mirandaboot.ini: A little-known feature of Miranda. Drop this file
into the install directory, and you can change program defaults. In
this case, it's set to automatically create a user profile in their own
user's directory, named after their domain logon name.</li><li>Looks for DNS SRV records and uses them (Hey, gaim, where are you?
Oh, right, you're STILL LACKING THIS HORRIBLY SIMPLE FEATURE. What's so
hard about a DNS lookup, really?).</li><li>Easy to use, simplistic.</li></ul>
<p>All in all, this is pretty much a perfect client for people. It's
simple enough to use, effective, small, and to top it all off, free.
The only thing it was missing was a .msi installer package (it is being
installed on a windows domain after all), and the official stance from
the Miranda devs consists of, "you have a .zip and a .exe installer,
and what we provide works. If you want a .msi package, feel free to
build it yourself." As a result, I did, and I used <a href="http://wix.sourceforge.net/" mce_href="http://wix.sourceforge.net/">Wix</a>
to do it. Yay for open source and free Microsoft programs that get the
job done, and get it done well. The posts I saw on the Miranda forums
included a lot of users wanting a .msi installer, so once I polish it
off, I'll post both the Wix .xml file, along with the final .msi for
people to abuse. For now, I'll link to the .msi which I'm using here.
This includes jabber components only, and installs without prompting to
Program Files. This file is suitable for usage anywhere, as it saves
all settings in places where anyone can write to, and it is multi-user
sane (in the sense that user A can't see user B's settings and
contacts).</p>
<p>Earlier, I mentioned that ejabberd has shared rosters, where
basically everyone can see the same group of people. Sadly, jabberd2
lacks this feature, but makes up for it in another way: it has MySQL as
it's backend. This makes is horribly easy to write a small script which
clears the existing roster table, and re-populates it with everyone
else who is registered with the service. This makes it pretty easy to
accomplish a similar "shared roster", and it bypasses the
semi-complicated process to add a user, consisting of:</p>
<ul><li>Finding the person to talk to,</li><li>Adding the person to talk to,</li><li>Waiting for the the person on the other end to both sign in, and click allow,</li><li>Waiting for the person on the other end to add you themselves,</li><li>Finally allowing that user access to talk to you.</li></ul>
<p>For people who only know how to use computers as far as clicking
File, Print goes, the automatic addition of new users to their lists
saves time and effort all the way around. Not to mention the new person
doesn't have to go and add thirty other people, and then wait for all
thirty people to add and authorize the new person.</p>
<p>In the end, I wound up with a setup that's as close to perfect as it
can get. Shared rosters, easy to use client, and a client that works
perfectly and easily.</p>
<p>I'm rather liking this whole "run your own IM server" idea now that
I'm using it on a scale larger than two users. And hey, so are all of
the employees.<br />
Links:</p>
<ul><li><a href="http://dev.brantleyonline.com/miranda-0.5.1-1st.msi" mce_href="http://dev.brantleyonline.com/miranda-0.5.1-1st.msi">miranda-0.5.1-1st.msi</a> (.msi installer, jabber components only)</li><li><a href="http://dev.brantleyonline.com/miranda-1st.xml" mce_href="http://dev.brantleyonline.com/miranda-1st.xml">miranda-1st.xml</a> (Wix .xml file, used to create your own .msi, jabber components only)</li><li><a href="http://dev.brantleyonline.com/miranda.xml" mce_href="http://dev.brantleyonline.com/miranda.xml">miranda.xml</a> (Wix .xml file used to create your own .msi, all Miranda IM components)</li></ul>
<p>Once again, these files do not include a GUI installer of any sort,
but rather will install the program automatically without prompting.
There's your warning.
</p>
 ]]>
        
    </content>
</entry>

<entry>
    <title>Driving in police cars is fun. No, really.</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2006/09/driving-in-police-cars-is-fun.html" />
    <id>tag:aboveaverageurl.com,2006://1.19</id>

    <published>2006-09-11T17:02:51Z</published>
    <updated>2007-09-07T23:44:12Z</updated>

    <summary>I mean it. Driving in a police car is fun. Note the phrasing: driving in a police car is fun; being driven in a police car is not. Why is this? I was driving to work today when I noticed...</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
        <category term="Misc." scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[<p>I mean it. Driving in a police car is fun. Note the phrasing: <i>driving</i> in a police car is fun; being <i>driven</i> in a police car is not. Why is this?</p>
<p>I was driving to work today when I noticed a car with heavily tinted
windows pull up behind me. In my general paranoia, I figured this was
an undercover police car (fortunately, it wasn't). This then in turn
reminded me of a story my uncle had told me semi-recently.</p>
<p>My uncle worked in a rather large car shop. The local police
department would bring their cars down when something broke, when it
needed a tune-up, or whatever. Likewise, for most of the cars he had
worked on, he took it for a short (15 minute) drive to make sure
everything worked as it should. He'd test out the brakes, made sure
everything was shifting properly, etc.</p>
<p>Likewise, a civilian legally driving a police car can be incredibly fun. For example:</p>
<ul><li>Randomly switching lanes and then tailgating a car.</li><li>Driving 55mph on a 65mph freeway, just to see who would pass.</li><li>Changing from lane to lane at varying speeds.</li><li>Finding someone driving relatively fast, and pull up alongside
them. No eye contact, no lights, no nothing, just pull up alongside
someone speeding.</li><li>Accelerating to the speed limit, and then slowly drop in speed.</li></ul>
<p>It's not like he can pull anyone over. It's not like he's stolen the car; he has a legal right to it. So why not enjoy it? :)
</p>
 ]]>
        
    </content>
</entry>

<entry>
    <title>Windows Multi-User Compatability Hall of Shame: DesertDocs</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2006/08/windows-multiuser-compatabilit.html" />
    <id>tag:aboveaverageurl.com,2006://1.18</id>

    <published>2006-08-25T21:31:09Z</published>
    <updated>2007-09-07T23:43:55Z</updated>

    <summary>It&apos;s pretty much every day that I run across a program on windows that wasn&apos;t coded correctly to function in a multi-user enviroment as a good program should. It&apos;s not every day, however, that I come across a program that...</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
        <category term="Rants" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Windows" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[<p>It's pretty much every day that I run across a program on windows
that wasn't coded correctly to function in a multi-user enviroment as a
good program should. It's not every day, however, that I come across a
program that is so horribly coded I decide to create a "Hall of Shame"
consisting JUST of that ONE application.</p>
<p>I'm not talking just "bad", I'm talking HORRIBLE. There's a line,
and this single application crosses that line in multiple ways at once.</p>
<p>I work for a small law firm, and we recieve massive PDFs of legal
documents all day, in any one of a good ten different file viewers and
file formats with different file extensions (although I have yet to
find a single format that wasn't either a PDF or PCL doc with just
that: a different extension and a differently branded viewer). I just
had to help a user get their document package to print, and let me tell
you, it was a doozy.<br />
First off, I present you with <a href="http://desertdocs.com/" mce_href="http://desertdocs.com/">DesertDocs</a>. This is the offender's website, but the website is half the problem. More on that later.</p>
<p>The e-mail in question had nothing more than a document number and a
link to this website. If you click on the "WebPost General Inbox" on
the side, it'll bring you to a rather confusing page. The nature of the
documents include personal information (likely SSIDs, names, addresses,
etc.). Nothing that we would knowingly spread around, in other words.
So, we picked the "Private Inbox Login" button. Username and password?
Not in the e-mail. So, we go back, and pick the "Download Docs" button.</p>
<p>... to be presented with an EULA. Scroll down, click agree... hmm.
Now it wants me to install a document viewer for this. Why I need a
seperate viewer to view these docs is beyond me, but I've also grown
used to it over time (refer to the previous paragraphs). So, I install
it (the user in question has guest priviliges, I had to install it
personally as the administrator), and try the website again.</p>
<p>Only to be prompted to download the viewer again.</p>
<p>*twitch*</p>
<p>At this point, the user I'm helping has to get this done now, and
further, has a migraine. She also had the winning idea: call them. So,
we find the toll free number, and call them up.</p>
<p>After explaining the problem to the person who answered, I could
tell instantly that they had encountered this problem before. Their
solution? "Delete your temporary internet files and cookies, that is
what is preventing you from getting the docs you need."</p>
<p>"Okay, done, and it's still not working."</p>
<p>Upon hearing this news, he directed me to the application's Program
Files directory, and instructed me to start the "wpcookie.exe"
application. (Side note: he directed me to the directory in question by
having me right-click the doc viewer shortcut, hit properties, and then
'Find Target'. This is actually ingenious, and probably the only
correct thing that I got out of the entire call.) I ran it and it
seemingly did nothing. He then told me to open the website up and try
again. Tada, it worked.</p>
<p>"So, what did that just do?"</p>
<p>"Place a cookie in Internet Explorer."</p>
<p><b>Problem one: when enough users call in and whine that it doesn't
work, causing you to package a seperate program just to set a cookie on
the computer, you have issues.</b></p>
<p>As pissed off as I was then at how horribly broken their program
was, I continued on with the guy, because plain and simple, we needed
it to work. I was able to then get to the link to download the
documents. I click the link, and naturally, it opens in a popup (which
is blocked).</p>
<p><b>Problem two: when your tech support takes it in stride to tell
you to allow the popup that was just blocked, take a clue yourself,
'developers': stop using popup windows. </b></p>
<p>"Hey! That's what I need!" the user exclaims. "Good," I'm thinking to myself, "I'm almost done." (Hint: I wasn't.)</p>
<p>I was then told to click on 'Print', 'All', and then 'Okay', and I
would then be asked a printer to print the docs on. Sure enough, I was,
only instead of printing, a 500kb file downloaded, and the viewer
program that I had downloaded launched. Only to error out in a horrible
way: "Permission denied." I then read the error message.</p>
<p><b>Problem three: the %TEMP% dir exists for a reason. Quit thinking
you can write to Program Files\Your Stupid App\temp, because you can't.
Copying the downloaded file from the Temporary Internet Files directory
to a temporary directory in Program Files is just plain stupid. Use the
%TEMP% dir, that's what it exists for. By doing this, not only are you
assuming that the user is running on Windows 95/98, or that they have
Administrator rights (which they don't, not on my grounds!), but <a href="http://blogs.msdn.com/oldnewthing/archive/2004/11/22/267890.aspx" mce_href="http://blogs.msdn.com/oldnewthing/archive/2004/11/22/267890.aspx">you're adding multiple security holes into your application and breaking all forms of file system quotas automatically.</a> Oops.</b></p>
<p>At this point in time, I was laughing to myself, and just blindly
following the guy's instructions. Two more attempts were made to fix
this. One of these included copying the file from the Temporary
Internet Files directory to somewhere else, and then opening the
utility to click File --&gt; Open ("Double clicking on the file will
not work."). I forget the other.</p>
<p>At this point in time, he said something that was honestly quite amazing: "Huh. Well that's weird."</p>
<p>Someone has never used a windows computer as a guest, have they?</p>
<p>At this point in time, I just told the guy to hang on while I tried
something of my own. That something involved giving the user permission
to write to the application's own temporary directory. Guess what? It
worked.</p>
<p>Guess what else? That little 500kb file? Was an archive. In the archive, was a .pdf and a .html.</p>
<p><b>Problem four: quit re-inventing the wheel with applications that
don't work. I just spent the last 15 minutes on the phone with you
trying to fix this, only to find out that you just as likely could have
given me a link to the .pdf (the .html wasn't really needed in this
case), or, thought of all thoughts, a link to a .zip.</b></p>
<p>Luckily, this can easily be rectified.</p>
<ol><li>Stop pretending that the user WILL had Administrator rights.</li><li>Stop breaking file system quotas by thinking you're better off using your own personal %TEMP% dir.</li><li>Stop making up your own file types, and</li><li>Start using existing ones (no, your way is NOT better in ANY fashion).</li><li>You could make me eternally grateful by firing your programmers and just giving me a link to the .pdf on the website. Really.</li></ol>
 ]]>
        
    </content>
</entry>

<entry>
    <title>Where&apos;s the tagging on blogs themselves?</title>
    <link rel="alternate" type="text/html" href="http://aboveaverageurl.com/2006/08/wheres-the-tagging-on-blogs-th.html" />
    <id>tag:aboveaverageurl.com,2006://1.17</id>

    <published>2006-08-23T21:18:27Z</published>
    <updated>2007-09-07T23:43:10Z</updated>

    <summary>I use a combination of liferea and akregator to read a fair number of blogs. I also use rssreader on windows. Also of note, I dumped akregator in favor of liferea over time. Why? I&apos;m still not sure. (KDE is...</summary>
    <author>
        <name>Kyle Brantley</name>
        
    </author>
    
        <category term="Internet Technologies" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://aboveaverageurl.com/">
        <![CDATA[<p>I use a combination of liferea and akregator to read a fair number
of blogs. I also use rssreader on windows. Also of note, I dumped
akregator in favor of liferea over time. Why? I'm still not sure. (KDE
is my desktop, always will be.)<br />
At one point in time, I had nearly a gig of stored plaintext blogs. That's a lot of text.</p>
<p>Given that I can take a fair share of blogs and note how they either
sport tags or categories, and I can likewise view that blog by all
posts tagged or categorized, if I want to read about a specific subject
someone blogs about, that's 100% doable. Face it, if you couldn't,
people would wine. Hard.</p>
<p>So why doesn't my RSS reader software have this? Why can't I label
digg.com as "stupid", "retarded", and "marginally interesting"? I'd tag
my local newspapers as "news" and "local", and the other larger ones as
"news" and "global".</p>
<p>Then I want a little search box up on top that will let me search
though and view my tags. If I wanted local news, I'd just type in
"local news" and tada, all of my local paper's RSS feeds would pop up.
"internet news" would give me /. and digg. etc.</p>
<p>I'd really, <i>really</i> appreciate such a program that would let me tag <i>blogs</i> like that. It really would make my reading so much more enjoyable.
</p>
 ]]>
        
    </content>
</entry>

</feed>
