<?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>antipaucity &#187; work</title>
	<atom:link href="http://antipaucity.com/category/work/feed/" rel="self" type="application/rss+xml" />
	<link>http://antipaucity.com</link>
	<description>fighting the lack of good ideas</description>
	<lastBuildDate>Sat, 04 Feb 2012 20:21:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>extended file attributes with ext[2&#124;3&#124;4]</title>
		<link>http://antipaucity.com/2011/12/19/extended-file-attributes-with-ext234/</link>
		<comments>http://antipaucity.com/2011/12/19/extended-file-attributes-with-ext234/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 15:54:17 +0000</pubDate>
		<dc:creator>antipaucity</dc:creator>
				<category><![CDATA[technical]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://antipaucity.com/?p=1096</guid>
		<description><![CDATA[Most Unix/Linux users, and &#8211; hopefully &#8211; all admins are familiar with the standard 9 bits of permissions typically supported on various *nix file systems: --------- rwxrwxrwx uuugggooo Where &#8220;u&#8221;, &#8220;g&#8221;, and &#8220;o&#8221; indicate &#8220;user&#8221;, &#8220;group&#8221;, and &#8220;other&#8221; while &#8220;rwx&#8221; indicates whether the item can be read, written, or executed. Also of note are file ownerships in [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/12/19/extended-file-attributes-with-ext234/' addthis:title='extended file attributes with ext[2&#124;3&#124;4] ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p>Most Unix/Linux users, and &#8211; hopefully &#8211; all admins are familiar with the standard 9 bits of permissions typically supported on various *nix file systems:</p>
<blockquote><p><code>---------</code><br />
<code>rwxrwxrwx</code><br />
<code>uuugggooo</code></p></blockquote>
<p>Where &#8220;u&#8221;, &#8220;g&#8221;, and &#8220;o&#8221; indicate &#8220;user&#8221;, &#8220;group&#8221;, and &#8220;other&#8221; while &#8220;rwx&#8221; indicates whether the item can be read, written, or executed.</p>
<p>Also of note are file ownerships in the form of</p>
<blockquote><p><code>user:group</code></p></blockquote>
<p>So a file might be owned by <code>warren:warren</code> with read/write privileges only for the owner: <code>rw-rw----</code>.</p>
<p>That&#8217;s pretty handy.</p>
<p>How many of you know there are <em>hidden</em> permissions that do not show up in a normal use of <code>ls -l</code>?</p>
<p>I didn&#8217;t until last week &#8211; and I&#8217;ve been using Linux for more than a decade <img src='http://antipaucity.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Turns out that &#8211; at least with ext2, etx3, and ext4 filesystems &#8211; there are a variety of other attributes that can be assigned to a file. One of them is the immutable flag<sup>*</sup>.</p>
<p>(Using a related command to <code>ls</code>, <code><a href="http://linux.die.net/man/1/lsattr">lsattr</a></code>, a person can view the extended attribute flags of a file.)</p>
<p>In specific, the immutable flag disallows even the <strong><em>owner</em></strong> from deleting his/her own file! There was the source of a very ornery issue I ran into while doing an upgrade last week of a customer&#8217;s management environment. The upgrade installer ran into an issue wherein it interrupted its own process. But when it did, it left the filesystem in an inconsistent state &#8211; specifically with regards to an SSL certificate file and the machine identifier file (<code>agent.srv</code> and <code>mid</code>, if you&#8217;re curious) having the immutable flag set. When attempting to pick back up with the upgrade, the installer failed more [apparently] asymptomatically (and esoterically) than I had ever seen before.</p>
<p>After several exchanges with senior product support, a working fix of running <code>chattr -i /path/to/file</code> was provided. Neither myself, nor any of the senior admins at my customer had ever heard of <code><a href="http://linux.die.net/man/1/chattr">chattr</a></code>. So off to the <code>man</code> pages. Turns out that chattr is quite the command &#8211; but it&#8217;s not well publicized (at least, I don&#8217;t think it is).</p>
<p>If you run into a file you own, but cannot delete, be sure to inspect the extended attributes with <code>lsattr</code>, and fix any mis-set flags with <code>chattr</code>.</p>
<hr />
<p><sup>*<sub>The entire list of alterable flags: &#8220;append only (a), compressed (c), no dump (d), extent format (e), immutable (i), data journalling (j), secure deletion (s), no tail-merging (t), undeletable (u), no atime updates (A), synchronous directory updates (D), synchronous updates (S), and top of directory hierarchy (T).&#8221; Non-modifiable, but visible with <code>lsattr</code>, flags: &#8220;huge file (h), compression error (E), indexed directory (I), compression raw access (X), and compressed dirty file (Z)&#8221;.</sub></sup></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/12/19/extended-file-attributes-with-ext234/' addthis:title='extended file attributes with ext[2|3|4] ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://antipaucity.com/2011/12/19/extended-file-attributes-with-ext234/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gaming expense reports? really?</title>
		<link>http://antipaucity.com/2011/12/06/gaming-expense-reports-really/</link>
		<comments>http://antipaucity.com/2011/12/06/gaming-expense-reports-really/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 16:47:11 +0000</pubDate>
		<dc:creator>antipaucity</dc:creator>
				<category><![CDATA[commentary]]></category>
		<category><![CDATA[hmmm]]></category>
		<category><![CDATA[insights]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://antipaucity.com/?p=1094</guid>
		<description><![CDATA[At various stages in my career, I have traveled extensively - yet never even thought of &#8220;gaming&#8221; the expense reproting system the way it has been recently reported by CNN. Being terminated over charging a movie to your room? Seems harsh (getting the $9.95 back from the employee would seem to be easier) &#8211; but breaking the rule [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/12/06/gaming-expense-reports-really/' addthis:title='gaming expense reports? really? ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p>At various stages in my career, I have traveled <em>extensively</em> - yet never even thought of &#8220;gaming&#8221; the expense reproting system the way it has been <a href="http://cnn.com/2011/12/05/travel/expense-account-business-travel">recently reported</a> by CNN.</p>
<p>Being terminated over charging a movie to your room? Seems harsh (getting the $9.95 back from the employee would seem to be easier) &#8211; but breaking the rule is breaking the rule.</p>
<p>Being terminated over buying gum? Ok, so <em><strong>I WOULD</strong></em> terminate somebody over that &#8230; but I <a href="http://antipaucity.com/?p=143">hate</a> the <a href="http://antipaucity.com/?p=127">stuff</a> <img src='http://antipaucity.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<blockquote><p>But it’s repulsive, revolting, and wrong<br />
chewing and chewing all day long<br />
The way that a cow does<a href="http://antipaucity.com/?p=468">*</a></p></blockquote>
<p>There are a host of ways listed in the article &#8211; that I find truly shocking &#8211; to cheat on expense reports: blank receipts? buying gifts and then selling them on eBay? double-billing? Wow. The sheer <em><strong>effort</strong></em> taken by some people to <a href="http://antipaucity.com/?p=55">cheat</a> is astonishing!</p>
<p>Where I work now has a corporate credit card issued to every traveling employee. The only time we submit non-AmEx charges is if a place doesn&#8217;t accept AmEx: it&#8217;s just way easier to use the corporate card than it is to try to give all the supporting documentation of a personal card. Plus, there&#8217;s the benefit that it&#8217;s not <em>my</em> personal limit that is being affected if a customer delays in paying a bill.</p>
<p>Everyone that works where I do now also follows the expense guidelines we have &#8211; don&#8217;t exceed the IRS <em>per diem</em> rate for your region (on average). If you want to eat someplace nice for dinner &#8211; that&#8217;s fine. Just eat someplace less expensive the next day. Sticking within the rules isn&#8217;t that hard &#8230; so why would you want to try to evade them and end up with employment history issues like <strong>termination</strong> on your record?</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/12/06/gaming-expense-reports-really/' addthis:title='gaming expense reports? really? ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://antipaucity.com/2011/12/06/gaming-expense-reports-really/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>defaulting pxe boots with hpsa</title>
		<link>http://antipaucity.com/2011/11/29/defaulting-pxe-boots-with-hpsa/</link>
		<comments>http://antipaucity.com/2011/11/29/defaulting-pxe-boots-with-hpsa/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 16:52:29 +0000</pubDate>
		<dc:creator>antipaucity</dc:creator>
				<category><![CDATA[technical]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://antipaucity.com/?p=1090</guid>
		<description><![CDATA[I recently found a very helpful nugget with regards to OS Provisioning with HP&#8217;s Server Automation product. OS Prov is most typically done using PXE (or the similar bootp process). SA provides a PXE server that gives a boot menu to network-booted systems. That menu contains a variety of choices: linux, windows, winpe, etc. In [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/11/29/defaulting-pxe-boots-with-hpsa/' addthis:title='defaulting pxe boots with hpsa ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p>I recently found a very helpful nugget with regards to OS Provisioning with HP&#8217;s Server Automation product.</p>
<p>OS Prov is most typically done using <a href="http://en.wikipedia.org/wiki/Preboot_Execution_Environment">PXE</a> (or the similar <a href="http://en.wikipedia.org/wiki/Bootp">bootp</a> process). SA provides a PXE server that gives a boot menu to network-booted systems. That menu contains a variety of choices: linux, windows, <a href="http://en.wikipedia.org/wiki/Windows_Preinstallation_Environment">winpe</a>, etc.</p>
<p>In most environments, one particular OS will be dominant, and typically one particular <em>version</em> of that OS &#8211; whether it be RHEL 5 x64 or Windows 2008 R2, it&#8217;s usually just one that makes up the lion&#8217;s<sup>*</sup> share of systems on the network.</p>
<p>If you know that you will be provisioning, say, Windows 2008 R2 90% of the time, it would be nice to not have to <em>always</em> have to pick it manually from the PXE boot menu.</p>
<p>Here&#8217;s what you need to do to make that happen (presuming you want to use Build Plans):</p>
<blockquote><p>Edit the following file:</p>
<blockquote><p><code>/opt/opsware/boot/tftpboot/pxelinux.cfg/default</code></p></blockquote>
<p>For example, if you have this at the beginning of the file:</p>
<blockquote><p><code>"prompt 1<br />
default local<br />
timeout 100<br />
display pxelinux.msg<br />
implicit 0"</code></p></blockquote>
<p>Change it to this for the OGFS version of winpe64:</p>
<blockquote><p><code>"prompt 1<br />
default winpe64-ogfs<br />
timeout 100<br />
display winpe64-ogfs.msg<br />
implicit 0"</code></p></blockquote>
</blockquote>
<p>You can use the above process &#8211; modified, of course &#8211; for any of the available boot images.</p>
<hr />
<p><sup>*<sub>And if you&#8217;re provisioning Mac OS X 10.7, &#8220;Lion&#8221; makes up all the share <img src='http://antipaucity.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </sub></sup></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/11/29/defaulting-pxe-boots-with-hpsa/' addthis:title='defaulting pxe boots with hpsa ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://antipaucity.com/2011/11/29/defaulting-pxe-boots-with-hpsa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>doing technical phone screens</title>
		<link>http://antipaucity.com/2011/10/03/doing-technical-phone-screens/</link>
		<comments>http://antipaucity.com/2011/10/03/doing-technical-phone-screens/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 05:23:56 +0000</pubDate>
		<dc:creator>antipaucity</dc:creator>
				<category><![CDATA[education]]></category>
		<category><![CDATA[ideas]]></category>
		<category><![CDATA[insights]]></category>
		<category><![CDATA[interview]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[fb]]></category>

		<guid isPermaLink="false">http://antipaucity.com/?p=1070</guid>
		<description><![CDATA[Related to a previous post on career development, I thought it could be interesting to look at one approach to the technical screen that I have used over the past few years when interviewing candidates. for folks with no &#8220;real&#8221; experience yet, I ask them to rank themselves on a few key technologies on the [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/10/03/doing-technical-phone-screens/' addthis:title='doing technical phone screens ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p>Related to a previous post on <a href="http://antipaucity.com/2011/09/20/technical-career-development">career development</a>, I thought it could be interesting to look at one approach to the technical <a href="http://joelonsoftware.com/articles/ThePhoneScreen.html">screen</a> that I have used over the past few years when interviewing candidates.</p>
<ol>
<li>for folks with no &#8220;real&#8221; experience yet, I ask them to rank themselves on a few key technologies on the &#8220;Google scale&#8221;</li>
<ul>
<li>the range is 0..10 where a 0 is no knowledge, 1 is some, 10 is &#8220;you wrote the book&#8221;, 9 is you could&#8217;ve written the book, or you edited/contributed</li>
<li>on a few occasions, I have had folks ask to change their ranking from their initial [overconfident] statement to one that is much closer to inline with their true experience/comfort/knowledge level &#8211; and that&#8217;s OK in my book &#8211; honesty is <em>always</em> the best policy here</li>
</ul>
<li>a couple quick &#8220;about us&#8221; questions &#8211; open-ended inquiries that let the candidate tell me what they&#8217;ve done for work</li>
<ul>
<li>this verifies their resume</li>
<li>gets them warmed-up for the rest of the call</li>
<li>allows the candidate to brag on something</li>
</ul>
<li>perhaps a couple quick probes to find out more about a specific experience</li>
<li>a few basic / intermediate questions to assess candidate&#8217;s technical chops (ie, verify that their resume is accurate)</li>
<ul>
<li>this goes along with my personal rule of &#8220;never put anything on a resume you don&#8217;t want to be asked about&#8221;</li>
</ul>
<li>open-ended, intentionally-vague questions to gauge problem solving ability, and methodologies</li>
<ul>
<li>see how they go about refining the problem statement (if at all)</li>
<li>gauge estimation skills</li>
<li>gauge teamwork and delegation aptitude</li>
</ul>
<li>a few intermediate/advanced questions about an area they *don&#8217;t* know anything about &#8211; to gauge their response to unfamiliar/stressful situations</li>
<ul>
<li>in my field in particular, it is<strong> impossible</strong> to know every new technology or even (probably) to be truly 100% aware of those that you <em>do</em> use every single day</li>
</ul>
<li>a few intermediate/advanced questions in their now-articulated fields of expertise (presuming I have any)</li>
<ul>
<li>this verifies more of their stated (and unstated) job experience, and helps determine at what title/work level they should start</li>
</ul>
<li>lifestyle/workstyle questions</li>
<ul>
<li>how much they enjoy travel</li>
<li>how they handle last-minute demands and &#8220;requests&#8221; by customers and management</li>
</ul>
<li>a few questions to gauge flexibility of response to changing requirements</li>
<ul>
<li>for example, switching a project from being Solaris-based to Windows-based part way into implementation because a new CIO has come in, or new licensing is available, etc</li>
</ul>
<li>open time for them to ask me whatever they may wish to know that I can tell them</li>
<ul>
<li>this usually ends-up being very short because the candidate was stressed-out over the interview, and can&#8217;t think of anything about the company they want to know <em>on the spot</em></li>
</ul>
</ol>
<p>What I try to <em><strong>NEVER</strong></em> ask:</p>
<ul>
<li>&#8220;trivia&#8221; questions &#8211; I bet there are C questions even <a href="http://en.wikipedia.org/wiki/K%26R">K&amp;R</a> couldn&#8217;t answer <img src='http://antipaucity.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<ul>
<li>I <strong><em>guarantee</em></strong> I can ask you a question about your area of expertise you cannot answer&#8230;just like I <strong><em>guarantee</em></strong> you could do the same to me</li>
<li>since that is the case, trivia questions are pretty pointless, and more of an ego stroke to the asker than anything else</li>
<li>pointless &#8220;<a href="http://en.wikipedia.org/wiki/MindTrap">MindTrap</a>&#8220;, lateral-thinking questions</li>
</ul>
<ul>
<li>riddles are fun &#8211; but only add to the stress of the interview</li>
<li>pointless problem-solving and estimation <a href="http://news.slashdot.org/story/03/04/22/224224/how-would-you-move-mount-fuji">problems</a></li>
</ul>
<ul>
<li>for example, &#8220;how would you move Mt Fuji&#8221;, &#8220;why are manhole covers round&#8221;, or &#8220;how many gallons of water flow into New York Harbor from the Hudson River per hour&#8221;</li>
<li>estimation problems are wonderful tools and games to play, but not in an interview</li>
<li><a href="http://google.com/search?q=illegal+interview+questions">illegal</a> questions</li>
</ul>
<ul>
<li>sometimes they slip out, but it&#8217;s never intentional <img src='http://antipaucity.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>I adjust my questioning to fit the situation, timing, and candidate responses &#8211; so it&#8217;s [somewhat] different every time.</p>
<p>When the interview is done, I write-up my evaluation of the candidate and send it on to the hiring manager. In line with <a href="http://joelonsoftware.com">Joel Spolsky</a>&#8216;s &#8220;<a href="http://joelonsoftware.com/articles/GuerrillaInterviewing3.html">Guerilla Guide to Interviewing</a>&#8220;, I make sure to put my firm conclusion of Hire/No-Hire near the top, and again at the bottom &#8211; with my reasoning in between.</p>
<p>One thing I have noticed about almost every interview I have ever taken or given is that I end up learning something in the process &#8211; and not <em>just</em> about the candidate (or company). It&#8217;s important to <em><strong>listen</strong></em> to both <strong>how</strong> and the candidates responds to questions, <em>and</em> <strong>what</strong> they say.</p>
<p>So, if you ever get the chance to interview with me, you have an idea of how I&#8217;m going to run the show <img src='http://antipaucity.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/10/03/doing-technical-phone-screens/' addthis:title='doing technical phone screens ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://antipaucity.com/2011/10/03/doing-technical-phone-screens/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>http is a stateless protocol</title>
		<link>http://antipaucity.com/2011/09/23/http-is-a-stateless-protocol/</link>
		<comments>http://antipaucity.com/2011/09/23/http-is-a-stateless-protocol/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 12:25:32 +0000</pubDate>
		<dc:creator>antipaucity</dc:creator>
				<category><![CDATA[education]]></category>
		<category><![CDATA[insights]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://antipaucity.com/?p=1042</guid>
		<description><![CDATA[The ubiquitous protocol that enables the internet as we know it, http, is stateless. Stateless merely means that any given request has nothing to do with the previous, or the next request. This enables the world wide web, as web servers do not need to keep track of who is receiving data, nor ow much [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/09/23/http-is-a-stateless-protocol/' addthis:title='http is a stateless protocol ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p>The ubiquitous protocol that enables the internet as we know it, <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods_and_web_applications">http</a>, is <a href="http://en.wikipedia.org/wiki/Stateless_protocol">stateless</a>.</p>
<p>Stateless merely means that any given request has nothing to do with the previous, or the next request. This enables the world wide web, as web servers do not need to keep track of who is receiving data, nor ow much they have: they get a request, and ship data to the requestor.</p>
<p>It is up to the requestor (often a web browser) to handle the incoming data.</p>
<p>If not every part of a web page, for example, is sent, the browser will display what it can.</p>
<p>This is analogous to a creditor sending you a bill (request), and you sending a check back to them &#8211; once the bill has been sent, the creditor knows nothing about the state of the bill until he receives a payment. Likewise, once the check is dropped in the mail, the payor knows nothing about his bill until the check clears his bank.</p>
<p>Why is this important? Because of an oft-repeated &#8220;request for enhancement&#8221; to the product I use on a daily basis. When the implementors of Opsware SAS were picking how a user should communicate with the system, they picked to run everything over http(s). They chose to utilize http because it&#8217;s commonplace, well-understood, and easy to work with.</p>
<p>One of the things about statelessness is that you cannot know how many people are using a given web page at the same time. Google cannot tell anyone how many people are actually <em>looking</em> at www.google.com at this moment. They can tell you how many <em>loaded</em> it,and how many just presses &#8220;Search&#8221;, but they can&#8217;t know what percentage of the loaders promptly went elsewhere &#8211; either to a different page, or a different room in their home.</p>
<p>One way around the statelessness of http is to utilize cookies or session data &#8211; but that merely adds a check layer to the interaction, it does not provide true &#8220;statefulness&#8221;.</p>
<p>Several times during my time in Support at Opsware (and after HP&#8217;s acquistion), I would have a customer who was looking for the ability to determine who was logged-in at any given time (in similar fashion to running `w` or `who` or `finger` on a Linux/Unix system). This could be important to know whether a user is &#8220;doing something&#8221; before doing an application restart.</p>
<p>However, since communication is all done via http, there can be no state known in the tool. Once you load a web page, it is being viewed/rendered on your local machine in your web browser &#8211; the server could be shut off, your network connection removed, or any of a host of other simulations of restarting the application. And your browser would be none-the-wiser, nor should it be: it has the data it requested/received, and you&#8217;re doing something with it.</p>
<p>This carries over to the product I work with. Jobs might be scheduled by a user to run every day at 0200 &#8211; but he doesn&#8217;t need to be actively logged-in to have them run. Likewise, someone may have logged-in, but is not &#8220;doing&#8221; anything currently (maybe they&#8217;re at lunch).</p>
<p>Another case of <a href="http://antipaucity.com/2011/08/08/why-technical-intricacies-matter">why technical intricacies matter</a> <img src='http://antipaucity.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/09/23/http-is-a-stateless-protocol/' addthis:title='http is a stateless protocol ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://antipaucity.com/2011/09/23/http-is-a-stateless-protocol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>technical career development</title>
		<link>http://antipaucity.com/2011/09/20/technical-career-development/</link>
		<comments>http://antipaucity.com/2011/09/20/technical-career-development/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 06:53:24 +0000</pubDate>
		<dc:creator>antipaucity</dc:creator>
				<category><![CDATA[education]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[ideas]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://antipaucity.com/?p=1032</guid>
		<description><![CDATA[Career development. Career path. Development opportunities. Taking your career to the next level. Terms and phrases we all hear and pretty much pass over in our day-to-day lives. Right up until we want to move to a new/better job or performance reviews roll around. But what do they mean, and how can you advance your [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/09/20/technical-career-development/' addthis:title='technical career development ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p>Career development. Career path. Development opportunities. Taking your career to the next level.</p>
<p>Terms and phrases we all hear and pretty much pass over in our day-to-day lives. Right up until we want to move to a new/better job or performance reviews roll around.</p>
<p>But what do they <em>mean</em>, and how can you advance your career (presuming, of course, that you want to)?</p>
<p>This is by no means an exhaustive list &#8211; indeed, I&#8217;d appreciate any other ideas / feedback / improvements y&#8217;all may suggest <img src='http://antipaucity.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>For a software developer:</p>
<ul>
<li>be the <a href="http://cnx.org/content/m40967/latest/?collection=col11350/latest">documentation</a> KING of your code &#8211; if it&#8217;s not right, make it right</li>
<li>own every bug in your code &#8211; even when it&#8217;s not &#8220;yours&#8221;</li>
<li>be The Guy™ who learns a new component of the code/product (at least conversationally) every few weeks</li>
<li>write at least one tutorial a month on the internal wiki/kb about something you found or did with the code</li>
<li>write at least one tutorial or similar a month externally (maybe a personal blog) in a general fashion about something you learned or did</li>
</ul>
<p>For a systems consultant:</p>
<ul>
<li>be the <a href="http://cnx.org/content/m40967/latest/?collection=col11350/latest">documentation</a> KING of every project you work on &#8211; make <em>ABSOLUTELY</em> sure the next guy can do more after you leave</li>
<li>own every issue you find, even when it&#8217;s really somebody else&#8217;s problem (no throwing it over the fence)</li>
<li>the The Guy™ who learns something new about the environment or product every couple weeks</li>
<li>write at least one tutorial a month and/or give an overview talk of something you learned/did</li>
<li>write about what you&#8217;ve done (changing names to protect the innocent) on a blog or elsewhere</li>
<li><a href="http://electronicdesign.com/article/articles/continuing-education-how-to-teach-yourself-almost-.aspx">teach</a> as many people as are willing to learn what you know (in your company / on your team / etc)</li>
</ul>
<p>Focus &#8211; decide where you want to be, and plot a course to get there.</p>
<p>Finally, <strong><em>NEVER</em></strong> make yourself &#8220;irreplaceable&#8221; &#8211; the <em>instant</em> you make yourself irreplaceable, you also make yourself unpromotable: after all, if you&#8217;re the Only Guy™ who can do your job, why would your boss/manager/supervisor even <em>think</em> of moving you into a new role?</p>
<hr />
<sub><sup>As a side note &#8211; if you&#8217;re ever working at a customer site, don&#8217;t take calls from <em>anyone</em> other than the customer while you&#8217;re at your desk/cube/workspace: even if it&#8217;s project related, take it in a different room <img src='http://antipaucity.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </sup></sub></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/09/20/technical-career-development/' addthis:title='technical career development ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://antipaucity.com/2011/09/20/technical-career-development/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ogsh/ogfs for fun and profit</title>
		<link>http://antipaucity.com/2011/09/17/ogshogfs-for-fun-and-profit/</link>
		<comments>http://antipaucity.com/2011/09/17/ogshogfs-for-fun-and-profit/#comments</comments>
		<pubDate>Sat, 17 Sep 2011 18:17:32 +0000</pubDate>
		<dc:creator>antipaucity</dc:creator>
				<category><![CDATA[technical]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://antipaucity.com/?p=1022</guid>
		<description><![CDATA[The absolute coolest feature of HP&#8217;s Server Automation suite is the OGSH (or OGFS) &#8211; the Opsware Global SHell (or FileSystem). I worked for Opsware before HP acquired them, and the OGSH was a new feature to the product (then called Opsware SAS (Server Automation System)). It&#8217;s a fuse module that gives a [limited] bash interface [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/09/17/ogshogfs-for-fun-and-profit/' addthis:title='ogsh/ogfs for fun and profit ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p>The absolute coolest feature of HP&#8217;s Server Automation suite is the OGSH (or OGFS) &#8211; the Opsware Global SHell (or FileSystem).</p>
<p>I worked for Opsware before HP acquired them, and the OGSH was a new feature to the product (then called Opsware SAS (Server Automation System)). It&#8217;s a <a href="http://fuse.sourceforge.net">fuse</a> module that gives a [limited] bash interface to the managed environment by presenting a live query/view into the database, and, ultimately, allowing manipulation of managed servers in the environment.</p>
<p>For example, to access a list of all managed servers, you login to global shell, then</p>
<blockquote><p><code>cd /opsw/Server/@</code></p></blockquote>
<p>The &#8216;@&#8217; sign is used to indicate you are &#8220;there&#8221; &#8211; at the limit of that particular filter (in this case, &#8220;Server&#8221;).</p>
<p>Since it&#8217;s bash, you can run most common *nix utilities and commands. But the one that&#8217;s most handy, in my opinion, is <code>rosh</code> &#8211; the Remote Opsware SHell.</p>
<p>Remote shell opens an authenticated, logged session to a remote machine (*nix or Windows &#8211; doesn&#8217;t matter), based on your user&#8217;s/group&#8217;s permissions. For testing purposes, I always configure one group (and add myself) that can connect using <code>root</code> for *nix machines (and Administrator on Windows).</p>
<p>The basic command to connect to a machine is:</p>
<blockquote><p><code>rosh -l [username] -n [machine]</code></p></blockquote>
<p>You can also pass commands to <code>rosh</code> like it was an ssh session:</p>
<blockquote><p><code>rosh -l [username] -n [machine] '[command]'</code></p></blockquote>
<p>For the fullest power of <code>rosh</code>, though, use it in a script or loop. For example:</p>
<blockquote><p><code>for sn in *; do rosh -l root -n $sn 'uptime ; uname -a'; done</code></p></blockquote>
<p>That will remote shell into every server in the current view, using standard shell expansion of the splat (*), and run <code>uptime</code> and <code>uname -a</code>, printing the results to screen. That particular command is handy for quick-and-dirty reports on the managed environment to see</p>
<ul>
<li>which servers are up, and which aren&#8217;t</li>
<li>how long they&#8217;ve been up</li>
</ul>
<p>In addition to <code>rosh</code>, global shell provides a near-complete exposing of the SA API (which is also accessible via Java, web services, and Python (using the &#8220;PyTwist&#8221; bindings written to access the Java interfaces).</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/09/17/ogshogfs-for-fun-and-profit/' addthis:title='ogsh/ogfs for fun and profit ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://antipaucity.com/2011/09/17/ogshogfs-for-fun-and-profit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>the ticket smash, raw metrics, and communication &#8211; how to have a successful support organization</title>
		<link>http://antipaucity.com/2011/09/15/the-ticket-smash-raw-metrics-and-communication-how-to-have-a-successful-support-organization/</link>
		<comments>http://antipaucity.com/2011/09/15/the-ticket-smash-raw-metrics-and-communication-how-to-have-a-successful-support-organization/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 23:04:11 +0000</pubDate>
		<dc:creator>antipaucity</dc:creator>
				<category><![CDATA[education]]></category>
		<category><![CDATA[ideas]]></category>
		<category><![CDATA[insights]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://antipaucity.com/?p=1029</guid>
		<description><![CDATA[When I worked at Opsware, and for a while after HP bought us, we used to try to have once- or twice-a-week meetings for each support group wherein we would bring our most difficult cases (with the difficulty being determined by the case owner), and have an opportunity for everyone on the team to ask questions, [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/09/15/the-ticket-smash-raw-metrics-and-communication-how-to-have-a-successful-support-organization/' addthis:title='the ticket smash, raw metrics, and communication &#8211; how to have a successful support organization ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p>When I worked at Opsware, and for a while after HP bought us, we used to try to have once- or twice-a-week meetings for each support group wherein we would bring our most difficult cases (with the difficulty being determined by the case owner), and have an opportunity for <em>everyone</em> on the team to ask questions, contribute, and maybe even solve the problem our customer was having.</p>
<p>Novel idea, isn&#8217;t it? The typical Support team is driven by stats &#8211; the number of tickets in their queue, age of the ticket, number solved/closed, number escalated, etc. Support is driven by these numbers because managers don&#8217;t think of any better way to do it.</p>
<p>All things being equal, if you can close 40 cases in a week, that&#8217;s a lot better than your podmate who &#8220;only&#8221; finished-out 12. But what about the <em>complexity</em> of each of those cases? And how much effort did each engineer put into them? Did the customer come back and ask for it to be closed because it&#8217;s either no longer an issue, or they solved it themselves? Is it a question that can be answered with a reference to a specific page/section of a manual? Or was it a problem that took multiple webex engagements, and dozens of contacts back and forth to find a solution because it was a deep bug?</p>
<p>Theoretically, the goal of &#8220;support&#8221; is to, well, <em>support</em> - get the problem reporter a solution of some kind they can use. That solution may be a bug fix, an RFE, a reference to a tutorial, reconfiguring, or a work around / alternative approach to their problem. A big problem with this setup is that the reporter rarely asks the <a href="http://antipaucity.com/2006/09/28/ask-the-right-question">right question</a>. They ask what they have pre-determined to be what they think is a question &#8211; but by biasing their initial report, they can often end-up dragging-out the solution process far longer than it should take. I recently wrote a guide on <a href="http://cnx.org/content/m40795/latest/?collection=col11350/latest">creating effective support tickets</a>, based on my experience working in support, and interacting with various support organizations both before and since.</p>
<p>Reporter bias is the hardest issue to overcome, in my opinion; engineer bias is easier to get past because (hopefully) there are folks you can bounce the problem off of in the team who can help narrow-down the problem and find a solution &#8230; or at least figure out where to try looking next.</p>
<p>Communication is the key to solving problems &#8211; when I was at Opsware we utilized internal IRC channels and (gasp!) talking with each other to try to find solutions to customer issues. We also spent a lot of time wording inquiries to the reporter to try to gain as much information as possible on each iteration of the communication process.</p>
<p>Another key to solving problems was to make records of cases with the following:</p>
<ul>
<li>initial reported behavior (or lack thereof)</li>
<li>actual problem</li>
<li>solution</li>
</ul>
<p>Those records were sometimes on wiki pages, sometimes in our Plone internal KB, and sometimes got &#8220;promoted&#8221; out to the customer-facing KB. All of these approaches helped us get problems solved faster &#8211; either by offloading the &#8220;work&#8221; to the customer (via a KB reference), or by being able to apply previous answers more quickly when new-but-similar/identical problems were reported.</p>
<p>The end goal of a support team is not to outdo one another on how many cases one engineer has in his queue, or how many another has closed &#8211; the end goal is to solve customer problems. &#8220;Works well in a team setting&#8221; is a qualification typically associated with support engineering employment listings &#8211; but all too often that gets reduced to a cliche that <em>practically</em> means &#8220;tries to outdo his cubemates by closing more cases than the next guy&#8221;.</p>
<p>I&#8217;m as much a fan of personal responsibility and action as the next red-blooded capitalist, so don&#8217;t take this next section to imply I&#8217;m promoting communalism.</p>
<p>The way a support <em>team</em> should work is the way [good] sports <em>teams</em> work, or the way a Nascar team operates: yeah, it&#8217;s the driver of the car who gets the &#8220;glory&#8221;, but without his pit and maintenance crew, he&#8217;d be no better than you or I going to the grocery store. Any given support engineer gets to have his name tagged to the case for posterity &#8211; both with the good things he did, and the not so good ones. But since the goal is really to get the customer&#8217;s problem addressed, the ego of the engineer needs to be removed from the equation.</p>
<p>Bob Smith might be &#8220;the guy&#8221; who informed his customer of a solution, but generating the solution involved the other 7 people in his office. He gets the &#8220;fame&#8221; from Universal Widgets LLC, but he was just one of the [important] cogs in the process of resolving the issue.</p>
<p>The number of cases Bob has in his queue should have [almost] ZERO correlation to his skill as an technical engineer: it&#8217;s the 7 people behind him whom he can ask and brainstorm with that get the job done.</p>
<p>Maybe Bob gets to handle most of the &#8220;customer&#8221; action, but the other 7 are writing bug reports, solutions articles, etc. When evaluating that team, management needs to do just that: evaluate the <em>team</em> first, and the <em>individuals</em> second.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/09/15/the-ticket-smash-raw-metrics-and-communication-how-to-have-a-successful-support-organization/' addthis:title='the ticket smash, raw metrics, and communication &#8211; how to have a successful support organization ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://antipaucity.com/2011/09/15/the-ticket-smash-raw-metrics-and-communication-how-to-have-a-successful-support-organization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bglug meeting &#8211; 17 september &#8211; topic: data center automation</title>
		<link>http://antipaucity.com/2011/09/14/bglug-meeting-17-september-topic-data-center-automation/</link>
		<comments>http://antipaucity.com/2011/09/14/bglug-meeting-17-september-topic-data-center-automation/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 10:49:30 +0000</pubDate>
		<dc:creator>antipaucity</dc:creator>
				<category><![CDATA[bglug]]></category>
		<category><![CDATA[lexington]]></category>
		<category><![CDATA[lug]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://antipaucity.com/?p=1016</guid>
		<description><![CDATA[The September meeting of the Bluegrass Linux User Group will be this Saturday, 17 Sep. We&#8217;ll be meeting at Collexion&#8217;s facilities in Lexington at 2:30p. I will be presenting on data center automation, specifically on HP&#8217;s Server Automation platform (the tool I use on my day job). Some [limited] history of HPSA is available on the Opsware [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/09/14/bglug-meeting-17-september-topic-data-center-automation/' addthis:title='bglug meeting &#8211; 17 september &#8211; topic: data center automation ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p>The September meeting of the <a href="http://bglug.net">Bluegrass Linux User Group</a> will be this Saturday, 17 Sep.</p>
<p>We&#8217;ll be meeting at <a href="http://collexion.net">Collexion&#8217;s</a> facilities in Lexington at 2:30p.</p>
<p>I will be presenting on data center automation, specifically on HP&#8217;s Server Automation platform (the tool I use on my day <a href="http://linkedin.com/in/warrenmyers">job</a>).</p>
<p>Some [limited] history of HPSA is available on the <a href="http://en.wikipedia.org/wiki/Opsware">Opsware</a> wikipedia page.</p>
<p>We&#8217;ll also briefly touch on some of the <a href="http://serverfault.com/q/42565/2321">OSS alternatives</a> to a full-blown environment like HPSA, such as:</p>
<ul>
<li><a href="http://puppetlabs.com">Puppet</a></li>
<li><a href="http://cfengine.com">CFEngine</a></li>
<li><a href="http://opscode.com/chef">Chef</a></li>
<li><a href="https://fedorahosted.org/cobbler">Cobbler</a></li>
<li><a href="http://xcat.sourceforge.net/#docs">xCAT</a></li>
</ul>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/09/14/bglug-meeting-17-september-topic-data-center-automation/' addthis:title='bglug meeting &#8211; 17 september &#8211; topic: data center automation ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://antipaucity.com/2011/09/14/bglug-meeting-17-september-topic-data-center-automation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>why technical intricacies matter</title>
		<link>http://antipaucity.com/2011/08/08/why-technical-intricacies-matter/</link>
		<comments>http://antipaucity.com/2011/08/08/why-technical-intricacies-matter/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 19:18:58 +0000</pubDate>
		<dc:creator>antipaucity</dc:creator>
				<category><![CDATA[insights]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[warning]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://antipaucity.com/?p=984</guid>
		<description><![CDATA[I have been working on a upgrade for one of our customers for nearly a month. Last week we spent about two hours focused on one specific problem that had been rearing its ugly head on an exceedingly-frequent basis: one of the components of the application was routinely pitching OutOfMemory errors from the Java Virtual [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/08/08/why-technical-intricacies-matter/' addthis:title='why technical intricacies matter ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p>I have been working on a upgrade for one of our customers for nearly a month.</p>
<p>Last week we spent about two hours focused on one specific problem that had been rearing its ugly head on an exceedingly-frequent basis: one of the components of the application was routinely pitching OutOfMemory errors from the Java Virtual Machine (jvm). The errors were actually being returned from WebLogic  (currently an Oracle product; previously from BEA).</p>
<p>Much googling of the error messages returned the following Sun bug:</p>
<blockquote><p><a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4697804">http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4697804</a>, and the workaround:<br />
&#8220;<code>Disable VM heap resizing by setting -mx and -ms to the same value.<br />
This will prevent us from hitting the most common sources of the vm_exit_out_of_memory exits.<br />
The best thing to do is increase swap size on the machines encountering this error.</code>&#8220;</p></blockquote>
<p>[If you want to skip the rest of this, feel free: the short version is we boosted swap space from 1GB to 13GB, and it works like a champ now.]</p>
<p>Important Things You Should Know™</p>
<ul>
<li>The version (1.4) and platform (32-bit) of Java is used for a variety of reasons by this product in this component</li>
<li>A 32-bit OS/machine<sup>1</sup> can only access ~3GB of RAM (due to OS overhead and bus address mapping strategies)</li>
<li>A 64-bit OS/machine can access between 2<sup>48</sup> and 2<sup>64</sup> bytes (256TB-16EB) of memory (depending on addressing model used)</li>
<li>There are two types of memory a system can use: <a href="http://en.wikipedia.org/wiki/Dynamic_memory_allocation">heap</a> and <a href="http://en.wikipedia.org/wiki/Stack-based_memory_allocation">stack</a></li>
<li>The jvm gets memory for itself from the host OS from the heap</li>
<li>If more memory is need by the Java application in question, and it has not yet exceeded the max (<code>-Xmx</code> argument) amount available to the jvm, the jvm will get more memory for itself from the system</li>
<li>The 32-bit jvm has a certain amount of overhead itself (I have seen 5-25%, depending on the application)</li>
</ul>
<p>Environmental issues for the application in question</p>
<ul>
<li>8 CPUs</li>
<li>32GB physical memory</li>
<li>~9GB RAM in use, the rest unused</li>
<li>RHEL 4 64-bit</li>
<li>1GB swap</li>
</ul>
<p>Go check out this <a title="Jeopardy! &quot;think&quot;" href="http://www.youtube.com/watch?v=vXGhvoekY44">video</a> while you think for a few seconds <img src='http://antipaucity.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Oh, you&#8217;re back? Welcome!</p>
<p>More details about the Sun jvm: when the jvm needs more memory, so long as the system can issue it, it will ask for a multiple of what it really needs (observationally about 40%, or 1.4x the &#8220;actual&#8221; request). And while it is asking for more memory, it swaps itself out to swap space (virtual memory, or a special location/partition on the drive). After it gets its new allocation, it loads itself back in from swap, and goes on its merry way.</p>
<p>Why does it ask for more than what the application &#8221;actually&#8221; requested? It&#8217;s a best-guess on the part of the jvm &#8211; if you have allocated 256M of RAM minimum, and 1G max, when the application asks for 257M, the jvm doesn&#8217;t want to ask for more RAM too often from the OS, so it asks for ~360M, with the theory being that if you needed 1M over your initial amount, you will <em>likely</em> need yet more. This continues on until the jvm has asked for as much RAM as it is allowed, or until the application quits &#8211; whichever comes first.</p>
<p>Last piece of useful technical data:</p>
<ul>
<li>The specific component in the application I was working with asks for 256MB to start, with a cap of 1280MB (we raised that to 2560MB (2.5GB) as an initial attempt to stave-off OutOfMemory errors)</li>
</ul>
<p>I know it&#8217;s been a little while, but think back to that initial list of Important Things &#8230; and add into the mix that the component in question was chewing an entire CPU (in normal operation it rarely will go above 25%), and was using 3600MB of virtual memory and 2.8GB of real RAM. That&#8217;s a problem. First, because we have 32GB of real memory &#8211; there&#8217;s no reason the whole component (2.8GB is equal to our 2.5GB max plus some jvm overhead). Second, because while it&#8217;s chewing an entire CPU, it&#8217;s never <em>actually</em> coming up, or, if it does, it&#8217;s taking an hour or more (when normally the entire application will start in 12-20 minutes from power on).</p>
<p>What was the problem with this <strong><em>ONE</em></strong> component? The detail is in the list of environmental factors: there was only 1GB of swap space. Uh oh. That means that unless the jvm asks for <em>all 2.5GB up front</em>, it will have to keep re-allocating memory to itself from the system. But with only 1GB of swap space, it has no place to unload itself to while it asks for more and then load itself back into RAM.</p>
<p>What to do? Let&#8217;s go back to that obscure Sun bug: &#8220;increase swap size on the machine&#8221;. We tried going from 1GB to 13GB (had a 12GB partition not being used, so we flipped it to be a swap partition) and rebooting the server.</p>
<p>After increasing swap space, not only does the application start in about the expected amount of time (~15 minutes), but it <em>never</em> pegs the CPU! Woot!</p>
<p>With a newer version of the product, there is an installation prerequisite check to ensure that there is as much swap space as physical RAM installed &#8211; but no explanation of <em>why</em> this is now the case.</p>
<p>Whether the above travails are the <em>entire</em> reason, or merely a <em>single</em> example of why it&#8217;s important, I won&#8217;t be installing onto any machine that doesn&#8217;t have enough swap again.</p>
<hr />
<p><sup>1<sub> without special drivers/kernel modifications</sub></sup></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://antipaucity.com/2011/08/08/why-technical-intricacies-matter/' addthis:title='why technical intricacies matter ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://antipaucity.com/2011/08/08/why-technical-intricacies-matter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

