<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Neural Core Dump &#187; Software</title>
	<atom:link href="http://www.jeffdarlington.com/category/technology/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jeffdarlington.com</link>
	<description>The personal blog of Jeffrey T. Darlington, creator of General Protection Fault</description>
	<lastBuildDate>Sat, 28 Jan 2012 20:00:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>An Open Letter to Mobile Browser Developers</title>
		<link>http://www.jeffdarlington.com/2011/03/22/an-open-letter-to-mobile-browser-developers/</link>
		<comments>http://www.jeffdarlington.com/2011/03/22/an-open-letter-to-mobile-browser-developers/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 14:26:16 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[client certificate]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPod]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/?p=435</guid>
		<description><![CDATA[If you&#8217;ve been following my Twitter account at all, you&#8217;ve probably noticed by now that I&#8217;ve become an avid mobile device (i.e. smartphone) user, and a fan of Android in particular. This isn&#8217;t just a passing phase for me, nor is this a technology fad that&#8217;s just going to fade away. Mobile technology is really [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve been following <a title="GPFJeff on Twitter" href="https://twitter.com/gpfjeff">my Twitter account</a> at all, you&#8217;ve probably noticed by now that I&#8217;ve become an avid mobile device (i.e. <a title="Smartphone article on Wikipedia" href="https://secure.wikimedia.org/wikipedia/en/wiki/Smartphone">smartphone</a>) user, and a fan of <a title="Android (operating system) article on Wikipedia" href="https://secure.wikimedia.org/wikipedia/en/wiki/Android_%28operating_system%29">Android</a> in particular. This isn&#8217;t just a passing phase for me, nor is this a technology fad that&#8217;s just going to fade away. Mobile technology is really taking off, and I wouldn&#8217;t be surprised if a paradigm shift won&#8217;t occur—if it hasn&#8217;t already—where more people will be using smartphones and mobile devices to access the Internet and other online services than using a full desktop or laptop. There are other contenders vying to be our one-and-only window to the digital world, like set-top boxes, digital TVs, and such, but nothing is as personal and portable as the smartphone and its bigger brother, the <a title="Tablet computer article on Wikipedia" href="https://secure.wikimedia.org/wikipedia/en/wiki/Tablet_computer">tablet</a>.</p>
<p>That said, I&#8217;m not in the camp that believes that the Web is dead and that mobile apps are the way of the future. <a title="Why there isn’t (and likely never will be) a GPF iPhone app" href="http://www.jeffdarlington.com/2009/11/30/why-there-isnt-and-likely-never-will-be-a-gpf-iphone-app/">I&#8217;ve expressed my feelings on that here before.</a> Apps won&#8217;t and can&#8217;t be the end-all, be-all interface to data and the mobile Web will always have a place. Thus the mobile browser is one of the most important apps a smartphone can have. That said, most browsers on smartphones are anemic, underpowered, and severely lacking in important functionality. Smartphone manufacturers and OS authors want us to believe that we can leave the laptop behind and work entirely from that wondrous miracle in our pocket, but fail to deliver the tools we need to make that dream a reality.</p>
<p>My case in point: <a title="Public key certificate article on Wikipedia" href="https://secure.wikimedia.org/wikipedia/en/wiki/Public_key_certificate#Client_certificates">client-certificate authentication</a>. As a very brief summary, the entire industry of e-commerce rests entirely on a set of encryption technologies such as <a title="HTTP Secure article on Wikipedia" href="https://secure.wikimedia.org/wikipedia/en/wiki/HTTP_Secure">HTTPS</a>, SSL, <a title="Transport Layer Security article on Wikipedia" href="https://secure.wikimedia.org/wikipedia/en/wiki/Transport_Layer_Security">TLS</a>, etc., that allow secure, private communication between a client (such as an online shopper) and a server (an online store). The server authenticates itself to the client by using a digital certificate, signed by a trusted certificate authority which has investigated and authenticated the server as a legitimate entity. The client can rest assured that the server belongs to the authenticated entity because the certificate uses strong public-key cryptography to provide a chain of trust back to the authenticating authority. Without this technology in place, we wouldn&#8217;t be able to tell legitimate businesses such as online retailers and banks from the phishing scams so prevalent on the Web. (This doesn&#8217;t always solve problems between the keyboard and the chair, of course, but it is effective as long as the wetware interface is working properly.)</p>
<p>But digital certificates can be used to authenticate the client as well as the server. Many businesses and governments use client certificates to authenticate users to secure systems. For example, I use a government-issued <a title="Smart Card article on Wikipedia" href="https://secure.wikimedia.org/wikipedia/en/wiki/Smart_card#Cryptographic_smart_cards">Smart Card</a> to authenticate with my client&#8217;s servers. On this card is chip that contains my digital certificate, signed by a private certificate authority. When I authenticate with the client&#8217;s services, the private key on the card creates a digital signature which the server can authenticate against my public key, the inverse of what happens between the online shopper and the store front. Thus, I can trust the validity of the government&#8217;s certificate and know I&#8217;m connecting to their servers and no one else, and they in turn can validate that I (or the person who has my card) am who I say I am and let me in. I use a similar technology with <a title="General Protection Fault" href="http://www.gpf-comics.com/">GPF</a>, although I import my certificates directly into the browser rather than use an external card. I created my own private certificate authority and issue client certificates to each browser I wish to use to access my admin interfaces. That way, I know only certain machines can access those portions of the site, offering a lot more security than just a simple password can provide.</p>
<p>This isn&#8217;t a new technology. SSL has been around almost as long as the Web itself, and it wasn&#8217;t long before the model was flipped around to authenticate clients to servers as well as servers to clients. This is a tool used by businesses every day all over the world. Every desktop browser supports client certificates because they are a <a title="RFC 5246: The Transport Layer Security (TLS) Protocol" href="http://tools.ietf.org/html/rfc5246#section-7.4.6">standard</a>. Any browser that doesn&#8217;t support them is likely to be overlooked or ignored in favor of browsers that do.</p>
<p>Yet the support for client certificates on mobile devices is appallingly absent. I know the built-in Android browser doesn&#8217;t support it, and <a title="Issue 8196: 	Enhancement: Client Certificate Authentication in Browser" href="https://code.google.com/p/android/issues/detail?id=8196">I created an issue</a> in Google&#8217;s official <a title="Android Issues at Google Code" href="https://code.google.com/p/android/issues/list">Android issue tracker</a> to complain about it. Android supports client certs for WiFi authentication, but not in the browser, e-mail, or any other key service vital to secure business communications. Supposedly support for this functionality is going to be added in future versions of Android, but that doesn&#8217;t help me or any of the millions of current Android users until it comes time to upgrade our devices. I&#8217;ve read in various places that the iPhone supports client certs, but I&#8217;ve never been able to get any of the solutions to work with my iPod Touch (essentially an iPhone minus the annoying contract and poor service of AT&amp;T). The only success I&#8217;ve had in this area has been with <a title="Firefox Mobile" href="https://www.mozilla.com/en-US/mobile/">Firefox Mobile</a>, which is pretty much a Firefox 4 release candidate smooshed and crunched down to fit on a mobile device. It&#8217;s bloated and a lot slower than Android&#8217;s built in browser and there&#8217;s no handy UI for importing certs like there is on the desktop, but if you take a sledgehammer to it and <a title="Firefox Help: how to use clientcertificate to access https websites under android" href="https://support.mozilla.com/en-US/questions/786035#answer-142961">do some manual file tweaking</a>, you can import your client and CA certs into the certificate database and use it effectively.</p>
<p>Seriously, guys&#8230; you want your devices and mobile OSes to be taken seriously by businesses as tools to take our work out of the office and on the road. Yet, you don&#8217;t give us the essential tools required to take advantage of this amazing freedom. Sure, you tell us &#8220;there&#8217;s an app for that&#8221;, but frankly, there isn&#8217;t. I&#8217;ve looked, and they&#8217;re not there. Apple won&#8217;t let third-party browsers compete with Safari on iOS and none of the Android add-on browsers support client certs either. Only Firefox, a desktop browser masquerading as a mobile app, comes close, and it takes a bit of technical wizardry to do something that should be a quick five second import. Someone&#8217;s got to step up to the plate and make some progress here, or no business that really understands security is going to take the mobile space seriously.</p><div><a class="addthis_button" href="//addthis.com/bookmark.php?v=250" addthis:url='http://www.jeffdarlington.com/2011/03/22/an-open-letter-to-mobile-browser-developers/' addthis:title='An Open Letter to Mobile Browser Developers '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2011/03/22/an-open-letter-to-mobile-browser-developers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cryptnos 1.0 for .NET 2.0</title>
		<link>http://www.jeffdarlington.com/2010/03/23/cryptnos-1-0-for-net-2-0/</link>
		<comments>http://www.jeffdarlington.com/2010/03/23/cryptnos-1-0-for-net-2-0/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 19:36:27 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Cryptnos]]></category>
		<category><![CDATA[WinHasher]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/?p=364</guid>
		<description><![CDATA[In the ongoing spirit of releasing pointless Open Source software, I semi-proudly announce the release of Cryptnos 1.0 for Microsoft .NET 2.0. So what is it? Cryptnos is a secure password generator. By now, I&#8217;m sure many of you have heard of various programs, especially browser plug-ins, that let you generate unique passwords for all [...]]]></description>
			<content:encoded><![CDATA[<p>In the ongoing spirit of releasing pointless Open Source software, I semi-proudly announce the release of <a title="Cryptnos for .NET" href="http://www.gpf-comics.com/dl/cryptnos/dotnet.php">Cryptnos 1.0 for Microsoft .NET 2.0</a>.</p>
<p>So what is it? Cryptnos is a secure password generator. By now, I&#8217;m sure many of you have heard of various programs, especially browser plug-ins, that let you generate unique passwords for all your various online logins. They usually do this by combining the domain name of the site with a master password you supply, then run those inputs through an MD5 hash to give you a &#8220;strong&#8221; password that is unique for that site. Many of these applets also search the page you&#8217;re currently on for the login form and attempt to pre-populate the password box for you. Well, Cryptnos is kind of like that. Only it&#8217;s not.</p>
<p>Like these other apps, Cryptnos generates a password from your master password and from some mnemonic or &#8220;site token&#8221; that you supply. But that&#8217;s where the similarities end. First of all, Cryptnos does not live in your browser, so it can be used for any application where you need a strong password. As a corollary, the mnemonic does not have to be a domain name, although it certainly can be; it can be whatever you want it to be, so long as it is unique and it helps you remember what the password is used for. Next, Cryptnos gives you unparalleled flexibility in how your password is generated. You&#8217;re not stuck using just MD5, a broken cryptographic hash that is horribly out of date and which should no longer be used. You can select from a number of hashing algorithms, as well as how many times the hash should be applied. Crytpnos also uses Base64 rather than hexadecimal to encode the output, meaning your generated passwords can have up to 64 possible options per character instead of 16, making it stronger per character than the other guys. You can further tweak your generated password by limiting the types of characters used (for those times where a site requires you to only use letters and numbers) and the length of your password. Best of all, Cryptnos remembers all of these options for you, storing them in an encrypted state that is nearly impossible to crack. Your master password is <em><strong>NEVER</strong></em> stored, nor are your generated passwords; your passwords are generated on the fly, as you need them, and cleared from memory once the application closes.</p>
<p>Cryptnos originally sprang from the &#8220;Hash Text&#8221; function of <a title="WinHasher" href="http://www.gpf-comics.com/dl/winhasher/">WinHasher</a>, which I used to generate passwords in a similar fashion for a long time. I quickly ran into limitations in using WinHasher this way, especially when it came to sites where I had to tweak the password after it was generated. I thought to myself, &#8220;I&#8217;ll never be able to remember all these tweaks for all these passwords. Why can&#8217;t I just rip this function out of WinHasher and wrap a program around it to let the computer do all the work for me?&#8221; And that&#8217;s exactly what I did. I&#8217;ve been using Cryptnos to generate and &#8220;store&#8221; my passwords for months now and I finally decided it was stable enough to release it to the world at large.</p>
<p>Right now, <a title="Cryptnos" href="http://www.gpf-comics.com/dl/cryptnos/">Cryptnos</a> is only available for Microsoft .NET 2.0, which means by default it runs on Windows. However, I&#8217;m also working on a <a title="Cryptnos for Android" href="http://www.gpf-comics.com/dl/cryptnos/android.php">Google Android version</a>, which means a pure Java implementation should be simple to extract after that. I&#8217;ve even been pursuing a PHP and/or JavaScript implementation that does everything except storing the parameter data. I&#8217;m not sure when any of these will escape from my hard drive, but anyone interested in them can drop me an e-mail and I&#8217;ll happily open a dialog.</p>
<p>Oh, and the name? Um, well, I wanted a better one, but that&#8217;s the only thing I could find that sounded &#8220;passwordy&#8221; that didn&#8217;t have a lot of hits on Google.</p><div><a class="addthis_button" href="//addthis.com/bookmark.php?v=250" addthis:url='http://www.jeffdarlington.com/2010/03/23/cryptnos-1-0-for-net-2-0/' addthis:title='Cryptnos 1.0 for .NET 2.0 '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2010/03/23/cryptnos-1-0-for-net-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WinHasher 1.6</title>
		<link>http://www.jeffdarlington.com/2010/02/08/winhasher-1-6/</link>
		<comments>http://www.jeffdarlington.com/2010/02/08/winhasher-1-6/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 16:57:21 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[WinHasher]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/?p=356</guid>
		<description><![CDATA[Wow! A non-Twitter digest post! Amazing! This is a quickie to let you guys now I&#8217;ve just released WinHasher 1.6. This is a minor release containing a few cosmetic and minor functional changes, so there&#8217;s no need to upgrade unless the features or bug fixes listed below seem worth the effort. Added a progress indication [...]]]></description>
			<content:encoded><![CDATA[<p>Wow! A non-Twitter digest post! Amazing!</p>
<p>This is a quickie to let you guys now I&#8217;ve just released <a title="WinHasher" href="http://www.gpf-comics.com/dl/winhasher/">WinHasher</a> 1.6. This is a minor release containing a few cosmetic and minor functional changes, so there&#8217;s no need to upgrade unless the features or bug fixes listed below seem worth the effort.</p>
<ul>
<li>Added a progress indication message for all the console applications. Previously, these programs simply went off into lala land when you kicked them off, kind of like the original GUI version did, giving you no indication how far along things have come.  Now the program displays what it&#8217;s doing (&#8220;Computing SHA-1 of&#8230;&#8221;) and then a percentage complete as it works.  Once complete, it displays the resulting hash as it did before. I thought about making the progress indicator &#8220;graphical&#8221; with little periods, hyphens, or equal signs, but the percentage was a lot easier to do (and I&#8217;m lazy).</li>
<li>Added a &#8220;case kludge&#8221; for comparing computed hashes against reference hashes (i.e. digests copied from a website). Typically, most sites will display hashes as a lower-case hexadecimal string, which is why I made that the default. However, I and other users have run into occasions where a download site presents the hash as upper-case hexadecimal. Unfortunately, if you paste this value into the comparison field on either the main WinHasher form or the &#8220;Send To&#8221; result dialog, the comparison will fail simply because the case does not match, even if the actual hash values do. Technically, you can tweak the command line of the &#8220;Send To&#8221; shortcut or change the output type on the main form, but either can be a pain when you know what you expect to see. So I&#8217;ve added a little bit of code that looks at what the comparison expects (i.e. &#8220;I&#8217;m looking for a lower-case hex string&#8221;) and adjusts the case of the comparison field if necessary. This means lower-case hex and Bubble Babble comparisons are forced to lower-case, while upper-case hex is forced to upper-case, no matter what case the original pasted-in string was. In the case of Base64, which includes mixed case characters, the comparison string is compared unaltered. After any case adjustment, the hash comparison occurs as previously designed.</li>
<li>Fixed a bug that wasn&#8217;t displaying the icon correctly within the application itself. Oopsy.</li>
</ul>
<p>For those who don&#8217;t know, WinHasher is a cryptographic hash generator for Microsoft .NET. It is roughly analogous to digest programs on other platforms (such as &#8220;openssl dgst&#8221; from OpenSSL) but designed for Windows and other .NET platforms. It lets you verify the integrity of downloads and determine whether changes have been made to files. It does <em><strong>NOT</strong></em> guarantee the authenticity of a file; for that, use cryptographic signatures such those produced by PGP or GnuPG. It also lets you create hashes of arbitrary text, which is handy for generating strong &#8220;passwords&#8221;, although I&#8217;m working on a different project that will do a much better job of this particular task. [Looks around shifty-eyed.]</p><div><a class="addthis_button" href="//addthis.com/bookmark.php?v=250" addthis:url='http://www.jeffdarlington.com/2010/02/08/winhasher-1-6/' addthis:title='WinHasher 1.6 '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2010/02/08/winhasher-1-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WinHasher 1.5 Released</title>
		<link>http://www.jeffdarlington.com/2009/07/09/winhasher-1-5-released/</link>
		<comments>http://www.jeffdarlington.com/2009/07/09/winhasher-1-5-released/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 15:43:03 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[WinHasher]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/?p=257</guid>
		<description><![CDATA[Just posting a quick note to let you guys know I&#8217;ve bumped good ol&#8217; WinHahser to version 1.5. This is both a bug and feature release, so both of you using it will probably want to upgrade. Here&#8217;s a quick list of the changes: Bug fix: When I wrote the hashing engine, I made sure [...]]]></description>
			<content:encoded><![CDATA[<p>Just posting a quick note to let you guys know I&#8217;ve bumped good ol&#8217; <a title="WinHasher" href="http://www.gpf-comics.com/dl/winhasher/">WinHahser</a> to version 1.5. This is both a bug and feature release, so both of you using it will probably want to upgrade. Here&#8217;s a quick list of the changes:</p>
<ul>
<li>Bug fix: When I wrote the hashing engine, I made sure to use a 64-bit integer when computing the total sum of the size of all files in a multi-file comparison. This allowed for a whopping total of 8.05EB (exabytes, or millions of gigabytes) of data to be compared. Unfortunately, I used the wrong data type when running this calculation on a <em>single</em> file, using a 32-bit integer instead. That put the cap on a single file at around 2GB, which can easily be exceeded by a decent-sized DVD ISO. The really embarrassing thing here is that .NET&#8217;s <code>System.IO.FileStream</code> object uses a 64-bit integer for its <code>Length</code> attribute, meaning this was totally my mistake, not Microsoft&#8217;s. The end result here is that WinHasher would crash on files larger than 2GB since it would end up trying to calculate its percent complete on an overflowed negative value. I&#8217;ve updated the code so that the single-file length calculations also use 64-bit integers and now I can finally validate that <a title="The Fedora Linux Project" href="http://fedoraproject.org/">Fedora</a> 11 DVD ISO download. Note that there&#8217;s still a hard cap at 8.05EB whether your hashing a single file or you sum up multiple files together. While it&#8217;s possible to bump this up to an unsigned 64-bit integer and go for even more ridiculous large numbers, I seriously doubt anyone is going to be running a SHA-1 hash that large any time soon.</li>
<li>The &#8220;Send To&#8221; shortcuts call the GUI app via the command line to hash a file and throw the result up into a dialog box, making it convenient to right-click a file and quickly get a hash. Unfortunately, I was using a standard <code>MessageBox</code> object for this, meaning the hash was displayed in a read-only form that couldn&#8217;t be copied and pasted elsewhere to be compared. (It&#8217;s much easier to copy and paste two hashes into a text editor, for example, and visually scan the two lines for differences.) Well, I wasn&#8217;t the only one to find this annoying.  WinHasher user Todd Henry had issues with this too and suggested that I either put the hash result in a text box that could be copied and pasted elsewhere, or add a box where an externally produced hash (say from a Web site) could be pasted into the dialog and have WinHasher compare them. Interestingly enough, I was already planning to make that change when he wrote me, and now it&#8217;s there. Once WinHasher is done, it will display a new result dialog with both a copyable hash result field and a new &#8220;compare to&#8221; field that will take an external hash string and tell you if it matches or not.</li>
<li>The Hash Single File tab in the main GUI app also has a new &#8220;compare to&#8221; field that works in an identical fashion to the one in the result dialog described above. I didn&#8217;t see a need to add it to the Hash Text tab, and it would be redundant on the Compare Files tab.</li>
<li>And in the completely useless trivia department, I&#8217;ve added hooks in to my <a title="Subversion" href="http://subversion.tigris.org/">Subversion</a> clients to add the SVN revision number as the last part of the version number. This is more for my purposes than anything else, but now if you have a problem and can give me the full version number of the app, I know exactly what revision of the code you&#8217;re using.</li>
</ul>
<p>I realized after I updated the files and the site that I forgot to make any changes to the documentation to reflect these updates. Oh, well. I don&#8217;t think they&#8217;re major enough to sweat over, so I&#8217;ll leave those alone for now and make sure they get updated by the next release.</p><div><a class="addthis_button" href="//addthis.com/bookmark.php?v=250" addthis:url='http://www.jeffdarlington.com/2009/07/09/winhasher-1-5-released/' addthis:title='WinHasher 1.5 Released '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2009/07/09/winhasher-1-5-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bill Gates now inhabits my dreams&#8230;</title>
		<link>http://www.jeffdarlington.com/2008/09/09/bill-gates-now-inhabits-my-dreams/</link>
		<comments>http://www.jeffdarlington.com/2008/09/09/bill-gates-now-inhabits-my-dreams/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 14:12:57 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[advertising]]></category>
		<category><![CDATA[Bill Gates]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[Jerry Seinfeld]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[TWiT]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/?p=161</guid>
		<description><![CDATA[So I was listening to this week&#8217;s edition of TWiT, during which Leo Laporte and the usual band of miscreants psychoanalyze Microsoft&#8216;s new ad campaign featuring Bill Gates and Jerry Seinfeld. I had not seen the ad yet myself—apparently it debuted during an NFL opening game, and considering that I don&#8217;t watch professional sports and [...]]]></description>
			<content:encoded><![CDATA[<p>So I was listening to <a title="TWiT 159: That’s Not My Churro" href="http://www.twit.tv/159">this week&#8217;s edition of TWiT</a>, during which <a title="Leoville.Com" href="http://leoville.com/">Leo Laporte</a> and the usual band of miscreants psychoanalyze <a title="Microsoft" href="http://www.microsoft.com/">Microsoft</a>&#8216;s new ad campaign featuring <a title="Bill Gates article on Wikipedia" href="http://en.wikipedia.org/wiki/Bill_Gates">Bill Gates</a> and <a title="Jerry Seinfeld article on Wikipedia" href="http://en.wikipedia.org/wiki/Jerry_Seinfeld">Jerry Seinfeld</a>. I had not seen the ad yet myself—apparently it debuted during an <a title="National Football League article on Wikipedia" href="http://en.wikipedia.org/wiki/National_Football_League">NFL</a> opening game, and considering that I don&#8217;t watch professional sports and the overwhelming majority of my television watching now consists of shows containing <a title="Dora the Explorer article on Wikipedia" href="http://en.wikipedia.org/wiki/Dora_the_Explorer">magic backpacks and talking monkeys that wear red boots</a>, it hadn&#8217;t come to my attention yet—so the discussion naturally raised my morbid curiosity. So I dug around a little on <a title="YouTube" href="http://www.youtube.com/">YouTube</a> and found <a title="YouTube - Jerry Seinfeld Microsoft Commercial (Better Quality)" href="http://www.youtube.com/watch?v=tM_72QXCtN4">this</a>. I must admit, it&#8217;s as surreal as I was led to believe. I won&#8217;t attempt to try and mine this thing for hidden meaning like <a title="gdgt" href="http://gdgt.com/">Ryan Block</a> did; the only comment I think I can really make about it is that it tells me absolutely <em>nothing</em> about Microsoft, <a title="Microsoft Windows article on Wikipedia" href="http://en.wikipedia.org/wiki/Microsoft_Windows">Windows</a>, or any other product they may have in the pipeline, and after watching it I am no more inclined to pick Microsoft options over the competition than I was before. I thought that was the <em>point</em> of advertising&#8230;.</p>
<p>But that&#8217;s not the weirdest part. Last night, I dreamed about Bill Gates. Maybe it was exhaustion, maybe it was a prescription-drug fueled haze (I&#8217;m currently in the middle of my quarterly bout with bronchitis), but it was not something I was particularly expecting. There&#8217;s nothing really interesting to say about the dream, though. In what little I remember, Mr. Gates was there, tying his shoes. He wasn&#8217;t necessarily trying on new ones, nor was there any indication that the shoes were noticeably old. They were shiny, brown leather dress shoes, so they could have been either new or well maintained. Mr. Seinfeld was nowhere in sight. The setting was unclear; I can&#8217;t say that it was a shoe store, a men&#8217;s locker room, or any other recognizable setting. I know only that I was seated on a wooden bench which I believe was painted a dark green and that Bill Gates stood next to me, lifted one leg, and set the foot on the bench, then proceeded to tie his shoe laces. Then he left without saying a word and the dream moved on to wherever it went after that. I remember nothing else about the dream, and to my knowledge Mr. Gates appeared nowhere else within it.</p>
<p>I have no desire to do any research on what kind of <a title="Sigmund Frued article on Wikipedia" href="http://en.wikipedia.org/wiki/Sigmund_Freud">Fruedian</a> analysis can be drawn from watching a billionare-CEO-turned-philanthropist from one of the world&#8217;s largest and most reviled software companies tying his shoes next to me. I&#8217;d be afraid of what I&#8217;d find. So I&#8217;ll just say it was the prescription cough syrup working its magic and go back to talking to the <a title="How to Catch a Pink Elephant" href="http://www.gpf-comics.com/fun/stories/pinkelephant.php">pink elephant</a> and the green roast beef sandwich on either side of me. It&#8217;s a conversation about world politics and an economy built entirely around edible golf balls will solve the world&#8217;s energy crisis. It&#8217;s very enlightening. Maybe, somehow, some way, we&#8217;ll figure out exactly what makes Windows &#8220;delicious&#8221; while we&#8217;re at it. Drug-enduced hysteria is about the only way I can think of in my current semi-lucid state to make an operating system taste delicious. It makes me begin to wonder, though&#8230; what would other OSes taste like? Would Mac OS be crunchy? Would Linux be spicy? Would my Treo&#8217;s PalmOS be light in calories? I certainly hope so&#8230; I <em>am</em> trying to lose weight&#8230;.</p><div><a class="addthis_button" href="//addthis.com/bookmark.php?v=250" addthis:url='http://www.jeffdarlington.com/2008/09/09/bill-gates-now-inhabits-my-dreams/' addthis:title='Bill Gates now inhabits my dreams&#8230; '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2008/09/09/bill-gates-now-inhabits-my-dreams/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generating XML Sitemaps for MediaWiki</title>
		<link>http://www.jeffdarlington.com/2008/08/22/generating-xml-sitemaps-for-mediawiki/</link>
		<comments>http://www.jeffdarlington.com/2008/08/22/generating-xml-sitemaps-for-mediawiki/#comments</comments>
		<pubDate>Sat, 23 Aug 2008 01:40:19 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[GPF]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[sitemap]]></category>
		<category><![CDATA[wiki]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/?p=154</guid>
		<description><![CDATA[Not long ago, I took advantage of a nifty WordPress plugin to enable XML sitemaps for the blog. For those who&#8217;ve never heard of XML sitemaps (I hadn&#8217;t for quite a while), they are little XML files in a specific format that give search engines like Google hints on how to index your site. They [...]]]></description>
			<content:encoded><![CDATA[<p>Not long ago, I took advantage of a <a title="Google (XML) Sitemaps Generator for WordPress" href="http://www.arnebrachhold.de/redir/sitemap-home/">nifty WordPress plugin</a> to enable <a title="sitemaps.org" href="http://www.sitemaps.org/">XML sitemaps</a> for the blog. For those who&#8217;ve never heard of XML sitemaps (I hadn&#8217;t for quite a while), they are little XML files in a specific format that give search engines like <a title="Google" href="http://www.google.com/">Google</a> hints on how to index your site. They don&#8217;t necessarily improve your search rankings per se, but they help the search engine better decide what to index, when it was last updated, relative priorities of different pages, etc. You then throw a special line into your <a title="The Web Robots Pages" href="http://www.robotstxt.org/">robots.txt</a> file or directly submit the file to the search engine to let it know the file is available. Once the engine knows about it, it will check it periodically to optimize how the site is indexed.</p>
<p>The plugin, of course, makes this ridiculously easy for <a title="WordPress" href="http://wordpress.org/">WordPress</a>. However, <a title="General Protection Fault" href="http://www.gpf-comics.com/">GPF</a> gets orders of magnitude higher traffic than the blog does, so finding a way to generate sitemaps there would be ideal. I toyed with the idea for a while until I finally sat down, examined the sitemap specification, and figured out how to roll my own code. It now successfully runs via cron each morning and gives a pretty thorough census of what&#8217;s available on the GPF server. The problem is that the GPF site is divided into several parts that are largely autonomous and self-contained:</p>
<ul>
<li>The archive, of course, is the main bread and butter.  This is what people come to see, so it is vitally important to get everything represented, especially since the archive is entirely dynamic PHP. I count the main index page as part of the archive, as it displays the latest strip.</li>
<li>The <a title="GPF Forum" href="http://www.gpf-comics.com/forum/">forum</a> is self-contained because it uses a third-party application: <a title="phpBB" href="http://www.phpbb.com/">phpBB</a>. I decided long ago to discourage spamming by blocking search engines from indexing the forum, relying on the forum&#8217;s internal search capabilities for users who want to find things. Since search engines were being blocked anyway, I decided the forum didn&#8217;t need a sitemap; that would just be a waste of processing time.</li>
<li>The <a title="The Official GPF Wiki" href="http://www.gpf-comics.com/wiki/">wiki</a>, however, is slowly becoming a vital part of the site. It replaces the old cast pages and adds tons more GPF metadata in a convenient, easily searchable form. I wanted to make sure that got included too.  The GPF Wiki runs <a title="MediaWiki" href="http://www.mediawiki.org/">MediaWiki</a>, the same software that powers <a title="Wikipedia" href="http://www.wikipedia.org/">Wikipedia</a>.  As far as I know, MediaWiki does not include any internal mechanism for generating XML sitemaps nor are there any extensions to do so.  (I could easily be wrong, however; I&#8217;ll admit my research on this was extremely limited.)</li>
<li>Then there&#8217;s everything else. The GPF site beyond the two pre-packaged items above is completely custom-built PHP, so there&#8217;s no one to blame for that mess but myself.</li>
</ul>
<p>Ignoring the forum, that left me three major sub-projects for creating sitemaps. It&#8217;s easy enough to segregate these into separate files and tie them together using a &#8220;sitemap index&#8221; file, so that wasn&#8217;t a problem.  The archive would just be a formatted dump of the archive database, deriving approximate update times from the posting date. The bulk of the rest of the site could be done by stepping through the file structure of the site and taking note of every HTML or PHP file and its last modification time (conveniently ignoring certain files and directories that don&#8217;t need to be counted, like access-restricted Premium pages). And that leaves the wiki.</p>
<p>I managed to come up with a decent wiki sitemap routine that I thought I&#8217;d share, just in case someone else might be interested. Of course, it&#8217;s not likely to be useful for massive wikis like Wikipedia—<a title="sitemaps.org FAQ" href="http://www.sitemaps.org/faq.php#faq_sitemap_size">sitemaps are restricted to 10MB in size and 50,000 URLs</a>—but something small like the GPF Wiki would be easy to submit and index. It was built using MediaWiki 1.12.0; I am uncertain what database changes may be needed for older or newer versions. Here&#8217;s my current process:</p>
<p>I only want to index relevant pages, including category pages. The relevant database table for this is &#8220;page&#8221;. (How&#8230; convenient). Unfortunately, this table also contains things like redirects and images. Each image has its own &#8220;page&#8221; assigned to it; try clicking on an image in Wikipedia or in the GPF Wiki to see what I mean. The time stamp of the latest revision, however, is stored in the &#8220;revision&#8221; table, joined to the page table by the latest revision ID number. So a good starting bit of SQL would be:</p>
<blockquote><p><code>select p.page_title, r.rev_timestamp from page p, revision r where p.page_latest = r.rev_id and p.page_is_redirect = 0 and p.page_title not like '%.gif' and p.page_title not like '%.png' and p.page_title not like '%.jpg';</code></p></blockquote>
<p>Unfortunately, this also returns a few meta pages like the sidebar and editing pages. Before selecting, I define a look-up hash of titles I want to avoid and as I loop through the results I just skip those.</p>
<p>The title, of course, is both the displayed title and the input portion of the URL that uniquely identifies the page. Thus, knowing the base URL (<code>http://www.gpf-comics.com/wiki/</code>) I can easily reconstruct the public URL of any article from the title. As with Wikipedia links, spaces have already been converted to underscores, but the rest of the string needs to be be URL encoded. This is easy enough, so we can quickly build the full URL as required by the XML schema.</p>
<p>The time stamp is a little bit tougher. MediaWiki stores time stamps as a 14-digit number in <em>YYYYMMDDHHMMSS</em> format, always in UTC time. In Perl (in which almost all my crons are coded) this is easy enough to break apart and turn into a UNIX time stamp. I then output the date in W3C ISO 8601 format as required by the schema. A sample of a resulting entry would be:</p>
<blockquote>
<pre>&lt;url&gt;
   &lt;loc&gt;http://www.gpf-comics.com/wiki/Nick&lt;/loc&gt;
   &lt;lastmod&gt;2008-08-22T06:00:07Z&lt;/lastmod&gt;
   &lt;changefreq&gt;monthly&lt;/changefreq&gt;
   &lt;priority&gt;0.3&lt;/priority&gt;
&lt;/url&gt;</pre>
</blockquote>
<p>Change frequency and priority are purely guesses and fudges for mine. According to the sitemap specification, priorities are purely relative to other parts of the site. I rated the wiki pages as relatively low since the wiki at GPF is considered a &#8220;supporting&#8221; page and subordinate to things like the archive. As for change frequency, the sitemap specification includes a number of predefined choices (hourly, daily, weekly, monthly, etc.). Monthly was a purely off-the-cuff guess; some pages may update more or less frequently, but monthly would be a good average. It is entirely possible to rate select pages as higher priority or frequency than others, but I decided to take the easy route and rate everything the same. To apply different values, you just need to pay special attention to the title and assign a non-default value when that title crops up.</p>
<p>Well, I hope someone out there might find this helpful. I&#8217;m not sure if it really helps anyone find anything at GPF, but it was a fun little exercise nonetheless.</p><div><a class="addthis_button" href="//addthis.com/bookmark.php?v=250" addthis:url='http://www.jeffdarlington.com/2008/08/22/generating-xml-sitemaps-for-mediawiki/' addthis:title='Generating XML Sitemaps for MediaWiki '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2008/08/22/generating-xml-sitemaps-for-mediawiki/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WinHasher 1.3</title>
		<link>http://www.jeffdarlington.com/2008/06/30/winhasher-13/</link>
		<comments>http://www.jeffdarlington.com/2008/06/30/winhasher-13/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 08:59:11 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[WinHasher]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/?p=145</guid>
		<description><![CDATA[For both of you out there who care, WinHasher has now been bumped to version 1.3. The changes are very minor, so there&#8217;s no need to upgrade unless you find the following two new features useful: There&#8217;s now a drop-down box to choose between hexadecimal output and Base64 (RFC 2045, although without line wrapping). I [...]]]></description>
			<content:encoded><![CDATA[<p>For both of you out there who care, <a title="GPF Downloads: WinHasher" href="http://www.gpf-comics.com/dl/winhasher/">WinHasher</a> has now been bumped to version 1.3. The changes are very minor, so there&#8217;s no need to upgrade unless you find the following two new features useful:</p>
<ul>
<li>There&#8217;s now a drop-down box to choose between <a title="Hexadecimal article on Wikipedia" href="http://en.wikipedia.org/wiki/Hexadecimal">hexadecimal</a> output and <a title="Base64 article on Wikipedia" href="http://en.wikipedia.org/wiki/Base64">Base64</a> (<a title="RFC 2045 - Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies" href="http://tools.ietf.org/html/rfc2045">RFC 2045</a>, although without line wrapping). I personally like using Base64 because it&#8217;s more compact than hex and more &#8220;obscure-looking&#8221;; even non-coders are familiar with hex, seeing it in error messages all the time, but are less familiar with Base64, which looks more like &#8220;random noise&#8221;. The default output is still hex, so you only need to switch modes if you really find Base64 more useful.</li>
<li>There&#8217;s now a tab in the GUI to hash arbitrary text. I added this feature because there was an extension to <a title="Firefox" href="http://www.mozilla.com/firefox/">Firefox</a> that I used all the time to do this—which I used frequently to generate &#8220;random-looking&#8221; passwords by hashing simpler plain text and using the hash as the &#8220;real&#8221; password—but the extension hasn&#8217;t been updated in forever and is no longer working in Firefox 3. So to keep myself from getting locked out of the accounts where I used hashed passwords, I threw this feature in WinHasher. The backbone was already there, so all that needed to be added was a GUI.  There&#8217;s also an <a title="Character encoding article on Wikipedia" href="http://en.wikipedia.org/wiki/Character_encoding">encoding</a> drop-down box that lets you change the text encoding if you so desire/need. To be honest, I don&#8217;t think it&#8217;s really necessary because I think <a title="Microsoft .NET Framework article on Wikipedia" href="http://en.wikipedia.org/wiki/.NET_Framework">.NET</a> uses <a title="Unicode article on Wikipedia" href="http://en.wikipedia.org/wiki/Unicode">Unicode</a> internally all the time, but it does have a nice side-effect: if you enter text in one encoding and change the encoding setting to something radically different (say you enter Western European Windows text but change the encoding to IBM <a title="Extended Binary Coded Decimal Interchange Code article on Wikipedia" href="http://en.wikipedia.org/wiki/Extended_Binary_Coded_Decimal_Interchange_Code">EBCDIC</a> Japanese), you&#8217;ll end up with a very different hash than you would have had if you used the &#8220;right&#8221; encoding. This isn&#8217;t encryption by any means as it could be easily reverse engineered if you knew what encodings were used, but it does significantly scramble things to the point that it makes it much harder to figure out exactly what you did.</li>
</ul>
<p>I had originally started adding support for <a title="HMAC article on Wikipedia" href="http://en.wikipedia.org/wiki/HMAC">HMAC</a> signed hashes but have abandoned that for now. If there&#8217;s anyone out there who might actually find that useful, drop me a line and I&#8217;ll revisit the code to see what I might be able to add. Downloads can be found at the first link above.</p><div><a class="addthis_button" href="//addthis.com/bookmark.php?v=250" addthis:url='http://www.jeffdarlington.com/2008/06/30/winhasher-13/' addthis:title='WinHasher 1.3 '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2008/06/30/winhasher-13/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Praise for XCache</title>
		<link>http://www.jeffdarlington.com/2008/03/18/praise-for-xcache/</link>
		<comments>http://www.jeffdarlington.com/2008/03/18/praise-for-xcache/#comments</comments>
		<pubDate>Wed, 19 Mar 2008 01:34:12 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[GPF]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[opcode]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[XCache]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/2008/03/18/praise-for-xcache/</guid>
		<description><![CDATA[The new GPF site has been running live for half a month now, and I&#8217;m proud to say things have been running incredibly smoothly. That is, at least, from my perspective; I haven&#8217;t seen any major glitches, and aside from a few typos in the comic (which are obviously independent of the site code), nobody [...]]]></description>
			<content:encoded><![CDATA[<p>The new <a href="http://www.gpf-comics.com/" title="General Protection Fault">GPF</a> site has been running live for half a month now, and I&#8217;m proud to say things have been running incredibly smoothly. That is, at least, from my perspective; I haven&#8217;t <em>seen</em> any major glitches, and aside from a few typos in the comic (which are obviously independent of the site code), nobody has written me about any problems. This is especially heartening because the new site was pretty much entirely coded by hand by me, sans a few bits and pieces. (I can&#8217;t take credit for the OS, the web server software, the database engine, or the forum. But everything else&#8230; yep, that was me.)</p>
<p>There were a lot of motivations for writing my own archiving system, but the primary one was efficiency. While I considered trying something off-the-shelf, so to speak, like <a href="http://mindfaucet.com/comicpress/" title="ComicPress">ComicPress</a> or <a href="http://drupal.org/" title="Drupal">Drupal</a>, I really wanted something that would be blazingly fast yet still dynamically generated to let me do things like <a href="http://www.gpf-comics.com/premium/" title="GPF Premium">GPF Premium</a> on the server side, primarily for security reasons. (Server-side processing means no messy JavaScript is required by the users, thus exposing them to less risks, while Premium content doesn&#8217;t even get sent to the browser at all if Premium isn&#8217;t enabled.) So the GPF site is optimized out the wahzoo, with certain high-volume pages built once by nightly crons while others that require more interactivity reduce database queries to simple selects as much as possible. I&#8217;m never one to brag and toot my own horn, but I&#8217;m actually pretty proud of the new site and how responsive it is.</p>
<p>Of course, I can&#8217;t really take <em>all</em> the credit. I do have to give some serious props to <a href="http://xcache.lighttpd.net/" title="XCache">XCache</a>.</p>
<p>For those unfamiliar with <a href="http://www.php.net/" title="PHP">PHP</a>, it is one of many server-side, interpreted scripting languages commonly used for dynamic Web site development. The caveat, however, to any interpreted language is that on each request the source script must be read, parsed, <a href="http://en.wikipedia.org/wiki/Compiler" title="Compiler article on Wikipedia">compiled</a>, and executed before anything is set back to the end user&#8217;s browser. This is one reason why dynamic sites are and will always be slower than serving purely static HTML files. Static HTML just needs to be read and regurgitated; anything that requires the Web server to actually <em>think</em> takes more time. Add to that the fact that there could be hundreds or even thousands of requests all competing at once for content and it&#8217;s a miracle anything get served at all.</p>
<p>XCache is one of several <a href="http://en.wikipedia.org/wiki/Opcode" title="Opcode article on Wikipedia">opcode</a> <a href="http://en.wikipedia.org/wiki/Cache" title="Cache article on Wikipedia">caching</a> extensions for PHP. Essentially, when the first request for a script is made, the script is parsed and compiled as usual. However, XCache stores the compiled code so subsequent requests can skip the parsing and compilation steps and go directly to executing the code. This significantly increases the speed of execution by eliminating one of the costliest parts of the process (except perhaps database connections). In addition, XCache also includes the ability to cache <a href="http://en.wikipedia.org/wiki/Variable" title="Variable article on Wikipedia">variables</a> and <a href="http://en.wikipedia.org/wiki/Object-oriented_programming" title="Object-oriented programming article on Wikipedia">objects</a>, so commonly repeated and expensive variable generation&#8211;such as the <a href="http://en.wikipedia.org/wiki/Cryptographic_hash_function" title="Cryptographic hash function article on Wikipedia">cryptographic hashes</a> I use for salting cookie hashes or database look-ups for common elements like the Premium subscription levels&#8211;can be stored in the cache rather rebuilt on each request.</p>
<p>I was first introduced to XCache by the <a href="http://neosmart.net/dl.php?id=12" title="NeoSmart Technologies: XCache for WordPress">XCache for WordPress</a> plugin, which was probably mentioned in one of the development feeds built into the <a href="http://wordpress.org/" title="WordPress">WordPress</a> dashboard. I&#8217;ve been running this combination here on the blog for a little while with moderate success; I&#8217;m still trying to find a good balance of configuration settings to get the best results, but I&#8217;ve been happy with the results so far. Without putting much thought into it, I went ahead and installed XCache on the GPF server, hoping that it would help even if I never got a chance to optimize it. Fortunately, it <em>has</em> helped, and now that I&#8217;ve optimized the settings it&#8217;s exceeded most of my expectations. I&#8217;m not sure if there&#8217;s something about my code that caches better than WordPress, but GPF has done much better with XCache than the blog has.</p>
<p>Admittedly, I haven&#8217;t compared it to any other opcode cachers, nor have I benchmarked it against any of the competition. That said, however, I heartily recommend it to anybody running PHP applications. To get the greatest benefit, you may need to modify some code (or install a plugin if you&#8217;re using a prepackaged application) to take advantage of the variable/object caching. But even without modification the opcode caching alone makes for a vast improvement.</p><div><a class="addthis_button" href="//addthis.com/bookmark.php?v=250" addthis:url='http://www.jeffdarlington.com/2008/03/18/praise-for-xcache/' addthis:title='Praise for XCache '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2008/03/18/praise-for-xcache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vista first impressions</title>
		<link>http://www.jeffdarlington.com/2007/12/10/vista-first-impressions/</link>
		<comments>http://www.jeffdarlington.com/2007/12/10/vista-first-impressions/#comments</comments>
		<pubDate>Mon, 10 Dec 2007 15:06:44 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/2007/12/10/vista-first-impressions/</guid>
		<description><![CDATA[I had my first brush with Microsoft Windows Vista this weekend. Like most hard-core geeks who are skeptical of just about anything Microsoft, I&#8217;ve read all the hype and negative press and have thus avoided it like the plague. I recently bought a new tablet PC (which just arrived today, woohoo!) and made sure to [...]]]></description>
			<content:encoded><![CDATA[<p>I had my first brush with <a href="http://en.wikipedia.org/wiki/Windows_Vista" title="Windows Vista article on Wikipedia">Microsoft Windows Vista</a> this weekend. Like most hard-core geeks who are skeptical of just about anything <a href="http://www.microsoft.com/" title="Microsoft">Microsoft</a>, I&#8217;ve read all the hype and negative press and have thus avoided it like the plague. I recently bought a new <a href="http://en.wikipedia.org/wiki/Tablet_PC" title="Tablet PC article on Wikipedia">tablet PC</a> (which just arrived today, woohoo!) and made sure to &#8220;downgrade&#8221; it to <a href="http://en.wikipedia.org/wiki/Windows_XP" title="Windows XP article on Wikipedia">Windows XP</a>. But this weekend as I was performing a <a href="http://www.biblegateway.com/passage/?search=Luke%2010:25-37;&amp;version=31;" title="BibleGateway: Luke 10:25-37 (NIV)">Good Samaritan</a> deed I was inadvertently forced to directly interact with Microsoft&#8217;s latest and &#8220;greatest&#8221; <a href="http://en.wikipedia.org/wiki/Operating_system" title="Operating system article on Wikipedia">OS</a>. And while there&#8217;s probably nothing new in this post to anyone who&#8217;s used Vista already, I&#8217;m sad to report most of what I&#8217;d heard and feared are true.</p>
<p>First, a little background. This past week, my sister-in-law&#8217;s notebook died. Exactly what happened is still uncertain; we know for certain that the video subsystem is on the fritz, which likely means that something is up with the motherboard (since the video is on-board). The LCD occasionally looks like a black light lava lamp, if that makes any sense, although I was surprised to have it actually work off and on with any given reboot. Windows XP crashes on boot on the <a href="http://www.nvidia.com/" title="NVIDIA">NVIDIA</a> video driver, which might (or might not) be consistent with a video hardware problem. Throw into the mix the fact that the system spontaneously reboots or locks up after a indeterminable period of time, sometimes as long as several hours or as short as ten minutes. I pulled out ever trick and tool in my geek arsenal and haven&#8217;t been able to completely diagnose the problem, let alone fix it. So now the task has become one of data recovery, and with a creative combination of a <a href="http://www.knoppix.org/" title="Knoppix Linux Live CD">Knoppix</a> &#8220;live&#8221; CD, a USB flash drive, and a USB external hard drive this has gone off without much of a hitch.</p>
<p>Now we introduce the new machine. Like its predecessor,  it&#8217;s an <a href="http://www.hp.com/" title="Hewlett-Packard">HP</a> Pavilion &#8220;media center&#8221; notebook. I put &#8220;media center&#8221; in quotes because while the old machine actually ran <a href="http://en.wikipedia.org/wiki/Windows_XP_Media_Center_Edition" title="Windows XP Media Center Edition article on Wikipedia">Windows XP Media Center Edition</a>, the new machine runs Vista Home Premium. Other than the OS, it&#8217;s obvious both machines are built for one thing: to be a portable home theater system. Both have massive widescreen LCDs, dual huge hard drives, several gigs of RAM, and the latest processors for their time. Needless to say, both machines are meant to be powerful multimedia workhorses and they have the muscle to prove it. Thus, there&#8217;s no reason to expect the new machine to be sluggish or slow.</p>
<p>And yet, it occasionally was. HP, like many manufacturers, loads its new machines with tons of useless garbage software. That said, I was surprised to see how little junk was really pre-installed on this thing. So the only thing I can think of that was really bogging it down was Vista itself. I can&#8217;t be 100% certain of this as I didn&#8217;t take the time to really investigate (most of my time was spent extracting data from the old machine), but there were plenty of times Vista seemed to drag and stutter, sometimes becoming unresponsive for a few seconds.</p>
<p>The culprit, I expect, is the new &#8220;Aero&#8221; interface. Sure, it <em>looks</em> pretty. I&#8217;ll give it that. Compared to XP&#8217;s default <a href="http://www.crayola.com/" title="Crayola">Crayola</a>-inspired interface (which is one of the first settings I turn off on a new XP machine), it looks slick and modern. But it also seems bulky and bloated. The moment I turned it off and went back to the <a href="http://en.wikipedia.org/wiki/Windows_95" title="Windows 95 article on Wikipedia">Windows 95</a>-ish &#8220;classic&#8221; interface the machine become much more responsive and easier to use. While it was cute watching windows &#8220;pop&#8221; into existence (something that will probably smell suspiciously like copyright infringement to any <a href="http://en.wikipedia.org/wiki/Mac_OS_X" title="Mac OS X article on Wikipedia">Mac OS X</a> user) and the translucent window borders are a nice aesthetic trick, the performance cost is pretty high and not really worth it.</p>
<p>Then there&#8217;s the security model. I&#8217;d like to applaud Microsoft for finally taking security seriously and making a concerted effort to be responsible with its market dominance by forcing users to be more secure. But boy howdy, is it a bear to work with. <a href="http://www.apple.com/" title="Apple">Apple</a> has been running <a href="http://www.apple.com/getamac/ads/" title="Apple: Get a Mac Ads">attack ads</a> against Vista in their &#8220;PC vs. Mac&#8221; campaign where the nerdy PC character has to ask permission from a Secret Service inspired man-in-black for every single thing he does. I thought that was funny at the time, but I didn&#8217;t really realize how <em>true</em> it was. Having now been trained and used to doing things as an administrator in XP, it&#8217;s a real shock to be stopped at every other mouse click with a warning that what I&#8217;m about to do has serious security implications. It&#8217;s not just a pop-up box, either; the entire screen flashes, dimming everything else and forcing to acknowledge the pop-up before you can continue. Yes, I&#8217;m <em>aware</em> of the serious security implications; I&#8217;m stepping outside the box and doing advanced things outside what a normal user is likely to do. (For example, moving the contents of the old machine&#8217;s &#8220;Application Data&#8221; and &#8220;Local Settings&#8221; folders, normally hidden, to their new home.) But do you have to warn me every single blasted time? Really. What&#8217;s worse is that this extends beyond some of the obscure, funky guru work I&#8217;m currently doing. Simple configuration changes are challenged with the same severity as drastic, devastating, and potentially damaging attacks. Where 95/<a href="http://en.wikipedia.org/wiki/Windows_98" title="Windows 98 article on Wikipedia">98</a> was blatantly promiscuous (or more properly naive) and XP (post SP2) was cautious, Vista is downright paranoid. I half expect it to call in the FBI and the National Guard every time I change my wireless <a href="http://en.wikipedia.org/wiki/Service_set_identifier" title="Service set identifier article on Wikipedia">SSID</a>.</p>
<p>Maybe there&#8217;s someone out there who can help. If you have experience with Vista and you know how to turn these security pop-up off, just for my login, at least until I&#8217;m done doing arcane geek magic to finish restoring this machine, <em>please</em> let me know. I think I&#8217;d be done in a fraction of the time if I didn&#8217;t have to babysit these prompts all the time. Even if it&#8217;s a setting that lets me check a box that says &#8220;don&#8217;t show this again&#8221; so I only get it once per action will be a big help.</p>
<p>After all that complaining, let me mention one thing I <em>did</em> like about Vista: parental controls. As a parent who is faced with a future where my young son will be a few clicks away from all the porn and identity theft of the Internet, I&#8217;ve been looking hard at third-party (as well as home grown) filtering and monitoring solutions. Vista apparently has this built in. Unfortunately, I have no idea how effective it is. My guess is that workarounds to bypass it are now just <a href="http://www.google.com/search?q=bypass+Windows+Vista+parental+controls" title="Google search: bypass Windows Vista parental controls">a Google</a><a href="http://www.google.com/search?q=bypass+Windows+Vista+parental+controls" title="Google search: bypass Windows Vista parental controls"> search</a> away. But still, just like XP&#8217;s firewall is more of an afterthought than a real security measure, it&#8217;s got to be better than nothing, and it will probably be easier to train my non-tech-savvy sister-in-law in how to use it than to explain about proxies and packet filtering. Depending on how long this machine is in my possession, I might try to experiment and see just how effective these parental controls really are.</p>
<p>Again, nothing necessarily new here that you probably haven&#8217;t seen everywhere else, but I thought I&#8217;d share my experiences to anyone interested in listening. I&#8217;m leaning more and more toward ditching Microsoft completely and going with a completely <a href="http://en.wikipedia.org/wiki/Alternative_terms_for_free_software" title="Alternative terms for free software article on Wikipedia">FLOSS</a> setup, and Vista is helping push me in that direction. Then again, I had huge reservations about XP when it came out, too, so who knows what the future will bring?</p><div><a class="addthis_button" href="//addthis.com/bookmark.php?v=250" addthis:url='http://www.jeffdarlington.com/2007/12/10/vista-first-impressions/' addthis:title='Vista first impressions '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2007/12/10/vista-first-impressions/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>WinHasher 1.2</title>
		<link>http://www.jeffdarlington.com/2007/11/30/winhasher-12/</link>
		<comments>http://www.jeffdarlington.com/2007/11/30/winhasher-12/#comments</comments>
		<pubDate>Sat, 01 Dec 2007 02:10:04 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[WinHasher]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/2007/11/30/winhasher-12/</guid>
		<description><![CDATA[I just can&#8217;t leave well enough alone. I&#8217;ve been mildly annoyed with the &#8220;hash in progress&#8221; and progress dialogs in WinHasher 1.1. The original idea was to use System.ComponentModel.BackgroundWorker to easily multi-thread very large hashes (say of CD or DVD ISOs or uncompressed video files). This had two benefits: (1) it allows the user to [...]]]></description>
			<content:encoded><![CDATA[<p>I just can&#8217;t leave well enough alone. I&#8217;ve been mildly annoyed with the &#8220;hash in progress&#8221; and progress dialogs in <a href="http://www.gpf-comics.com/dl/winhasher/" title="GPF Downloads: WinHasher">WinHasher</a> 1.1. The original idea was to use <code>System.ComponentModel.BackgroundWorker</code> to easily multi-thread very large hashes (say of CD or DVD ISOs or uncompressed video files). This had two benefits: (1) it allows the user to cancel a hash in progress and (2) gives us an opportunity to update the GUI while the hashing takes place in the background, meaning we can inform the user of the progress. Unfortunately, I couldn&#8217;t find a method right away to determine the progress of an individual hash. <code>System.Security.Cryptography.HashAlgorithm.ComputeHash()</code> by default takes a byte array or file stream and chugs the whole thing at once, spitting out the hash as a result. There&#8217;s no way with this method to determine how far along you are.</p>
<p>However, if you look at the guts of <code>ComputeHash()</code>, you&#8217;ll find it reads in chunks of bytes into a buffer, then calls two methods: <code>TransformBlock()</code> for every chunk but the last, and <code>TransformFinalBlock()</code> to hash the last chunk and finalize the hash. The result can then be obtained from the <code>HashAlgorithm.Hash</code> property. If we bypass the convenience of the single <code>ComputeHash()</code> method call, you can read chunks of bytes from the buffer, feed it to the <code>Transform...()</code> methods, and keep track of how many bytes have been read so far. Since we already know how big the file is from the start (<code>System.IO.FileStream.Length</code>), it&#8217;s trivial to calculate a percentage complete. Want the progress of a multi-file comparison? Sum the lengths of all files in the batch, then keep track of the total number of bytes hashed along the way.</p>
<p>I&#8217;ve bumped WinHasher to version 1.2. It should be available on the official site by tomorrow morning.</p><div><a class="addthis_button" href="//addthis.com/bookmark.php?v=250" addthis:url='http://www.jeffdarlington.com/2007/11/30/winhasher-12/' addthis:title='WinHasher 1.2 '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2007/11/30/winhasher-12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

