<?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>Finely Cultured &#187; Software</title>
	<atom:link href="http://finelycultured.com/category/tech/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://finelycultured.com</link>
	<description>Eric Danielson&#039;s Personal Blog</description>
	<lastBuildDate>Tue, 10 Aug 2010 04:30:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Building Documentation with Mediawiki: Pros &amp; Cons</title>
		<link>http://finelycultured.com/2010/08/building-documentation-with-mediawiki-pros-cons/</link>
		<comments>http://finelycultured.com/2010/08/building-documentation-with-mediawiki-pros-cons/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 04:14:42 +0000</pubDate>
		<dc:creator>Eric Danielson</dc:creator>
				<category><![CDATA[Mediawiki]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://finelycultured.com/?p=134</guid>
		<description><![CDATA[I&#8217;ve been talking with a lot of people lately about what I do, and I&#8217;ve gotten a lot of questions about our use of Mediawiki &#8211; largely in the &#8220;Why are you using that?&#8221; vein. The first few times I didn&#8217;t have a great answer, for reasons anyone who&#8217;s really worked with Mediawiki knows &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been talking with a lot of people lately about <a href="http://docwiki.embarcadero.com/">what I do</a>, and I&#8217;ve gotten a lot of questions about our use of Mediawiki &#8211; largely in the &#8220;Why are you using <em>that</em>?&#8221; vein. The first few times I didn&#8217;t have a great answer, for reasons anyone who&#8217;s really worked with Mediawiki knows &#8211; it&#8217;s just not that pleasant a system, and it feels crufty, especially when I&#8217;m talking to Agile Ruby Devs. It&#8217;s worked great for our systems, though, and I wanted to share some of the benefits we&#8217;ve gotten, as well as some of the drawbacks of working with Mediawiki.</p>
<p><em>(Incidentally, if you&#8217;re checking the Wiki link above before August 30th or so, you&#8217;re not seeing the latest version of the Wiki, which includes around 9 months of improvements.)</em></p>
<h2>Who am I to talk about this?</h2>
<p>For the last 18 months I&#8217;ve been working at Embarcadero Technologies converting the whole of the RADStudio/Delphi/C++Builder documentation over to a MediaWiki based system. As of right now, I have a 7-server continuous-build system designed to build and support both product and language documentation in four languages. I&#8217;ve got 18 wikis running off a single codebase with custom skins, custom extensions, and scripts writing and retrieving around half a million pages on a pretty regular basis. It&#8217;s fair to say at this point I&#8217;m familiar with deploying, maintaining, and working with Mediawiki, both the good and the bad.</p>
<h2>Why Mediawiki?</h2>
<p>While it brings its share of problems, Mediawiki does a phenomenal amount of what we needed right out of the box. Given that we&#8217;ve got an extremely limited budget and an even more limited development team to support a professional commercial product, Mediawiki&#8217;s capabilities have been invaluable to us.</p>
<p>Here&#8217;s what we&#8217;re getting right away:</p>
<h3>Easy Syntax</h3>
<p>This was the #1 reason we went with Mediawiki  &#8211; We wanted something where anyone could write new documentation easily, and eventually we wanted to open up the documentation to contributions from customers. Mediawiki has an easy-to-use syntax, and it&#8217;s a syntax that many people are already familiar with. Anyone trying to get user interaction on a site knows that even if you write the content for the user you&#8217;re still asking too much of them &#8211; we wanted as low a barrier to entry as possible, and it&#8217;s a fair guess everyone who hits our site has at least Seen Wiki syntax at some point. So far it&#8217;s working: one of my best moments at work was when our localization manager complained in jest that our writers were too productive for his budget. We&#8217;ve seen a 40% increase in output over the old XML-based system, which is great, and it&#8217;s even easier to bring new people up to speed, which is crucial.</p>
<h3>Localization</h3>
<p>I&#8217;m not sure how strong a consideration this was at the beginning, but boy has it saved us time and stress. Our documentation goes into four different languages, so having a system that handled Japanese out of the box has been crucial for us. Mediawiki has a robust localization framework built in, which is another part of the system we didn&#8217;t have to write.</p>
<h3>Accessibility</h3>
<p>I&#8217;m honestly not sure where we sit on the regulations on this one &#8211; I&#8217;m not sure if our company is required to have a 509 solution. Fortunately, I don&#8217;t have to worry about it, because it&#8217;s baked in right out of the box.</p>
<h3>Scale</h3>
<p>Our documentation is around 70,000 pages per language, times four languages, times two product versions. Half of the pages are duplicated because of how our scripts work, so we&#8217;re at ballpark 750,000 pages on the DocWiki system. We needed a system we knew could handle anything we threw at it, and Mediawiki&#8217;s one of the few that have been field tested to be able to stand up to just about anything. Other CMS&#8217;s may be able to handle this sort of load, but we absolutely knew Mediawiki could &#8211; we don&#8217;t have the resources to plow a few months of dev into a system and have it collapse once we put all our documentation in.</p>
<h3>Revision Management</h3>
<p>Built in, out of the box, including diffs and comments. We transitioned away from SVN to Mediawiki, so the revision tracking made it very easy for us to track our changes. It&#8217;s got easy-to-use diffs and an RSS feed, so we can keep tabs both on the Wiki and on the writers. It&#8217;s also got a detailed log, so we can tell who was responsible for  anything that happens on the system.</p>
<h3>Robust User Management</h3>
<p>Including Roles. There&#8217;s some quirks here, but overall, it&#8217;s another thing we didn&#8217;t have to worry about. I&#8217;ve been able to expand on this quite a bit to allow mass user imports from our other systems, user searches, and a few other neat tricks that have made our lives easier.</p>
<h3>API</h3>
<p>We auto-generate a lot of our content, so we needed a clean way to edit certain pages without affecting others. Mediawiki has an API baked in, and the mwclient python scripts work wonders. Another part of the system we didn&#8217;t have to build.</p>
<h3>Extensibility &#038; Community</h3>
<p>Because we&#8217;re using a packaged solution for a fairly specialized use case, extensibility was part of the spec. Mediawiki has a shockingly large number of hooks for extensions, and really allows us to do just about anything we want with the right combination of calls. It&#8217;s also got an enormous developer community, including the WikiMedia foundation, which contributes its code back to the MW community. As a bonus, you can see anything that&#8217;s in use on the WikiMedia servers, which guarantees the code has been put through its paces.</p>
<h3>Skinability</h3>
<p>In our case, we were able to change the look of the default Mediawiki skin enough to get a distinct look, but at the same time, it&#8217;s still clearly Mediawiki. This is a bonus for us, since it tells users what system they&#8217;re using and saves us a whole lot of user training.</p>
<h3>LAMP &#038; Caching</h3>
<p>Say what you will about the LAMP stack, but we&#8217;re on an extremely restricted development budget &#8211; we needed something that worked. LAMP gets us up and running in 20 minutes on a stack that&#8217;s in use practically everywhere &#8211; there&#8217;s not a problem we&#8217;re going to hit that someone else hasn&#8217;t seen already. Mediawiki also supports APC, Squid &#038; Memcached right out of the box &#8211; with everything set up, we&#8217;re catching almost everything somewhere in the caches.</p>
<h2>What&#8217;s Bad?</h2>
<h3>It&#8217;s Unstructured</h3>
<p>Mediawiki is not meant for structured content &#8211; it&#8217;s basically built for a flat hierarchy. This is a bit of a problem when you&#8217;re dealing with any serious product documentation, and was especially a problem for us, as we had highly structured content. We had to invent our way around the table of contents, the index, and the tagging we needed to make our shippable help files.</p>
<h3>Search is a Joke</h3>
<p>The built-in Mediawiki search is just absolutely atrocious &#8211; even Wikimedia&#8217;s using Lucene instead. If you have any reasonable expectation of users finding content on your site, you need a different solution.</p>
<h3>Architectural Limits</h3>
<p>Because of how Mediawiki stores inter-page links and category information, pages that are extremely link-heavy tank the wiki when you try to save them. Looks like a database lock, but I&#8217;m not totally sure. It took me a long time to track this issue down, but that&#8217;s my leading contender for the mysterious &#8220;The wiki&#8217;s dead!&#8221; bug.</p>
<h3>Spaghetti Code</h3>
<p>Especially in the themes. Or at least, a codebase that&#8217;s so large and daunting it might as well be spaghetti code. Either way, it really looks like code which has been developed by a large number of different people, none of whom knew each other. Which it basically is, and it&#8217;s a triumph for that, but it&#8217;s not terribly readable.</p>
<h3>PHP</h3>
<p>Yeah, we all knew it was coming &#8211; PHP seriously sucks as a language. It&#8217;s the most universally-deployable web dev language around, but then again, McDonalds is the most universally-deployed hamburger-ingestion venue around &#8211; doesn&#8217;t make it good.</p>
<p>In a future post, I&#8217;ll talk a bit more about the specific challenges we faced and how we dealt with them. I think we&#8217;ve got some pretty cool stuff going into our wiki setup, and maybe someone will even find it useful.</p>
<p>If you have any questions, by all means, leave them in the comments below, and I&#8217;ll address them as best I can.</p>
<p>Thanks!</p>
]]></content:encoded>
			<wfw:commentRss>http://finelycultured.com/2010/08/building-documentation-with-mediawiki-pros-cons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick Bits: Verify the hash of downloads</title>
		<link>http://finelycultured.com/2010/05/quick-bits-verify-download-hash/</link>
		<comments>http://finelycultured.com/2010/05/quick-bits-verify-download-hash/#comments</comments>
		<pubDate>Sat, 22 May 2010 00:07:24 +0000</pubDate>
		<dc:creator>Eric Danielson</dc:creator>
				<category><![CDATA[Quick Bits]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://finelycultured.com/?p=106</guid>
		<description><![CDATA[Just whipped up a script to check the SHA1 &#38; MD5 hashes of a file and compare it to the clipboard. I rolled it into an Automator workflow so it can be attached as a folder action. Basically, the script takes a parameter, which is the full file name, runs openssl sha1 and openssl dgst [...]]]></description>
			<content:encoded><![CDATA[<p>Just whipped up a script to check the SHA1 &amp; MD5 hashes of a file and compare it to the clipboard. I rolled it into an Automator workflow so it can be attached as a folder action.</p>
<p>Basically, the script takes a parameter, which is the full file name, runs openssl sha1 and openssl dgst on it, and compares each value to what&#8217;s in the clipboard. If either signature match the clipboard, it pops up a growl notification confirming that the signature matches. If it doesn&#8217;t get a match, it growls the Sha1 and MD5 tags.</p>
<p><strong>Get it here</strong>: <a href="http://dl.dropbox.com/u/102389/hashworkflow.zip">hashworkflow.zip</a></p>
<p>You&#8217;ll need <a href="http://growl.info/">Growl</a>, if you don&#8217;t have it, and you&#8217;ll need to install growlnotify, which comes with Growl.</p>
<p><strong>Instructions</strong>:</p>
<ol>
<li>Unzip.</li>
<li>Open the .workflow</li>
<li>Go to File -&gt; Save As: (may not be necessary&#8230;)</li>
<li>Ctrl+click on your Downloads folder and select Services -&gt; Folder Actions Setup&#8230;</li>
<li>Select &#8220;Hash Downloads.workflow&#8221;</li>
</ol>
<p><strong>Issues:</strong></p>
<p>The script uses pbpaste to read the clipboard. Since there&#8217;s no way to guarantee pbpaste is giving back text, this may cause a problem when there&#8217;s large amounts of data on the clipboard. Clipboard contents are assigned to a variable using the syntax PB=`pbpaste`, so there shouldn&#8217;t be a risk of accidentally running a command that isn&#8217;t intended, but I haven&#8217;t extensively tested for this.</p>
<p><span style="font-size: 13.1944px;"><strong>Disclaimer </strong></span></p>
<p><span style="font-size: 13.1944px;">I&#8217;ve tested this for approx. 6 minutes. I make no claims about the safety of this software, and take no responsibility for the results of running it. I took shortcuts and the code sucks. Caveat Downloador.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://finelycultured.com/2010/05/quick-bits-verify-download-hash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac OS X Tip: Use a solid color background of any color</title>
		<link>http://finelycultured.com/2009/11/mac-os-x-tip-use-a-solid-color-background-of-any-color/</link>
		<comments>http://finelycultured.com/2009/11/mac-os-x-tip-use-a-solid-color-background-of-any-color/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 23:20:38 +0000</pubDate>
		<dc:creator>Eric Danielson</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://finelycultured.com/?p=47</guid>
		<description><![CDATA[I&#8217;ve been annoyed by the inability to easily set a solid color background since I started using OS X. Apple ships a couple &#8220;Solid background&#8221; png files, but they&#8217;re without fail Not the colors I want. Turns out, there&#8217;s a nice, easy way to get a solid color background of your choice that doesn&#8217;t involve [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been annoyed by the inability to easily set a solid color background since I started using OS X. Apple ships a couple &#8220;Solid background&#8221; png files, but they&#8217;re without fail Not the colors I want.</p>
<p>Turns out, there&#8217;s a nice, easy way to get a solid color background of your choice that doesn&#8217;t involve making a new image for each color you want. OS X supports transparency in PNGs used as wallpaper, showing the desktop color through the transparent parts. If you use a small transparent PNG and set it to &#8220;Center&#8221;, you&#8217;ll get a solid color desktop, and you can change the color using the color picker next to the &#8220;Center&#8221; pull-down.</p>
<p>I&#8217;ve conveniently attached a 128&#215;128 totally transparent png file below:</p>
<div id="attachment_48" class="wp-caption aligncenter" style="width: 138px"><img class="size-full wp-image-48 " title="blank" src="http://finelycultured.com/wp-content/uploads/2009/11/blank.png" alt="Save me and use me as wallpaper!" width="128" height="128" /><p class="wp-caption-text">Right-click above me!</p></div>
<p>Save this file to your &#8220;Pictures&#8221; folder, open up System Preferences, pick Desktop &amp; Screensaver, select the blank picture, and choose &#8220;Center&#8221; from the orientation pulldown menu. A color selection will appear to the left &#8211; click it, and select the color you want your desktop to be.</p>
<p>Simple, but this has been periodically bugging the hell out of me for about a decade now.</p>
<p>Note: This is based on a tip on MacOSXHints, found here:<br />
<a href="http://www.macosxhints.com/article.php?story=20021002055217828"> http://www.macosxhints.com/article.php?story=20021002055217828</a></p>
]]></content:encoded>
			<wfw:commentRss>http://finelycultured.com/2009/11/mac-os-x-tip-use-a-solid-color-background-of-any-color/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
