<?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>Terminally Incoherent &#187; software</title>
	<atom:link href="http://www.terminally-incoherent.com/blog/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.terminally-incoherent.com/blog</link>
	<description>Utterly random, incoherent and disjointed rants and ramblings...</description>
	<lastBuildDate>Thu, 18 Mar 2010 15:24:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Make my OS Faster</title>
		<link>http://www.terminally-incoherent.com/blog/2009/11/30/make-my-os-faster/</link>
		<comments>http://www.terminally-incoherent.com/blog/2009/11/30/make-my-os-faster/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 15:35:57 +0000</pubDate>
		<dc:creator>Luke Maciak</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.terminally-incoherent.com/blog/?p=4176</guid>
		<description><![CDATA[Have you noticed how all prominent operating systems seem to bloat with each release? Windows is probably the best example, but even Ubuntu had slowly gained weight and become more of a resource hog over the years. It&#8217;s sad really. Instead of becoming leaner, more optimized and streamlined our OS&#8217;s become bigger, more sluggish and [...]]]></description>
			<content:encoded><![CDATA[<p>Have you noticed how all prominent operating systems seem to bloat with each release? Windows is probably the best example, but even Ubuntu had slowly gained weight and become more of a resource hog over the years. It&#8217;s sad really. Instead of becoming leaner, more optimized and streamlined our OS&#8217;s become bigger, more sluggish and encumbered with tons of unnecessary features. The primary driving force behind OS development these days is usability (a noble cause) and multiplying the feature count. Because nothing shows that the new version is better than a bullet list of new features that can be printed on a sales brochure. The OS makers are often forgoing optimization relying on Moore&#8217;s law to pick up the slack. Naturally they forget that most users do not replace their computer every 18 months. Therefore there is a discrepancy between what users have in terms of hardware, what should they have based on Moore&#8217;s law and what the developers are shooting for.</p>
<p>The result is that unless you have a bleeding edge hardware, your new OS is likely to run anywhere between slow and sluggish. Add an array of resident tools such as Anti Virus suite, print monitors, media programs that launch on start up, preloaders of various applications, IM suites and you have a machine that is moving in slow motion from the day one. Any new resident programs and (God forbid) inevitable malware infections will bring the machine to a grinding halt. If not today, then tomorrow when new releases of software will assume hardware moved to the next performance bracket as predicted by Moore&#8217;s law.</p>
<p>If you have ever worked in IT you know that the #1 user complaint you will hear on a daily basis is <em>&#8220;my computer is slow&#8221;</em>. Actually, you don&#8217;t even have to work in IT to know that. All you need is to work in any field where you need some technical knowledge. Or hell, if you ever reveal any kind of computer know-how to your friends and relatives you will likely be overrun with questions on how to make windows faster.</p>
<p>Slow performance is such a pervasive issue that even malware makers are using a promise of fixing it as a bait. If I had a penny for every time I&#8217;ve seen someone download a &#8220;registry cleaner&#8221;, &#8220;system speedup toolkit&#8221; or other &#8220;turbo booster&#8221; software which was really a trojan, I would be a rich man. People fall for this trick all the time, because they get desperate. They buy a computer which runs fine for 6 months to a year, and then starts becoming more and more sluggish. No matter what they do, they can&#8217;t return it to the original performance. Why?</p>
<p>Well, it&#8217;s a difficult question. The performance degradation has many possible causes:</p>
<ol>
<li>Malware</li>
<li>Resident programs running at start up</li>
<li>Unnecessary services running in the background</li>
<li>3rd party software modifying the OS functions ways that degrade performance (a/v suites are big offenders here)</li>
<li>Disk fragmentation</li>
<li>OS updates that increase memory footprint and CPU load</li>
<li>Other software updates that increase memory footprint of running services</li>
<li>Gremlins maliciously flipping bits in the memory for LULZ</li>
<li>Bit bucket becoming full and overflowing</li>
<li>Machine spirits nesting in the hardware</li>
</ol>
<p>That last one is something I keep warning people about. If you keep personifying your computer, it will eventually cause a machine spirit to coalesce inside of your computer case. These spirits are not really autonomous beings &#8211; they are more like an empathic echo. They acquire all the personality traits which the user commonly ascribes to the machine. So if you keep saying something like &#8220;this computer hates me&#8221; or &#8220;I hate this computer&#8221; the machine spirit will really hate you, or assume you hate it and will work against you. A machine that is loved, and pampered may behave much better &#8211; but it can become moody, and downright malicious when it starts suspecting that the user is planing to replace it. Even if your machine spirit is benign most of the time, it still needs to steal some CPU cycles and some memory to store it&#8217;s personality and cognitive processes. The older the machine spirit, the more resources it requires. The only way to get rid of a machine spirit is to stop feeding it. When you think of your machine as an inanimate electronic box, or better yet &#8211; a tool, or extension of yourself the spirit will eventually cease to exist.</p>
<p>All joking aside, part of the performance degradation issue lies in the simple fact that most our operating systems are bloated to begin with. So even if you take a slow machine, wipe it clean and reinstall the OS it will still be slow. By the time you install all the current patches, all upgrades and equip it with the latest a/v suite you will be almost back to where you started minus the malware. But the user will install that back as soon as he gets the machine back. This happens because new applications and the OS updates are tailored at current hardware, whereas most users will be running them on a machine that is one or two Moore&#8217;s law iterations behind (if not more). Not only that, but our perception of what is fast changes quite significantly over the years. Your machine might have seemed fast 4 years ago, but that&#8217;s because it was on the cutting edge back then. Now the cutting edge has moved.</p>
<p>The more complex and feature full the operating systems get, the more prone they become to general crufting. For years now I have been dreaming about a lean, stripped down mainstream OS that would be available to general public, and could be installed on slightly older hardware. I mean, yes &#8211; you can do this with a stripped down Linux distro. For example I heard good things about <a href="http://en.wikipedia.org/wiki/Arch_Linux" rel="nofollow" class="liwikipedia">Arch</a>, and <a href="http://en.wikipedia.org/wiki/CRUX" rel="nofollow" class="liwikipedia">Crux</a>. But these are more of a fringe systems that are targeted at enthusiasts. Not necessarily something you install on your neighbors machine when he cries about performance issues. Besides, if you try hard enough you can make those systems bloated as well.</p>
<p>Microsoft has it&#8217;s <a href="http://en.wikipedia.org/wiki/Windows_Fundamentals_for_Legacy_PCs" rel="nofollow" class="liwikipedia">Windows Fundamentals</a> thing, which is a stripped down XP. Still, it can only be obtained via Volume Licensing which means it is clearly not targeted at the home market. Also, Fundamentals seems a bit like an afterthought &#8211; it&#8217;s not a flagship product and gets limited amount of attention.</p>
<p>What we really need is a modern OS designed from ground up to be lean, mean and optimized for performance. I mean something built for speed and usability &#8211; not retrofitted for it by stripping off useful features and degrading user experience. The most user friendly Linux distributions are usually tailored towards feature bloat. Can <a href="http://en.wikipedia.org/wiki/Google_Chrome_OS" rel="nofollow" class="liwikipedia">Google Chrome</a> break that trend?</p>
<p>Google certainly has the clout to market this OS to the masses, and brand recognition that won&#8217;t make people run for the hills. It&#8217;s still Linux, but people won&#8217;t know about it, and therefore won&#8217;t be scared of trying it. Could chrome be the first user friendly, mainstream Linux distro tailored towards non-geeks using legacy hardware?</p>
<p>It&#8217;s certainly interesting. I&#8217;m anxiously awaiting the release of the OS to see if it will follow the same high quality design as most other Google products. I&#8217;m also very curious as to how it will be received by mainstream, non-technical population. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.terminally-incoherent.com/blog/2009/11/30/make-my-os-faster/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Open Source and Cost of Use</title>
		<link>http://www.terminally-incoherent.com/blog/2009/11/10/open-source-and-cost-of-use/</link>
		<comments>http://www.terminally-incoherent.com/blog/2009/11/10/open-source-and-cost-of-use/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 14:47:25 +0000</pubDate>
		<dc:creator>Luke Maciak</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.terminally-incoherent.com/blog/?p=4115</guid>
		<description><![CDATA[Funny story: a coworker saw me using Clonezilla the other day. I was sitting in the frigid server room (did I say room, it&#8217;s more like a closet really) and cloning the shit out of some laptops. He seemed impressed by the concept and asked me how much did it cost. 
I did some mental [...]]]></description>
			<content:encoded><![CDATA[<p>Funny story: a coworker saw me using <a href="http://clonezilla.org/" class="liexternal">Clonezilla</a> the other day. I was sitting in the frigid server room (did I say room, it&#8217;s more like a closet really) and cloning the shit out of some laptops. He seemed impressed by the concept and asked me how much did it cost. </p>
<p>I did some mental math and decided that it couldn&#8217;t be that much. Knowing our server d00dz they probably bought the Dell PowerEdge server second hand somewhere so the whole thing was probably the discounted price of the hardware + the TB drive. No clue really, because these guys descend here every once in a while, attach themselves to the server rack for few hours and then vanish as suddenly as they appeared.</p>
<p>It turned out that my visitor was asking about the software. </p>
<p>Software of course is free. This did not register well. How could a powerful tool like that be free?</p>
<p>Well, it&#8217;s open source &#8211; I explained. And you can see that very well, by how the cloning process requires me to go through about 15 steps and configure it using a slightly cryptic ncurses interface. If this was a proprietary solution it would probably look much different. It would probably have two buttons (one to clone, one to restore) detailed graphical dialogs and animated progress bars &#8211; sort of like Norton Ghost has. </p>
<p>That sunk in. Free because it is not easy to use &#8211; it made all the sense in the world to him. Now, I didn&#8217;t say this because I&#8217;m a hater. I love open source software. In fact, I am a long time Ubuntu user. I love Firefox, I wrote my Masters thesis using LaTex (fun fact: no one in my thesis comity actually knew how to use Tex) and most of the software I wrote in my spare time was released under GPL. So I&#8217;m the last person who would want to badmouth open source projects. </p>
<p>Still&#8230; The above is often true. A lot of open source projects do require certain skill or know-how to use. There are plenty of exceptions of course. But for each Ubuntu, Firefox, and Open Office there is a Clonezilla, sendmail and Apache. Some open source apps are just not user friendly. At least not very much.</p>
<p>Is that wrong though? Nope, its not. A proprietary application can&#8217;t really afford to have an arcane user interface. The more difficult it is to configure and/or use, the less likely it is to find customers. When people pay for software they do require some level of convenience. Open Source software is often written by hackers for hackers and offered as is &#8211; no warranty, no support, no guarantees it will work on your machine. And you know what? I wouldn&#8217;t have it any other way.</p>
<p>It usually works like this: <em>Cheap</em>, <em>Powerful</em> or <em>Easy to Use</em> &#8211; for each project you can pick any two. Open source software can afford to concentrate on power and flexibility forgoing ease of use. A lot of apps are a major pain in the ass to use, but once you figure them out, they offer vastly superior performance, and configurability than their user friendly counterparts. Prime example could be using LaTex vs. a WYSIWYG editor.</p>
<p>Back when I was writing my thesis I made a conscious choice to go with LaTex rather than word like all of my peers. This meant that I had to do extra work in order to embed figures and charts (such as converting jpg images into EPS files) but it was worth it. My thesis looked much better than most of those generated with word. The custom context aware kearning and word spacing meant I never had to worry about my paragraphs not being justified properly. I could change just about every aspect of my document (font, character and line spacing, margins, paragraph spacing, headings etc..) just by tweaking the settings in the preamble. And don&#8217;t even get me started on maintaining proper numbering of figures or bibliography.</p>
<p>Most of my friends thought that they were getting the better end of the deal. After all they just had to fight with the quirky WYSIWYG UI &#8211; while I had to actually comprehend the arcane LaTex syntax. I thought the exact opposite. I take a LaTex problem over an idiosyncratic UI bullshit any day. LaTex issues are usually logical &#8211; syntax errors, or faulty markup that can be isolated, debugged and corrected. Whenever my thesis got messed up, I knew it was my fault, and I could apply standard debugging strategies to resolve it.</p>
<p>Word on the other hand&#8230; Well, sometimes it just fucks up the document because of a stray keystroke, but there is no easy, logical way to debug it because you can&#8217;t see the markup. You have to guess, try different things, hit the undo button a lot and if everything else fails, revert to a previous save. Ugh&#8230;</p>
<p>The Clonezilla server we have at work is similarly pretty sweet. We attached a little switch to it, and all I need to do is to plug the machine to be cloned into that switch and perform a network boot. It loads up the OS, let&#8217;s me quickly configure it and then it just does its&#8217; business. A proprietary solution would probably have much less flexibility for a much higher price. </p>
<p>So, easy to use does not always mean good and free does not always mean easy to use. Or something like that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.terminally-incoherent.com/blog/2009/11/10/open-source-and-cost-of-use/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>What does your browser say about you? (2009 edition)</title>
		<link>http://www.terminally-incoherent.com/blog/2009/11/02/what-does-your-browser-say-about-you-2009-edition/</link>
		<comments>http://www.terminally-incoherent.com/blog/2009/11/02/what-does-your-browser-say-about-you-2009-edition/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 14:25:36 +0000</pubDate>
		<dc:creator>Luke Maciak</dc:creator>
				<category><![CDATA[humor]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.terminally-incoherent.com/blog/?p=4066</guid>
		<description><![CDATA[Long, long time ago in a galaxy far, far away I posted the infamous article titled &#8220;What does your browser say about you?&#8221;. It got like 400 comments, got me on Digg, Reddit and crashed my server at least twice. Every once in a while I still get comments on it but these days they [...]]]></description>
			<content:encoded><![CDATA[<p>Long, long time ago in a galaxy far, far away I posted the infamous article titled <a href="http://www.terminally-incoherent.com/blog/2006/08/19/what-does-your-browser-reveal-about-your-personality" class="liinternal">&#8220;What does your browser say about you?&#8221;</a>. It got like 400 comments, got me on Digg, Reddit and crashed my server at least twice. Every once in a while I still get comments on it but these days they are mostly among the lines of:</p>
<p><em>&#8220;Dude, Firefox 2.0 is ancient! What about Chrome and IE8?&#8221;</em></p>
<p>Well, the point is that it was not ancient when I wrote that post. Back then it was cutting edge. But we came a long way since then and so I decided to post a short update to that post. </p>
<p>Of course there is really no point for me to update the entry for Lynx or Dillo because not much has changed for those apps. In fact, a lot of the browsers on that old list sort of faded into obscurity. For example IE overlays such as Maxthon became obsolete around the time IE7 introduced tabbed browsing. Others such as Netscape or AOL browser are hardly even around anymore. So in this post I will mainly concentrate on the leading browsers. You know, the ones that actually support modern standards and have large user bases. Oh, and Lynx.</p>
<table>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/firefox_icon.png" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/firefox_icon.png" alt="firefox_icon" title="firefox_icon" width="100" height="100" class="alignleft size-full wp-image-4081" /></a>
</td>
<td>
<strong>Firefox</strong></p>
<p>You are not sure why people complain about Internet Explorer so much. It is a perfectly serviceable tool for downloading Firefox on a new windows machine. You have tried different browsers but you feel they are all vastly inferior to FF. Flock does too much, Chrome does too little, Safari is to fancy and etc&#8230; Its not like these browsers have better features anyway. At least not for long. Any cool, worthwhile and innovative feature will be either added in the next Firefox release, or has already been replicated in the form of an extension. </p>
<p>Every time you switch browsers you are amazed at how different the web looks. Your favorite websites are covered with banners, useful AJAX based features are gone&#8230; Then you realize that other browsers don&#8217;t actually have Adblock, Greasemonkey and Stylish extensions that you rely on. You also get annoyed when you try to test your websites in other browsers since they don&#8217;t have access to the full version of Firebug.</p>
<p>Seeing how there is an extension for everything out there, you can&#8217;t imagine ever needing another browser.
</td>
</tr>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/ie5.gif" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/ie5.gif" alt="ie5" title="ie5" width="100" height="100" class="alignleft size-full wp-image-4076" /></a>
</td>
<td><strong>IE5</strong> </p>
<p>Kill yourself.
</td>
</tr>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/google-chrome-icon.png" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/google-chrome-icon.png" alt="google-chrome-icon" title="google-chrome-icon" width="100" height="100" class="alignleft size-full wp-image-4082" /></a>
</td>
<td>
<strong>Google Chrome</strong></p>
<p>You love Google Chrome because as everything made by the big G it is fast, sleek and stable. Now you can check your Gmail and Google Reader feeds and Google calendar in style as you edit your Google Docs in a separate tab, chat in Google Talk, get your directions from Google Maps and build applications for Google App Engine. You are not really concerned that Google probably knows more about your personal interests, hopes, dreams and desires than your own mother. After all, their motto is &#8220;don&#8217;t be evil&#8221; right?</p>
<p>Also, the tear-off tabs were awesome killer feature until Firefox totally copied them. Still, your browser runs every tab as a separate instance so there is really no way for one website to crash the whole browser&#8230; Until one does, that is &#8211; but that happens rarely.
</td>
</tr>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/ie-6-icon.jpg" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/ie-6-icon.jpg" alt="ie-6-icon" title="ie-6-icon" width="93" height="100" class="alignleft size-full wp-image-4078" /></a>
</td>
<td><strong>IE6</strong> </p>
<p>There are two possibilities here:</p>
<ol>
<li>You are using a locked down company computer &#8211; in which case, WTF are you doing reading this? Go back to work you lazy bum! Also, your sysadmin is either lazy or stupid. Or both.</li>
<li>You are to stupid to live and/or you enjoy ruining the internet for all of us. In addition your machine belongs to at least 17 botnets and you pick up new trojans daily. You often wonder why your internet is so slow but you are definitely not going to install some shady &#8220;Fox Fire&#8221; or &#8220;Intranet Explore 8&#8243; whatever that is. It&#8217;s probably a virus or something.
<p>I hope you fall into a ditch, break your ass and die all alone as punishment.</li>
</ol>
</td>
</tr>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/ie8icon1.png" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/ie8icon1.png" alt="ie8icon1" title="ie8icon1" width="100" height="100" class="alignleft size-full wp-image-4079" /></a>
</td>
<td>
<strong>IE7</strong> </p>
<p>As a rule you don&#8217;t use Windows Update. You are probably running Vista in it&#8217;s original, pre-SP1 shape and form. Your computer it is infected by 5 billion viruses and trojans making it barely usable. You heard that there is a newer version of Internet Explorer out there but you don&#8217;t care. You don&#8217;t like change. Finally, you assume that your computer is so slow because someone told you that Vista sucks. I mean, yes &#8211; it does, but it doesn&#8217;t suck that much. Your computer is slow because you are running outdated browser on an un-patched OS. And I&#8217;m not going to help you with that because you are ruining internet for everybody.
</td>
</tr>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/ie8icon1.png" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/ie8icon1.png" alt="ie8icon1" title="ie8icon1" width="100" height="100" class="alignleft size-full wp-image-4079" /></a>
</td>
<td>
<strong>IE8</strong></p>
<p>You are one of the few windows users who do know how to use Windows Update. Hell, you might have even went out of your way and downloaded IE8 yourself though I doubt it. No, seriously &#8211; most people clever enough to know what a browser is know better than to use IE. But you might just be a loyal Microsoft customer who simply likes the new browser for all of it&#8217;s &#8220;innovative&#8221; features. Someone told you that IE8 is actually pretty standards compliant, but of course you don&#8217;t know what that is. You would probably be pretty proud that your browser of choice passes the ACID2 test but you don&#8217;t know what that is.</p>
<p>Also, I might actually consider helping you to remove all these nasty trojans from your machine since for once you are not actually ruining the internet for us.
</td>
</tr>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/opera-icon-redux.png" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/opera-icon-redux.png" alt="opera-icon-redux" title="opera-icon-redux" width="100" height="100" class="alignleft size-full wp-image-4083" /></a>
</td>
<td>
<strong>Opera</strong></p>
<p>You really don&#8217;t give a fuck that both IE8 and Firefox 3 can pass ACID 2 test nowadays. ACID 2 test is like so 3 years ago. Now it&#8217;s all about ACID 3 and non of these upstart browsers can render that one properly.</p>
<p>Yeah, Google Chrome sort of took over the &#8220;fastest browser&#8221; niche these days but Opera still kicks ass. It&#8217;s fast, sleek and has lot&#8217;s of unique features. Besides, all of those other browsers have their keyboard shortcuts ass-backwards.
</td>
</tr>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/Safari_Icon.jpg" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/Safari_Icon.jpg" alt="Safari_Icon" title="Safari_Icon" width="100" height="100" class="alignleft size-full wp-image-4084" /></a>
</td>
<td>
<strong>Safari</strong></p>
<p>You are a mac user&#8230; Or you are one of those sad Windows people who suffer from a Mac envy. You know who I&#8217;m talking about &#8211; folks who buy a discount Dell and then use Window Blinds or other styling tool to make their Vista look just like OSX. </p>
<p>Does anyone else use that browser? I don&#8217;t know. Not that it&#8217;s a bad browser. It was the first one to successfully pass ACID 3 test. Not only that, but it&#8217;s Webkit engine is used by myriad of other browsers &#8211; namely Konquerror and Google Chrome. And these other browsers tend to stick out like a sore thumb on a Mac.
</td>
</tr>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/flock_icon-400-4001.jpg" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/flock_icon-400-4001.jpg" alt="flock_icon-400-4001" title="flock_icon-400-4001" width="100" height="100" class="alignleft size-full wp-image-4085" /></a>
</td>
<td>
<strong>Flock</strong></p>
<p>You keep telling people that Flock is not just a fork of Firefox with some web 2.0 and social networking extensions grafted in, but they won&#8217;t listen. Screw them then. You know damn well that your browser is better &#8211; perfectly engineered to integrate itself with the myriad of social media and content generation platforms.
</td>
</tr>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/lynx.jpg" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/11/lynx.jpg" alt="lynx icon" title="lynx icon" width="100" height="100" class="alignleft size-full wp-image-4085" /></a>
</td>
<td>
<strong>Lynx, Links, etc&#8230;</strong></p>
<p>Graphics are overrated. Who needs them. You browse the web for content, not for flashy designs and lolcat pictures. You use Mutt for email, Midnight Commander to manage your files, vim as your text editor. If a website contains a captcha you download it using feh, and display it in the framebuffer. Hell, you don&#8217;t even have X installed on your primary machine &#8211; you are that awesome.</p>
<p>Of course X is installed on your backup laptop which you use to go on youtube and to download pr0n but no one has to know that.
</td>
</tr>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/lynx.jpg" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/11/chromium_icon.png" alt="chromium icon" title="chromium icon" width="100" height="100" class="alignleft size-full wp-image-4085" /></a>
</td>
<td>
<strong>Chromium</strong></p>
<p>You are essentially like the average Chromium user but lazy. In a good way. You are to lazy to actually deal with the Windows bullshit so you run Linux. To lazy to compile stuff or fuck with RPM&#8217;s so you run Debian. To lazy to download Chrome so you run Chromium that&#8217;s available via apt.</td>
</tr>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/lynx.jpg" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/11/Crystal_Project_konqueror.png" alt="konquerror icon" title="konquerror icon" width="100" height="100" class="alignleft size-full wp-image-4085" /></a>
</td>
<td>
<strong>Konquerror</strong></p>
<p>You firmly believe that carpet should match the drapes and that the browser should match the desktop environment. Also, for some reason you like browsers that double up as file managers &#8211; you know, like IE did back in the day. Then again Konquerror is webkit based so it has to be fairly decent. All that hard work done by Google and Apple trickles down to your browser slowly but surely.</td>
</tr>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/lynx.jpg" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/11/ephiphany.png" alt="ephiphany icon" title="ephiphany icon" width="100" height="100" class="alignleft size-full wp-image-4085" /></a>
</td>
<td>
<strong>Epiphany</strong></p>
<p>You firmly believe that carpet should match the drapes and that the browser should match the desktop environment. Besides, Ephiphany is gecko based so it has to be fairly decent. All that hard work done by Mozilla foundation trickles down to your browser slowly but surely.</td>
</tr>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/lynx.jpg" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/11/seamonkey-icon.png" alt="seamonkey icon" title="seamonkey icon" width="100" height="100" class="alignleft size-full wp-image-4085" /></a>
</td>
<td>
<strong>Seamonkey</strong></p>
<p>You fondly remember the days when a web browser used to have a built in calendar, email client, HTML editor and some other useful tools. Those were the good days. You don&#8217;t care for the newfangled fast loading browsers the youngsters use these days. Also, you don&#8217;t like when kids are anywhere near your lawn.</td>
</tr>
<tr>
<td valign="top">
<a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/10/lynx.jpg" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/11/372c501b-3572-4207-91e7-7376903e9cfc.png" alt="Kazehakase icon" title="Kazehakase icon" width="100" height="100" class="alignleft size-full wp-image-4085" /></a>
</td>
<td>
<strong>Kazehakase</strong></p>
<p>You don&#8217;t tell people about your browser of choice in person. You have learned a long time ago that they will ask you to spell the name, and that&#8217;s just not possible. You just send them a link. In casual conversations you refer to your browser as &#8220;that browser&#8221; or kazehe-something-or-other.</p>
<p>But hey! It&#8217;s Gecko based, lean, mean, infrequently updated and seemingly abandoned. Um&#8230; That last part is not so good, but it&#8217;s still a decent browser.</td>
</tr>
</table>
<p>Yes, yes. I know I ignored your favorite browser. Chances are it is irrelevant, and/or it hasn&#8217;t really changed much since the last post. And if I totally miss-characterized a group of users and made you mad, please remember that posting &#8220;fag&#8221; in the comments does not count as constructive criticism. Other than that, feel free add suggestions and/or your own descriptions for users of other browsers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.terminally-incoherent.com/blog/2009/11/02/what-does-your-browser-say-about-you-2009-edition/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Slax</title>
		<link>http://www.terminally-incoherent.com/blog/2009/09/28/slax/</link>
		<comments>http://www.terminally-incoherent.com/blog/2009/09/28/slax/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 14:45:27 +0000</pubDate>
		<dc:creator>Luke Maciak</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[slax]]></category>

		<guid isPermaLink="false">http://www.terminally-incoherent.com/blog/?p=3853</guid>
		<description><![CDATA[My work laptop is a little bit on the heavy side. It works well as a desktop replacement which is how I use it these days. I hardly ever use it without an external monitor mouse and keyboard. I&#8217;m actually considering buying either one of those mini notebooks or perhaps a macbook at some point [...]]]></description>
			<content:encoded><![CDATA[<p>My work laptop is a little bit on the heavy side. It works well as a desktop replacement which is how I use it these days. I hardly ever use it without an external monitor mouse and keyboard. I&#8217;m actually considering buying either one of those mini notebooks or perhaps a macbook at some point in the future &#8211; a machine that I could actually drag around with me everywhere. But that will have to wait since I just got my gaming monster PC recently.</p>
<p>Besides, most of the time when I need to use a computer one is readily available for me. For example, when I&#8217;m at school I have a PC on the desk in the adjunct office. And since I tend to keep most of my school related files synced with <a href="http://getdropbox.com" class="liexternal">Dropbox</a> they are available to me via the web interface. That said, it is nice to work in a familiar environment using the software you like without worrying about key loggers that other adjuncts doubtlessly installed on the shared office computer. Yeah, I do usually carry a Knoppix CD in my book bag but that doesn&#8217;t really cut it. What I&#8217;d really like is my own comfy, lived-in environment &#8211; not a pristine Live CD boot. You know what I mean?</p>
<p>So lately I decided to do something new. Believe it or not, but in all my years with Linux I have never created a bootable USB type thing. I used countless live CD&#8217;s in the past, but it actually never occurred to me to try something more persistent. So I dug out my old 2GB stick and installed <a href="http://www.slax.org/" class="liexternal">Slax</a>.</p>
<p>Why Slax you ask? Oh, I don&#8217;t know. It&#8217;s small, clean, easy to use and actually designed to work off a USB drive. It&#8217;s a minimalistic OS and yet it runs a lightweight version of KDE making me feel like home. I have tried many different desktop environments but KDE was always the one that just felt right. So I&#8217;m naturally inclined towards systems that use it.</p>
<p>Not to mention that the installation itself is almost laughably easy. You download a tarball, extract it to your USB stick and then just run an included shell script to overwrite the devices MBR. It literally takes 5 minutes, including the download time (well, depends on your bandwidth, but you know what I mean). </p>
<p>The USB version of Slax is persistent &#8211; it will actually write changes to the disk, and allow you to set up your environment the way you like it and keep it that way. If you mess up, you can even reset it to a default state at boot time. It boots around 10 times faster than a Live CD and is quite responsive. </p>
<p>I particularly like how Slax resolved the whole package management conundrum. For example, you can &#8220;temporarily&#8221; install software with one click of a button. You just go <a href="http://www.slax.org/modules.php" class="liexternal">here</a> find your module and click &#8220;Activate&#8221;. This will download an install the package, but only for the duration of the current session. Once you reboot the package will be gone. Of course you can download the package and permanently install it as well &#8211; it&#8217;s just that the temporary option is kinda neat.</p>
<p>Of course, it is mostly a toy operating system. I wouldn&#8217;t recommend using it for mission critical stuff. I wouldn&#8217;t make it your primary OS. But if you want to carry your own customized environment and software in your pocket, it is perfect. Just plug it in, boot the machine and enjoy. I highly recommend setting one up for yourself if you know you will need to use some public/shared machine somewhere. Naturally competent admins of shared machines will probably disable all the bootable devices other than the HD and password protect the BIOS. Thankfully, competent admins are quite rare.</p>
<p>So yeah. Give it a whirl if you are in the market for USB based distribution. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.terminally-incoherent.com/blog/2009/09/28/slax/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Vim &#8211; Add Line Numbers</title>
		<link>http://www.terminally-incoherent.com/blog/2009/09/08/vim-add-line-numbersde/</link>
		<comments>http://www.terminally-incoherent.com/blog/2009/09/08/vim-add-line-numbersde/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 14:58:15 +0000</pubDate>
		<dc:creator>Luke Maciak</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.terminally-incoherent.com/blog/?p=3753</guid>
		<description><![CDATA[Have I mentioned that I love Vim? It is such a useful little tool. Let me give you an example. The other day someone gave me a messy list &#8211; a dump of email addresses from some database as a comma separated file. Here is a sample of how it looked like &#8211; note that [...]]]></description>
			<content:encoded><![CDATA[<p>Have I mentioned that I love Vim? It is such a useful little tool. Let me give you an example. The other day someone gave me a messy list &#8211; a dump of email addresses from some database as a comma separated file. Here is a sample of how it looked like &#8211; note that instead of actual emails I&#8217;m using names of vegetables, fruits and other stuff (like Rupert, or poo for example):</p>
<p><code>test, poop, boob, apple, carrot, mango, kiwi, apricot, banana, apple, tomato, prune, cranberry, raspberry, orange, lemon, potato, pudding, lemonade, pants, spoon, flax, dogmeat, poison, pee, hamburger, rupert, apple, mango, sunflower, bee, pumpernickel, puddle</code></p>
<p>Of course the actual list had over a thousand emails and did not include Rupert (or his poo for that matter). It was equally messy, full of duplicate emails and basically looking like a wall of text. Someone requested it expecting a sorted, itemized list that they could print out and look at for reference. What they got was a text blob.</p>
<p>So I grabbed the file and opened it in the trusty old Vim and issued three commands. The first one was:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">:<span style="color: #000000; font-weight: bold;">%</span>s<span style="color: #000000; font-weight: bold;">/</span>, <span style="color: #000000; font-weight: bold;">/</span>\r<span style="color: #000000; font-weight: bold;">/</span>g</pre></div></div>

<p>Of course this is a single regexp. I&#8217;m replacing every occurrence of a comma followed by a space with a carriage return. This sort of unrolled my csv into a file with a single item on each line:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">test
poop
boob
apple
carrot
mango
kiwi
apricot
banana
apple
tomato
prune
cranberry
raspberry
orange
lemon
potato
pudding
lemonade
pants
spoon
flax
dogmeat
poison
pee
hamburger
rupert
apple
mango
sunflower
bee
pumpernickel
puddle</pre></div></div>

<p>To sort it, I simply did:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">:<span style="color: #000000; font-weight: bold;">%</span><span style="color: #c20cb9; font-weight: bold;">sort</span> u</pre></div></div>

<p>This sorted my list and removed the duplicates (the &#8216;u&#8217; stands for unique list):</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">apple
apricot
banana
bee
boob
carrot
cranberry
dogmeat
flax
hamburger
kiwi
lemon
lemonade
mango
orange
pants
pee
poison
poop
potato
prune
pudding
puddle
pumpernickel
raspberry
rupert
spoon
sunflower
test
tomato</pre></div></div>

<p>Last touch was to add line numbers to every single line. Yes, I know &#8211; I could print the file with line numbers enabled but the person who would be using this file was barely capable of using notepad. So the lines had to be hard coded. This is actually a new trick that I just learned and it goes like this:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">:<span style="color: #000000; font-weight: bold;">%</span>s<span style="color: #000000; font-weight: bold;">/</span>^<span style="color: #000000; font-weight: bold;">/</span>\=line<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'.'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>.<span style="color: #ff0000;">&quot;. &quot;</span><span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>The <kbd>\=line('.')</kbd> bit does the actual line numbering, while the <kbd>.". "</kbd> bit simply appends a dot and a space to each number so they nicely stand out from the actual items. The end result looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">1. apple
2. apricot
3. banana
4. bee
5. boob
6. carrot
7. cranberry
8. dogmeat
9. flax
10. hamburger
11. kiwi
12. lemon
13. lemonade
14. mango
15. orange
16. pants
17. pee
18. poison
19. poop
20. potato
21. prune
22. pudding
23. puddle
24. pumpernickel
25. raspberry
26. rupert
27. spoon
28. sunflower
29. test
30. tomato</pre></div></div>

<p>I&#8217;m putting this here as a useful tip &#8211; more for myself than anyone else. Chances are I will forget the line numbering trick in a few weeks and will need to look it up again. Hopefully some of you may find it useful as well.</p>
<p>To summarize: Vim is awesome. It is like a Swiss Army Knife for text files. Use it, learn it, love it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.terminally-incoherent.com/blog/2009/09/08/vim-add-line-numbersde/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Textarea Cache</title>
		<link>http://www.terminally-incoherent.com/blog/2009/09/01/textarea-cache/</link>
		<comments>http://www.terminally-incoherent.com/blog/2009/09/01/textarea-cache/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 14:01:16 +0000</pubDate>
		<dc:creator>Luke Maciak</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://www.terminally-incoherent.com/blog/?p=3643</guid>
		<description><![CDATA[Have you ever typed a long, insightful blog post or comment and immediately lost it because you accidentally hit the wrong button? I do that all the time! I can&#8217;t tell you how often have I lost a good hour of work just because of hitting the wrong button at the wrong time. That&#8217;s the [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever typed a long, insightful blog post or comment and immediately lost it because you accidentally hit the wrong button? I do that all the time! I can&#8217;t tell you how often have I lost a good hour of work just because of hitting the wrong button at the wrong time. That&#8217;s the problem with writing inside of a browser &#8211; you can&#8217;t always undo your mistakes, and you can&#8217;t always save your work. </p>
<p>It used to be much worse in the past. These days there are many fail-safes that can often prevent you from losing your work. Firefox for example will restore your text area contents if you accidentally close the browser window and/or tab. This is great but of course won&#8217;t help you in all circumstances. There are quite a few things you can do to foil this feature and still lose your meticulously typed text. Let me count the ways to fuck yourself over in Firefox:</p>
<ol>
<li>Hitting refresh</li>
<li>Hitting the back button</li>
<li>Accidentally clicking on some link</li>
<li>Hitting backspace when textarea is not in focus (works like back button)</li>
<li>Closing the browser while having it set to purge session data on close</li>
</ol>
<p>Web application developers know this and they have started building their own counter measures to prevent it from happening. For example, Wordpress will automagically save your posts as you type them. Unless of course you leave it unattended for a little while.</p>
<p>This actually happened to me recently &#8211; I was typing up a post, and had to leave my desk for a bit. I forgot to hit the save button but that wasn&#8217;t a grievous mistake because the auto save feature kicked in anyway. When I came back, I finished the post, proof read it, corrected mistakes, rephrased couple of sentences and finally hit the save button&#8230; Only to have Wordpress notify me that I need to log back in.</p>
<p>Some applications try to save the data from a previous POST request as you log in. Wordpress does not do that. When I got back to my post draft, I realized that the last copy was the auto save from about an hour ago.</p>
<p>This annoyed the shit out of me. I mean, seriously &#8211; we know that stuff like that happens all the time. Why can&#8217;t we just cache the textarea contents somewhere as you type? Yes, saving everything you type would be a privacy concern but you could make it an optional feature that has to be enabled, and set the browser to purge anything that has not been touched in say two days of active browser use. </p>
<p>In fact, I&#8217;m using Firefox. There should be a plugin for something like that for fucks&#8217; sake!</p>
<p>So on the off chance I typed &#8220;textarea cache plugin firefox&#8221; into Google and voilà: <a href="https://addons.mozilla.org/en-US/firefox/addon/5761" class="liexternal">there is one</a>.</p>
<p>It does exactly what you would think &#8211; it caches everything you type into a textarea fields and purges old entries on some sort of schedule. It puts a tiny button into the status bar, and pressing it will open the currently active cache and a list of other saved buffers. You can purge any and all of them at will using that very same interface.</p>
<p>I had no clue this thing existed, but now I don&#8217;t know how can this not be a part of the core browser. I highly recommend checking it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.terminally-incoherent.com/blog/2009/09/01/textarea-cache/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>On Optimization</title>
		<link>http://www.terminally-incoherent.com/blog/2009/07/21/on-optimization/</link>
		<comments>http://www.terminally-incoherent.com/blog/2009/07/21/on-optimization/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 14:50:04 +0000</pubDate>
		<dc:creator>Luke Maciak</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.terminally-incoherent.com/blog/?p=3448</guid>
		<description><![CDATA[Here is an interesting story that I got from one of the old-timers in our industry. The guy who told it to me used to be a COBOL developer back in the day when Cobol was the &#8220;bleeding edge&#8221; technology. He is no longer working in the field nowadays, and he sort of lost track [...]]]></description>
			<content:encoded><![CDATA[<p>Here is an interesting story that I got from one of the old-timers in our industry. The guy who told it to me used to be a COBOL developer back in the day when Cobol was the &#8220;bleeding edge&#8221; technology. He is no longer working in the field nowadays, and he sort of lost track of the technology train.</p>
<p>He told me that he recently was working on some deal with the first company that hired him out of college. They gave him a brief tour and talked about the upcoming upgrade of their billing/accounting/everything else system. Apparently they were finally moving from their old cryptic, COBOL application to a brand new one written in ASP.NET. Few more prodding questions confirmed his suspicion. The COBOL app was the same exact system he helped to design 20 something years ago. This was some of the worst, buggiest and most unreadable code he has ever wrote in his life (being green and fresh out of school) and yet it was still in operation.</p>
<p>That&#8217;s not all though. He asked them how come they have never replaced the system with something more modern up until now. It turns out that they had. This was actually the third attempt at migration to a new technology. Previous 2 have failed miserably. Their development teams did produce viable code which fared pretty well in small scale tests. But when they actually tried to run full scale operations, the ASP app would just grind to a halt.</p>
<p>I chuckled. I was not surprised. <em>&#8220;Back in the day, people knew how to write code. We are so spoiled by the Moores Law that we forgot how to do it these days&#8221;</em>, I mused. He nodded in agreement. </p>
<p>You see, the COBOL system processed millions of records every day. Even though it was old, and running on an ancient hardware each batch would only take seconds to crank out. It was stable, reliable and the COBOL old-timers optimized the shit out of it over the last 20 years using every known trick in the book. The app was maintained by a shrinking cadre of wise bearded fellows who scoffed at new fangled concepts such as objects, polymorphism or encapsulation. They, however knew exactly how to shave few seconds off an operation by writing intricate spaghetti code.</p>
<p>The ASP and then ASP.NET code on the other hand was written by groups of greenhorns fresh out of college. They were idealistic, and excited about their project. They wrote great object oriented code, split into clearly defined modules. They leveraged open source libraries. More importantly their code was run on top of the line servers &#8211; best the money could buy.</p>
<p>And yet, each time they put it to real life stress test the ancient COBOL kludge would run laps around them. It would process 10 thousand records before their code even finished initializing. What took the old app 10 minutes would take 2 days on the .NET platform despite running on a hardware that was at least 10 times as fast. </p>
<p>They could not take such a major hit in speed as it would hurt their productivity. So twice they have shelved the project waiting until hardware finally catches up. Yep, they were waiting for hardware to catch up so that they could even hope to match the performance of a 20 year old application. Every once in a while they would brush of the code install it on new, juiced up servers and have another crack at it. They didn&#8217;t bother rewriting it, because so much money was sunk into it in the first place. So each consecutive team assigned to it would just do some minor re-factoring. This time however they were sure of success. The initial tests revealed that the newest incarnation of the ASP app was only 30% slower than the COBOL app which was considered an overwhelming success. </p>
<p>Non only that, they explained, but in 2-3 years the hardware will become twice as fast, which means that they might actually be able to match or even exceed the COBOL performance. Imagine that.</p>
<p>I&#8217;m not taking a crack at .NET or modern programming paradigms here. There is nothing wrong with either. Someone could argue that choosing to write this code in C would be a better idea from optimization point of view. Then again, modern JIT compilers can often optimize the executed code much better at run time than a C guru could ever do it by hand.</p>
<p>In fact, there is no for why COBOL code running on old hardware would really outperform .NET running on a modern rig. None besides crappy coding on the .NET platform. Back in the day when memory and disk space was scarce and each CPU cycle was important people knew how to optimize code. They knew how to write programs that will scale well, under limited resources. They had to learn these tricks because there was simply no way to shove hundreds of megabytes of data items in and out of memory like it is today. When they wrote code, they had to think about how it will work with large data sets.</p>
<p>Over the years we have sort of become lazy and complacent. I&#8217;m as guilty of it as everyone else. When I write code I hardly ever consider large data sets. I just make sure the important columns in the database are indexed, and that my query is not retarded. I hardly ever look at the actual logic within my program. I write deeply nested loops without thinking about scalability. It became sort of a pathology.</p>
<p>I became painfully aware of this <a href="http://www.terminally-incoherent.com/blog/2006/04/02/matlab-vs-java/" class="liinternal">while working on my thesis</a>. When I was forced to do operations on big data matrices over and over again, I had to go down to basics &#8211; get rid of fancy objects, iterators and all that jazz, and just use simple loops and arrays. And even then I was struggling because no one ever taught us how to really approach practical optimization. I mean we talked about it in theory &#8211; and we were taught about algorithms. But no one really bothered to teach us practical things such as good ways to identify bottlenecks in your code, or practical optimization tricks. </p>
<p>I guess everyone assumed you will pick up stuff like that on your own. Or it will get drummed into you at your first job. Or people simply forget about it. After all, parallelism is the sexy thing to talk about these days. So instead of finding bottlenecks and eliminating them let&#8217;s parallelize the code and make it run on a cluster. Which is a valid approach, but not in every situation. Every once in a while you run into situation like the one I described above. There is an ancient COBOL app running on an ancient hardware &#8211; and it cranks out results faster than your code written in a modern language, running on a modern computer. </p>
<p>Does it means that we lost an edge? Does it mean we forgot how to write efficient code that will run fast even with very limited resources. Not really. There are still people out there who can do this sort of thing well. And of course over optimization can be harmful too. </p>
<p>This is just something to think about. Situations like this one happen in real life, and are quite ironic. I wonder how did the .NET development team justify their poor performance to the management. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.terminally-incoherent.com/blog/2009/07/21/on-optimization/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Running Firefox and Firefox Portable at the same time</title>
		<link>http://www.terminally-incoherent.com/blog/2009/06/11/running-firefox-and-firefox-portable-at-the-same-time/</link>
		<comments>http://www.terminally-incoherent.com/blog/2009/06/11/running-firefox-and-firefox-portable-at-the-same-time/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 14:59:19 +0000</pubDate>
		<dc:creator>Luke Maciak</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://www.terminally-incoherent.com/blog/?p=3159</guid>
		<description><![CDATA[This is one of these throw away posts that I place here more for myself than for you guys. This way I know how to do this next time around. I wanted to talk about running two instances of Firefox at the same time. More accurately, an installed Firefox instance and Firefox Portable instance side [...]]]></description>
			<content:encoded><![CDATA[<p>This is one of these throw away posts that I place here more for myself than for you guys. This way I know how to do this next time around. I wanted to talk about running two instances of Firefox at the same time. More accurately, an installed Firefox instance and Firefox Portable instance side by side. Why would you ever want to do that?</p>
<p>There are many reasons. For example, you might want to use the <a href="http://www.torproject.org/easy-download.html.en" class="liexternal">Tor Browser Bundle</a> to do some anonymous browsing without actually needing to close your main browser window. Or you may want to use your portable browser to sign into the same website using different credentials. I&#8217;m sure you have been in this situation before &#8211; you are working on a website and you are signed in as administrator. The feature you are coding will only be visible to no-admin users. Wouldn&#8217;t it be nice to simply be able to open a new instance of Firefox and sign in as a non-admin without having to log out?</p>
<p>A lot of people think that Firefox Portable would solve this issue &#8211; it is a specialized build after all and it uses it&#8217;s own profile and cache and extensions which are stored in a completely different place from the other Firefox. There is no possible overlap between the two. But the Portable version will still refuse to run if it detects that another copy of Firefox is already running.</p>
<p>There is a way around this though. Your copy of Firefox Portable should have a file named FirefoxPortable.ini in it&#8217;s directory. </p>
<div id="attachment_3198" class="wp-caption alignnone" style="width: 430px"><a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/05/croppercapture134.jpg" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/05/croppercapture134.jpg" alt="Firefox Portable .ini File" title="FirefoxPortable.ini" width="420" height="201" class="size-full wp-image-3198" /></a><p class="wp-caption-text">Firefox Portable .ini File</p></div>
<p>If you don&#8217;t see that file, it may be located in the Other/Source folder. If it is, you will simply need to copy it back to the root directory where the Firefox Portable executable is located. Once it is there, you will need to open it with a text editor and change a single value inside:</p>
<div id="attachment_3199" class="wp-caption alignnone" style="width: 430px"><a href="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/05/croppercapture136.jpg" ><img src="http://www.terminally-incoherent.com/blog/wp-content/uploads/2009/05/croppercapture136.jpg" alt="Modify the .ini file" title="Modify the .ini file" width="420" height="493" class="size-full wp-image-3199" /></a><p class="wp-caption-text">Modify the .ini file</p></div>
<p>Locate the following line:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">AllowMultipleInstances<span style="color: #339933;">=</span><span style="color: #003366; font-weight: bold;">false</span></pre></div></div>

<p>And change it to:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">AllowMultipleInstances<span style="color: #339933;">=</span><span style="color: #003366; font-weight: bold;">true</span></pre></div></div>

<p>That&#8217;s it! Next time you try to open Portable Firefox it won&#8217;t be checking for a running instance and will happily coexist with an installed copy.</p>
<p><strong>Running two instances of Firefox at the same time</strong></p>
<p>The solution I posted above only works with the portable version of Firefox. What if you want to run two instances of your installed Firefox? Well, then you need to use profiles. </p>
<p>As you may or may not know, Firefox allows you to define distinct profiles. Each one gets it&#8217;s own configuration folder for extensions, bookmarks and settings. You can open the profile creation dialog by running your Firefox with the <kbd>--profilemanager</kbd> attribute:</p>

<div class="wp_syntax"><div class="code"><pre class="cmd" style="font-family:monospace;">&quot;C:Program FilesMozilla Firefoxfirefox.exe&quot; --profilemanager</pre></div></div>

<p>On most unix based systems (linux, unix, bsd, osx &#8211; ie. everything that is not windows) you can usually get away with:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">firefox <span style="color: #660033;">--profilemanager</span></pre></div></div>

<p>This is because the firefox binary will usually be in your path. This will open the profile manager dialog and it will let you create a new profile. Make one with all the default settings then close firefox. Next you need to open with some more attributes:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">firefox <span style="color: #660033;">-P</span> profilename <span style="color: #660033;">--no-remote</span></pre></div></div>

<p>The <kbd>-P</kbd> tag specifies the profile name which goes right after it. The <kbd>--no-remote</kbd> attribute prevents Firefox from checking whether or not another copy is already loaded into memory. This way you will be able to run two separate instances of the browser &#8211; each with it&#8217;s own cache, extensions, bookmarks, config and it&#8217;s own sessions.</p>
<p>You probably might want to create shell script or a shortcut which will run the second instance this way for you. This trick does not require a portable firefox version. It will work with a single installed copy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.terminally-incoherent.com/blog/2009/06/11/running-firefox-and-firefox-portable-at-the-same-time/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Luke&#8217;s Definitive Guide for Removing Malware</title>
		<link>http://www.terminally-incoherent.com/blog/2009/05/25/lukes-definitive-guite-for-removing-malware/</link>
		<comments>http://www.terminally-incoherent.com/blog/2009/05/25/lukes-definitive-guite-for-removing-malware/#comments</comments>
		<pubDate>Mon, 25 May 2009 14:09:22 +0000</pubDate>
		<dc:creator>Luke Maciak</dc:creator>
				<category><![CDATA[security]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.terminally-incoherent.com/blog/?p=3140</guid>
		<description><![CDATA[I get a lot of requests from friends, family and friends of family for MS Windows support &#8211; most notably malware removal. You see, I&#8217;m a software developer and a Linux user and that somehow qualifies me for this type of work. Yes, the impeccable logic of a common luser never ceases to astound me.
Fortunately [...]]]></description>
			<content:encoded><![CDATA[<p>I get a lot of requests from friends, family and friends of family for MS Windows support &#8211; most notably malware removal. You see, I&#8217;m a software developer and a Linux user and that somehow qualifies me for this type of work. Yes, the impeccable logic of a common luser never ceases to astound me.</p>
<p>Fortunately for these people I do have a good deal of experience with IT work. This post is my attempt to pass some of this arcane knowledge onto you. Despite the popular belief, removing malware is not some special skill that needs to be trained or gained via experience. I hardly ever actually hunt down the infections and remove them by hand. 90% of time, this stuff boils down to using the right set of tools, and applying a little bit of critical thinking to the task. </p>
<p><strong>The Tools</strong></p>
<p>Most of the nasty malware you will get infected with can be effectively removed with one of these tools:</p>
<ol>
<li><a href="http://malwarebytes.org/mbam.php" class="liexternal">Malwarebytes Anti-Malware</a> (shareware &#8211; free to scan,  resident protection costs $$)</li>
<li><a href="http://superantispyware.com/" class="liexternal">Superantispyware.com</a> (freeware)</li>
<li><a href="http://www.bleepingcomputer.com/combofix/how-to-use-combofix" class="liexternal">Combofix</a> (specialist tool)</li>
</ol>
<p>How did I pick these tools? I didn&#8217;t pick them at all. The vocal anti-malware community of the internets picked them. I didn&#8217;t look at any polls, benchmarks or critical reviews. I use these tools because I know they work. How do I know they work? Because I&#8217;ve seen it and because they are recommended in every single security related thread on the internet.</p>
<p>You see, there are dozens of message boards out there dedicated to helping people clean up their infected machines. Users go there and post their symptoms and the resident experts give them recommendations and guide them through removal steps. Do you know what is usually the first step they recommend?</p>
<p>You guessed it &#8211; install Malwarebytes, run a scan, post your log file in the reply. Repeat for superantispyware.com. Between the two of them, these applications can remove just about anything. Very few trojans or worms can withstand this tag team. If they do, you can usually go for broke and use ComboFix which is sort of  a last resort measure. </p>
<p>Most of the time it will clean your computer off the nasty infection. Every once in a while however it will hose the OS while trying. It will forcefully delete infected system files other anti-malware tools are affraid to touch with a blatant disregard for system stability. This makes it effective, but a bit of a lose cannon. That&#8217;s is why it forces you to install the Recovery Console prior to actually performing an aggressive scan. </p>
<p><strong>The Procedure</strong></p>
<p>There is no magical procedure. You should simply follow your common sense. This is what I usually recommend doing:</p>
<ol>
<li>Boot into Safe Mode With Networking</li>
<li>Get rid of Temp files (where malware likes to hide) using <a href="http://www.atribune.org/index.php?option=com_content&#038;task=view&#038;id=25&#038;Itemid=25" class="liexternal">ATF-Cleaner</a> or <a href="http://www.ccleaner.com/" class="liexternal">CCleaner</a></li>
<li>Install and update Malwarebytes and run a scan</li>
<li>Install and update Superantispyware.com and run a scan</li>
<li>Repeat 1-2 times until you get a clean log on both</li>
<li>If you can&#8217;t remove some infections, or you still see the symptoms reboot into normal mode</li>
<li>Run ComboFix</li>
<li>If you still can&#8217;t remove the infection find it&#8217;s name</li>
<li>Fucking google it!</li>
</ol>
<p>The last step is crucial &#8211; I can&#8217;t emphasize it enough. Unless you are extremely unlucky and you got hit by a brand new variant of the malware, someone already went through this crap. It is more likely than not that you will find a forum or blog post somewhere with detailed removal instructions. Or in worst case, you will find links to more specialized tools that may or may not work against the crapware you are facing. </p>
<p>That&#8217;s it. That&#8217;s how I get rid of 90% of the crap people get infected with. </p>
<p><em>It&#8217;s so easy, even a caveman could do it!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.terminally-incoherent.com/blog/2009/05/25/lukes-definitive-guite-for-removing-malware/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Dedicated Virtual Machines</title>
		<link>http://www.terminally-incoherent.com/blog/2009/05/21/dedicated-virtual-machines/</link>
		<comments>http://www.terminally-incoherent.com/blog/2009/05/21/dedicated-virtual-machines/#comments</comments>
		<pubDate>Thu, 21 May 2009 14:29:07 +0000</pubDate>
		<dc:creator>Luke Maciak</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[virtual machines]]></category>

		<guid isPermaLink="false">http://www.terminally-incoherent.com/blog/?p=3070</guid>
		<description><![CDATA[The other day I had a conversation with a coworker about Windows 7 and it&#8217;s &#8220;innovative&#8221; XP mode. I put the word &#8220;innovative&#8221; in quotation marks because the only innovative thing about it, is the idea of bundling a free virtual machine with a Microsoft OS in order to break backward compatibility. As you may [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I had a conversation with a coworker about Windows 7 and it&#8217;s <em>&#8220;innovative&#8221;</em> XP mode. I put the word &#8220;innovative&#8221; in quotation marks because the only innovative thing about it, is the idea of bundling a free virtual machine with a Microsoft OS in order to break backward compatibility. As you may know, I&#8217;m a big supporter of virtualization and I&#8217;m thrilled to see the slow moving (glacial pace) behemoth such as Microsoft adopting it in such a clever way. </p>
<p>Of course this was pretty much the first time my coworker heard about virtualization and I quickly had to dispel his newly found appreciation for Microsoft by pointing on my screen. I was like &#8220;Dude, I&#8217;ve been running Windows XP in a VirtualBox on my Ubuntu box for years now. This is how I get the best of both worlds &#8211; I get to rely on Linux OS for stability, security and wealth of open source tools and applications, and at the same time I have access to Windows only apps such as Visual Studio, Excel, Monarch. My VM allows me to develop in C# using Visual Studio Express and test my app in an environment that is almost identical to the production without actually having to log out of Ubuntu.</p>
<p>When I started messing around with linux I used to dual boot my machines. I no longer do that. My boxes are either straight Windows or straight Lixux. If I need Windows compatibility on a Linux box I just fire up a VM &#8211; which is actually faster and more convenient than rebooting the system.</p>
<p>Microsoft&#8217;s decision to bundle XP mode in their new OS release shows that virtualization technology is slowly becoming commonplace tool, rather than just a curious oddity. Windows is using it to solve a particular problem &#8211; namely braking backwards compatibility. I envision that in the near future we will see it employed to solve even more trivial problems.</p>
<p>For example, I&#8217;d love to see virtualization used to simplify application or development environment setup. I&#8217;m pretty sure most of us encountered this issue before. It is probably the most commonly experienced by Windows developer, but it can occur in just about any environment. You know what I&#8217;m talking about, right?</p>
<p>I&#8217;m talking about code which only compiles under a specific version of the compiler. Compiling it in the most recent release results in a spectacular failure. So you essentially have to download and install a 5 year old version which is known to have serious bugs, and security issues.</p>
<p>I&#8217;m talking about project files that can be opened only in the 6 year old Visual Studio version that can&#8217;t even be downloaded or purchased anywhere. You have to borrow the only remaining installation CD copy from Johnson on the second floor along with the CD key scribbled on the back of an envelope.</p>
<p>I&#8217;m talking about a code that requires you to install an ancient version of PHP and then copy over the php.ini from the production system, and then re-create the intricate tree of include and temp folders and their permissions to even start working.</p>
<p>These things happen all the time &#8211; usually on poorly maintained projects from hell. In an ideal world we would not need to deal with these situations. Sadly we do not live in an ideal world. Virtualization could alleviate some of the frustration involved in working on a project like that. Instead of taking hours to tweak your workstation to mirror the original development environment, you could just use a VM. </p>
<p>Imagine this scenario &#8211; you get assigned to the project from hell, and the project manager would simply takes a snapshot of his environment and gives it to you. You fire it up on any machine, and you are ready to go. You take that environment with you whenever you switch computers. And if you want to work from home one day, it is not a problem. You just put the VM image on a CD or a flash drive, and boot it up on your home machine. You don&#8217;t even have to be running the correct OS, and you don&#8217;t have to make any changes to your system. It just works. How awesome could that be?</p>
<p>We developers are not the only ones who could benefit from it. Recently I have been working with an application from hell that was released by a certain bank that hall remain nameless. This application is essentially an Excel plug in which is the most flaky and temperamental piece of software that I have seen in years. Basically if you want to use it, you have to be running Windows XP,  Microsoft Office 2003 Professional and .NET Framework 1.1.</p>
<p>If you have Vista you won&#8217;t even be able to install it. If you happen to have Office 2003 Small Business or Office 2007 Professional or anything in between you are shit out of luck. If your computer downloads one of the hotfix updates for .NET 1.1 the whole thing is going to literally explode in your face. It&#8217;s a nightmare &#8211; especially since we have been slowly migrating everyone to Office 2007 for the past year or so. Now we are forced to downgrade these folks.</p>
<p>I wish I could just set up a virtual machine with a pre-configured instance of this plugin and hand it out to people. It would really make my life so much easier. Sadly, I don&#8217;t think we are at this stage of VM adoption yet. I actually hit a brick wall even trying to explain this idea to some of my coworkers. The truth is that most people don&#8217;t understand virtualization until you actually show it to them. And even then, they only half grasp what exactly did they just see.</p>
<p>There were other significant problems I noticed beyond the need to train the staff on VM use:</p>
<ol>
<li><strong>Licensing:</strong> I&#8217;m pretty sure that issuing a copy of Windows XP and Office 2003 Pro inside of a VM would require some special licensing agreement with Microsoft. I have not looked into it, but chances are that no existing licensing scheme covers anything like it, and the whole operation would simply be illegal.</li>
<li><strong>Deployment:</strong> &#8211; virtual machine images are still huge &#8211; several GB each. I really don&#8217;t see an efficient way to distribute these to people electronically &#8211; especially to remote employees who never visit the office. Downloading these files would be a major pain in the ass due to their size. And of course if bunch of people tried downloading them at the same time it would probably make our servers to slow down to a crawl. I can see a scenario where we would eventually settle down on mailing these things out on flash drives and I&#8217;m not liking it one bit. </li>
<li><strong>System Resources:</strong> VM&#8217;s are still quite resource intensive. A virtualized Windows XP has pretty much the same system requirements as a non-virtualized one. In my experience, to comfortably run XP in a VM you need at least 2GB of RAM and a dual core CPU. This way you can give 1GB of RAM over to the VM and know that it won&#8217;t monopolize all of your CPU cycles. Some of the machines we use at work do meet these requirements. Most do not &#8211; they have barely enough juice to run XP, the bloated AV suite and the usual assortment of spyware and malware that each of our employees insists on installing. Throw a VM into the mix, and their machine will die in flames</li>
</ol>
<p>As you can see, I did consider doing this, but eventually dropped the idea. It simply wouldn&#8217;t work in our environment. Still, the inclusion of XP Mode in Windows 7 gives me hope that one day I will actually be able to roll out a virtualized solution to a problem like the one above. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.terminally-incoherent.com/blog/2009/05/21/dedicated-virtual-machines/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
