<?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>Tech on C&#38;P</title>
	<atom:link href="http://tech.chickenandporn.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://tech.chickenandporn.com</link>
	<description>The Tech Part of my World</description>
	<lastBuildDate>Mon, 16 Apr 2012 17:55:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Issues with VMs&#8217; Lost Performance</title>
		<link>http://tech.chickenandporn.com/2012/04/16/issues-with-vms-lost-performance/</link>
		<comments>http://tech.chickenandporn.com/2012/04/16/issues-with-vms-lost-performance/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 17:55:09 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[redirection]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1761</guid>
		<description><![CDATA[In tuning a product that is a write-intensive database tool, we&#8217;ve found that performance on a VM can be wildly inconsistent. The hardest thing to explain is why we see a 30% performance drop and slow commits when moving from physical servers to the same-size physical server holding one VM generated form that server: literally [...]]]></description>
			<content:encoded><![CDATA[<p>In tuning a product that is a write-intensive database tool, we&#8217;ve found that performance on a VM can be wildly inconsistent.  The hardest thing to explain is why we see a 30% performance drop and slow commits when moving from physical servers to the same-size physical server holding one VM generated form that server: literally the same system, but with a VM layer.</p>
<p>Shoot, <a href="http://37signals.com/">37 Signals</a> had <a href="http://37signals.com/svn/posts/1819-basecamp-now-with-more-vroom">this performance impact</a>:</p>
<p><a href="http://tech.chickenandporn.com/files/2012/04/296-bc_4wk_compare.png"><img src="http://tech.chickenandporn.com/files/2012/04/296-bc_4wk_compare.png" alt="" width="478" height="257" class="alignright size-full wp-image-1762" /></a></p>
<p>Of course, layering in a VM lets us VMotion the process, if we weren&#8217;t using a lot of local disk (since the local disk doesn&#8217;t move with it).  NAS?  Bwa ha ha ha, please no, corporations with I/O response requirements use SAN.  Sure, SAN is expensive, but it shares the disk nicely unless you need to use the tool to monitor the SAN &#8212; SAN congestion slows the tool you need to fix it <img src='http://tech.chickenandporn.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Layering a VM tends to be satisfying a corporate requirement of &#8220;everything on VM&#8221;.</p>
<p>When considering <a href="http://blog.codesherpas.com/on_the_path/2011/03/tuning-mysql.html">Tuning the MySQL InnoDB Engine</a>, keep in mind that if it&#8217;s on a VM, you can&#8217;t guarantee accuracy of the numbers you&#8217;re using to tune.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2012/04/16/issues-with-vms-lost-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grabbing the rui.crt for vCenter Programmatically</title>
		<link>http://tech.chickenandporn.com/2012/02/03/grabbing-the-rui-crt-for-vcenter-programmatically/</link>
		<comments>http://tech.chickenandporn.com/2012/02/03/grabbing-the-rui-crt-for-vcenter-programmatically/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 01:06:54 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1724</guid>
		<description><![CDATA[The rui.crt for vCenter can be grabbed (assuming your server is 192.168.1.2) by: openssl s_client -connect 192.168.1.2:443 &#60; /dev/null   &#124;   \ sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'   &#62; rui-192.168.1.2.crt So what&#8217;s up with this?  When installing my company&#8217;s product, we always go through this goose-chase to find a rui.crt.  Seriously, it&#8217;s a pain, [...]]]></description>
			<content:encoded><![CDATA[<p>The rui.crt for vCenter can be grabbed (assuming your server is 192.168.1.2) by:</p>
<p><code>openssl s_client -connect 192.168.1.2:443 &lt; /dev/null   |   \<br />
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'   &gt; rui-192.168.1.2.crt</code></p>
<p>So what&#8217;s up with this?  When installing my company&#8217;s product, we always go through this goose-chase to find a rui.crt.  Seriously, it&#8217;s a pain, we need to dig through a bunch of directories, and in the end, sometimes we&#8217;re still scratching our heads.</p>
<p>Our customers just want something they can cut-n-paste.  Of course, the line above only works on non-windows, but I have reduced concern for those trying to fly with wings of lead: there&#8217;s a limit as to what you can do with windows.  Accept it.</p>
<p>HUGE Kudos to <a href="http://stackoverflow.com/users/372643/bruno">&#8220;Bruno&#8221;</a> on StackExchange whose LDAP Certificate response was the key win for this.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2012/02/03/grabbing-the-rui-crt-for-vcenter-programmatically/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rsync on Windows</title>
		<link>http://tech.chickenandporn.com/2012/01/20/rsync-on-windows/</link>
		<comments>http://tech.chickenandporn.com/2012/01/20/rsync-on-windows/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 08:44:19 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1715</guid>
		<description><![CDATA[A friend asked me about rsync, and I remembered i hadn&#8217;t posted my success story; in short, it works, you don&#8217;t need to install all of cygwin, but there are weaknesses in the filesystem exposed occasionally. in AutoFS Mounted FTP via FUSE, I discussed setting up an FTP client as a filesystem to do a [...]]]></description>
			<content:encoded><![CDATA[<p>A friend asked me about rsync, and I remembered i hadn&#8217;t posted my success story; in short, it works, you don&#8217;t need to install all of cygwin, but there are weaknesses in the filesystem exposed occasionally.</p>
<p>in <a href="http://tech.chickenandporn.com/2011/01/13/autofs-mounted-ftp-via-fuse/">AutoFS Mounted FTP via FUSE</a>, I discussed setting up an FTP client as a filesystem to do a client-side pull of FTP content.  That turned out quite vulnerable to our IT guy truncating a connection randomly through the firewall: the data stream didn&#8217;t seem to handle timeouts, and any process waiting on a data buffer tends to hang.  Pulling data from a filesystem is a kernel-level thing, so a process cannot really abort a hanging FUSE request.  Bad news.</p>
<p>I later found the <a href="http://gerwick.ucsd.edu/backuppc_manual/backuppc_winxp.html">simplified route</a>, and installed it on the FTP server:</p>
<ol>
<li>download the <a href="http://sourceforge.net/projects/backuppc/files/cygwin-rsyncd/2.6.8_0/">ZIP file</a> (cygwin-rsyncd-2.6.8_0.zip)</li>
<li>unpack the zip file</li>
<li>use rsync.exe, which uses a cygwin.dll</li>
<li>that&#8217;s it</li>
</ol>
<p>The rsync.exe is a cygwin binary, and acts very similar to its UNIX-y cousins; instead of installing a huge Cygwin stack, the developer has bundled just the necessary parts of Cygwin into the smaller single DLL, and provides it for rsync&#8217;s dependency.  There&#8217;s a few other files in there, but as an rsync client, I didn&#8217;t need them.</p>
<p>The server has a fairly standard rsync server config, with an rsyncd.conf identifying shared directories as filesystems, and such.  In general, if you have a working rsyncd, you can connect to it from this rsync.exe</p>
<p>Finally, my command line, as an example (my rsync.exe and the DLL are in C:\Program Files\rsync\, hand-installed), is as follows. Note that I&#8217;ve broken the line up with back-slashes to show functional groups, but when you run it, you should have it all on one line, without backslashes except the rsync.exe path.</p>
<blockquote><p>&#8220;C:\Program Files\rsync\rsync.exe&#8221;  \</p>
<p>&#8211;exclude=some-skipped-file&#8217; &#8211;exclude=*a_wildcard_pattern* &#8211;exclude=backup*z  \</p>
<p>&#8211;exclude=backup*.zip &#8211;exclude=*.mov &#8211;exclude=*.wmv &#8211;exclude=.*  \</p>
<p>&#8211;delete &#8211;delete-excluded &#8211;chmod=ugo=rX &#8216;  \</p>
<p>-avr    /cygdrive/f/path/to/users/library/   server.example.com::library/</p></blockquote>
<p>The server has a rsyncd.conf config that says:</p>
<blockquote><p>[ftp-services]<br />
path = /shared/docs/library<br />
uid = libraryowner<br />
gid = docs-ro<br />
comment = Library to share to all remote staff<br />
write only = true<br />
read only = false<br />
list = false<br />
exclude = some-skipped-file&#8217; *a_wildcard_pattern* backup*z<br />
incoming chmod = u=rwX</p></blockquote>
<p>You&#8217;ll notice a few things that are unusual here:</p>
<ol>
<li>I use &#8220;-avr&#8221; in my rsync command.  &#8221;r&#8221; should be redundant with &#8220;-a&#8221;.  try it without</li>
<li>the source and destination paths end in a slash.  I would recommend the same convention.  Be consistent</li>
<li>I used to have /library/* as my source, but on a push, deleted directories as direct children of /library/ are gone, no longer found by the &#8220;*&#8221; wildcard, so there deletion does not sync</li>
<li>I have a bunch of &#8211;exclude options, some of which are duplicate on the rsyncd.conf entry.  Try removing some once you have yours working.</li>
<li>ditto for the chmod &#8212; they should act similarly, and setting it on the server sets a consistency and avoids users forgetting</li>
<li>my uploads are write-only &#8212; I use a different share label in rsyncd.conf for uploads than I do downloads so that those who have the keys to read can&#8217;t butcher my stuff.</li>
<li>for those crazy A:\, C:\ drive letters, you can use the cygwin special path /cygdrive/a/ or /cygdrive/c/ to map to them without playing the game of escape slashes: &#8220;was that 21 backslashes for 10 laters of scripting, or 22?&#8221;</li>
</ol>
<div>If your transfer isn&#8217;t working (i.e. transfers nothing, or transfers it all every time):</div>
<ol>
<li>try adding &#8220;&#8211;stats&#8221; to get a list of what rsync is doing</li>
<li>try adding &#8220;&#8211;max-size=20k&#8221; to avoid pushing HUGE files while diagnosing issues</li>
<li>if the datestamping is seriously butchered on your windows boxes, try &#8220;-c&#8221; option to use checksums, understanding it&#8217;ll take (much) longer to sync</li>
<li>if you habitually rename files, and rsync faithfully re-pushes the file every time, &#8220;-y&#8221; or &#8220;&#8211;fuzzy&#8221; tells rsync&#8217;s receiver to check around for similar files to use for missing files</li>
</ol>
<p>Good Luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2012/01/20/rsync-on-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Connect to VMs Without Installing CoRD</title>
		<link>http://tech.chickenandporn.com/2012/01/10/connect-to-vms-without-installing-cord/</link>
		<comments>http://tech.chickenandporn.com/2012/01/10/connect-to-vms-without-installing-cord/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 00:50:07 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[redirection]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1702</guid>
		<description><![CDATA[When I have to connect to Windows systems, except for the known issues with the en_CA language, CoRD is a great Remote Desktop.  If I could connect using MacOSX-bog-Standard stuff, then clearly this en_CA issue wouldn&#8217;t happen&#8230; and http://www.smoothblog.co.uk/2012/01/10/configure-vnc-vmware-esxi-5/ will show you how to do that.The trick here is that Back-to-My-Mac uses a VNC technology internally; [...]]]></description>
			<content:encoded><![CDATA[<p>When I have to connect to Windows systems, except for the <a href="http://sourceforge.net/apps/trac/cord/ticket/231">known issues with the en_CA</a> language, <a href="http://cord.sourceforge.net/">CoRD</a> is a great Remote Desktop.  If I could connect using MacOSX-bog-Standard stuff, then clearly this en_CA issue wouldn&#8217;t happen&#8230; and <a href="http://www.smoothblog.co.uk/2012/01/10/configure-vnc-vmware-esxi-5/">http://www.smoothblog.co.uk/2012/01/10/configure-vnc-vmware-esxi-5/</a> will show you how to do that.<span id="more-1702"></span>The trick here is that Back-to-My-Mac uses a VNC technology internally; this also gives us a URL to connect to VNC services: if you server is at 10.1.1.1, try vnc://10.1.1.1/</p>
<p>Enabling VNC on a VMX would obviate dependency on CoRD to get the job done, but this may change your user-experience.  For example, RDP tends to allow filesystems sharing across a connection, but even though VNC wouldn&#8217;t support that, I&#8217;ve had sketchy reliability there anyhow.  Additionally, the Ctrl-Shift or Shift-Option in order to do right-clicks would change around (so may parts of Windows require a two-button mouse, even though Windows claims that it works with one-button pointing devices).  Finally, VNC password seems to be a static one-for-everyone, so you lose the protection that the Windows Kerberos/AD password policies give you.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2012/01/10/connect-to-vms-without-installing-cord/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inaccuracy may Inhibit</title>
		<link>http://tech.chickenandporn.com/2012/01/09/inaccuracy-may-inhibit/</link>
		<comments>http://tech.chickenandporn.com/2012/01/09/inaccuracy-may-inhibit/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 23:21:53 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1699</guid>
		<description><![CDATA[Consider the effect of inaccuracy on Engineers when posing a task or asking a question.  It may reveal why you&#8217;re not getting what you expect. Engineers are sticklers for detail &#8212; indeed, they&#8217;re so often held feet-to-fire for the finer details their managers don&#8217;t know, cannot fully comprehend, or simply don&#8217;t care. Many&#8217;s the engineer [...]]]></description>
			<content:encoded><![CDATA[<p>Consider the effect of inaccuracy on Engineers when posing a task or asking a question.  It may reveal why you&#8217;re not getting what you expect.</p>
<p><span id="more-1699"></span></p>
<p>Engineers are sticklers for detail &#8212; indeed, they&#8217;re so often held feet-to-fire for the finer details their managers don&#8217;t know, cannot fully comprehend, or simply don&#8217;t care.</p>
<p>Many&#8217;s the engineer who is pressed for an estimate, gives one (with or without variance indicators), under- or over-estimates, and is taken to task for the bad prediction.  Similar to asking a detective &#8220;when will you solve this crime?&#8221;, some engineering work cannot be predicted, and if the engineer explains it as a &#8220;Poisson distribution&#8221;, his manager assumes &#8220;poisson&#8221; is profanity.</p>
<p>Some engineers no longer even try to estimate: it&#8217;s more efficient to be wrong, and punished, without wasting the effort.</p>
<p>Often, missing details, and discovery thereof, drive the inaccuracy.  I recall one at USL saying &#8220;less than two years&#8221;, then offering to improve the prediction within a few weeks when the manager relented and gave some details.  The manager thought he was helping by asking broad questions with few details to &#8220;get a ballpark figure&#8221; whereas the Engineer can see how the answer ranges from 2 hours to 2 years depending on environment alone.</p>
<p>&#8230;and then there&#8217;s the aspect of promises.  Engineers don&#8217;t promise anything but quality.  They don&#8217;t commit to a delivery, they offer their firm attempts to succeed, understanding that the delivery might be met of some features are later dropped.  They don&#8217;t answer questions unless the answer is a relatively good degree of accuracy &#8212; or unless pressed feet-to-fire for an answer that will come back and bite them later.</p>
<p>Lying, or inaccuracy approaching lying, is not done.  It WILL bite them later.</p>
<p>Being asked for answers to exceedingly vague questions will result in non-answers or answers with equally vague details.  Being asked to rough up or down significantly will be met with long decisions as to which way to go.  If an Engineer is billing, and the effort is below a certain minimum, I have known some to simply not bill for such insignificant work.</p>
<p>Quantizing is inaccuracy.   &#8230; an hour, a half-day, a full day, these are simply varying quanta.  Rounding up too far will yield to rounding down to zero.</p>
<p>Increasing inaccuracy increases the chance that either zeros will be quoted, or nothing responded at all: easier to not answer and be wrong than spend hours answering and still be inaccurate to the point of unprofessional.</p>
<p>&nbsp;</p>
<p>So what expectation is there that a timesheet in terms of half-days will ever be accurate, and not bite the Engineer later?  &#8221;did you really spend 1/2 day on the project you billed me for?&#8221;</p>
<p>Don&#8217;t impose inaccuracy on an engineer; accept the answers, record them, and if you want inaccurate or more vague results, round them yourself.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2012/01/09/inaccuracy-may-inhibit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kindle Fire VPN</title>
		<link>http://tech.chickenandporn.com/2012/01/09/kindle-fire-vpn/</link>
		<comments>http://tech.chickenandporn.com/2012/01/09/kindle-fire-vpn/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 20:54:22 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[redirection]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1697</guid>
		<description><![CDATA[A friend asked how to configure a VPN on Kindle Fire; the short answer is that it&#8217;s difficult, resisted by the manufacturer, and can go away in a heartbeat. Kindle Fire&#8217;s Linux kernel lacks the necessary component (tun.ko) required to connect a tunnel.  This may be because the vendor feels its unnecessary, and space on [...]]]></description>
			<content:encoded><![CDATA[<p>A friend asked how to configure a VPN on Kindle Fire; the short answer is that it&#8217;s difficult, resisted by the manufacturer, and can go away in a heartbeat.</p>
<p><span id="more-1697"></span></p>
<p>Kindle Fire&#8217;s Linux kernel lacks the necessary component (tun.ko) required to connect a tunnel.  This may be because the vendor feels its unnecessary, and space on an embedded device is more of a &#8220;prove we need it&#8221; rather than &#8220;include everything we might need&#8221; mindset, or the vendor realizes the possibility for abuse and purposely blocks this avenue.</p>
<p>The possible uses of tunnelling/VPN include allowing the user to use the Kindle from a corporate VPN connection, or more safely from an open Wifi, or to appear as though from a different country which therefore defeats country-based rights-blocking to purchased content (hey RIAA and MPAA, did you know that the internet was global?)</p>
<p>In order to use a VPN on Kindle, the user needs to &#8220;Root&#8221; it, similar to &#8220;Jailbreaking&#8221; an iOS device.  As a reminder, the &#8220;rooting&#8221; will disappear if the device is updated; the actual method used may disappear in a future update as well.  Finally, rooting your device, if detected, gives you an unsupported device should anything else happen to it (covered by warrantee or otherwise).</p>
<p>I write these tech articles to remind myself as much as remind others; the process seems straight-forward, but non-trivial: <a href="http://www.geek.com/articles/gadgets/how-to-root-the-kindle-fire-20111223/">http://www.geek.com/articles/gadgets/how-to-root-the-kindle-fire-20111223/</a></p>
<p>In short:</p>
<ol>
<li>download the Android SDK</li>
<li>set ADB (Android Debugger?) connection to recognize the Kindle Fire&#8217;s Vendor ID (0&#215;1949)</li>
<li>set the Kindle&#8217;s SDK to use VID=1949, PID=0006</li>
<li>configure your Kindle to accept untrusted sources of applications</li>
<li>Connect your windows laptop with the SDK to your Kindle by USB</li>
<li>Download and unpack a bunch of tools from a website</li>
<li>Enable the &#8220;su&#8221; command, and download a helper app, then reboot</li>
<li>reboot, and you&#8217;re in</li>
</ol>
<div>These steps seem a bit non-trivial; I don&#8217;t have a Kindle to try it with, but it would be fun.</div>
<p>If the process supports a non-windows environment, I&#8217;ll update this post.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2012/01/09/kindle-fire-vpn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Users Only Know Possible Passwords</title>
		<link>http://tech.chickenandporn.com/2012/01/09/users-only-know-possible-passwords/</link>
		<comments>http://tech.chickenandporn.com/2012/01/09/users-only-know-possible-passwords/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 19:29:08 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[system config]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1695</guid>
		<description><![CDATA[Users tend not to know the exact credentials for ServerXY, but rather the possibilities; should we configure for this in software? Providing configuration options for what a user actually knows versus what would be proper and correct might be faster for the user, and allow for incremental addition of resources, but may offend users or [...]]]></description>
			<content:encoded><![CDATA[<p>Users tend not to know the exact credentials for ServerXY, but rather the possibilities; should we configure for this in software?</p>
<p>Providing configuration options for what a user actually knows versus what would be proper and correct might be faster for the user, and allow for incremental addition of resources, but may offend users or appear confusing.</p>
<p><span id="more-1695"></span></p>
<p>Long ago, a toll-free telephone number was connected to a &#8220;Hunt Group&#8221; or &#8220;Hunt Pool&#8221;: the incoming call would try to connect on the first number, but if busy, it would move onto the next, then the next, eventually ringing the phone of the first non busy extension.  Basically, on failure of &#8220;is that line non-busy?&#8221;, it would try the next extension, recording the first success, and trying later to connect that call using the details of the success.</p>
<p>Some services make us change our passwords: special &#8220;you&#8217;re a nuisance&#8221; prize to those who make us change our passwords every 30 days to one we haven&#8217;t used in the last 8 passwords!  In general, we end up with some services using one password, some using another, and when we try to connect to those services, we tend to try the most recent password, then the previous, then the previous, hoping that we have a match before the service says &#8220;too many tries; account is deactivated, call our service number between the hours of 10:00am and 2:00pm and wait 45 minutes in a call-in queue to unblock your access&#8221;.  We basically try a list of possibilities, and hope we have a hit before the system &#8220;clamps down&#8221; on our attempts.</p>
<p>As an aside, if you know your buddy&#8217;s (or ex-girlfriend&#8217;s) bank ID, three password failures tends to block their web-banking.  Try that with your branch manager.</p>
<p>This same &#8220;hunt for a match before the system clamps&#8221; is often done when configuring access for dozens of servers: some servers have the new 2011Q4 password, some have the new 2012Q1 password, and some are those old systems with Mike&#8217;s password based on a cartoon character that no one remembers to change.  The behaviour is the same:</p>
<ol>
<li>&#8220;all of our servers use username=scott, password=tiger&#8221;</li>
<li>(when some fail) &#8220;ok, try username=support, password=Rup3rt&#8221;</li>
<li>(all but a handful work) &#8220;ok, try username=admin, password=admin, yeah I know it&#8217;s a bad habit&#8221;</li>
</ol>
<p>Look at how we typically ask for the authentication for a list of servers: we ask for 200 lines of a table with individual user/pass pairs for each, when we know that the user will fill in all to be the same &#8220;except for those ones over there, they&#8217;re old&#8221; and when there are failures, a few one-off changes are made.</p>
<p>Additionally, when authentication is not managed by TACACS or OpenID or LDAP, the group that sets/changes passwords may differ from the group that uses them.  Failing a login, we just say &#8220;Oh, Compliance Group has changed those passwords finally&#8221; and we use the new ones.</p>
<p>Why do we even ask for the list of passwords?  If the user is just going to play this &#8220;try this one, and if it fails, try that one next&#8221; game, and the login system never &#8220;clamps&#8221; on us, then why not just ask for the list of possible user/pass pairs?  We&#8217;d reduce the keystrokes necessary to enter all the services, we&#8217;d have a fallback path if our access suddenly stops (i.e. when &#8220;Compliance Group&#8221; updates a password and doesn&#8217;t tell our users), we could more simply add new services (such as organic growth, failover, or in response to Discovery), and we&#8217;d more accurately approximate what the user is doing.</p>
<p>Simple.</p>
<p>It&#8217;s strange, and users don&#8217;t like to tell us they don&#8217;t know.</p>
<p>Two things I learned in Asia: don&#8217;t back people into a corner, and don&#8217;t make then feel like they&#8217;re looking stupid.  Chinese are faced with a higher degree of competition in the workplace so are the ones nice enough to correct me on this: all cultures are sensitive to this.  No one likes to look stupid, and whether they feel like they&#8217;re looking stupid is up to their own perception. If we do something that says &#8220;you really don&#8217;t know your passwords&#8221;, they may be impacted and push-back; by continuing to play this game, we avoid this issue.  Perhaps any implementation along this idea of a list of possible names should keep this in mind.</p>
<p>Secondly, it&#8217;s strange.  It&#8217;s not what we&#8217;ve done in the past, and no matter how it may approximate what actually happens, you&#8217;ll get laughed at for proposing it.</p>
<p>&#8230;and no one with any sense of ego likes being laughed at.  Only take this road if you&#8217;re willing to have to explain it to a number of people who either reject the unusual, or accept it but lack the backbone to explain it to the next guy.  The meatware is always an issue, both the brain of the user, and the brain of the developer who avoids looking stupid to his peers.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2012/01/09/users-only-know-possible-passwords/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why SOPA and PIPA are incapable of helping, while still dangerous</title>
		<link>http://tech.chickenandporn.com/2012/01/05/why-sopa-and-pipa-are-incapable-of-helping-while-still-dangerous/</link>
		<comments>http://tech.chickenandporn.com/2012/01/05/why-sopa-and-pipa-are-incapable-of-helping-while-still-dangerous/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 20:34:31 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[opinion]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1683</guid>
		<description><![CDATA[SOPA and PIPA are two attempted bills in the US that seek to stop online piracy.  These two acts are incapable of actually stopping piracy, yet remain fully capable of an &#8220;internet death-penalty&#8221; against innocent sites. Consider arriving in a strange, new city during the era of prohibition.  In order to find stores, markets, and local [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.google.com/search?q=SOPA">SOPA</a> and <a href="http://www.google.com/search?q=PIPA">PIPA</a> are two attempted bills in the US that seek to stop online piracy.  These two acts are incapable of actually stopping piracy, yet remain fully capable of an &#8220;internet death-penalty&#8221; against innocent sites.</p>
<p>Consider arriving in a strange, new city during the era of prohibition.  In order to find stores, markets, and local associates, you pick up two telephone guides.  Remember the White Pages and Yellow Pages?  Consider those as your resources, except that your phonebooks update instantly.</p>
<p>You&#8217;re able to look up your friend Mike, who has invited you to dinner.  His address is in the white pages, telling you &#8220;Mike Smith: 123 Main St&#8221;, and you know how to get there.  Mike lives above a tailoring shop, and has a market nearby, which you&#8217;re able to find to buy some beef enroute to dinner.</p>
<p>What about a bottle of wine?  That would be nice, but it&#8217;s prohibition, everything with any alcohol is illegal.</p>
<p>On the way to Mike&#8217;s, beef in-hand (a couple of excellent steaks), you notice that the tailor shop below him is closed, yet many people keep entering and leaving.  That&#8217;s odd.  Mike is happy to see you when you get to his door, and he makes a great dinner; he suggests doing so again next week.</p>
<p>Next week, Pork&#8217;s on the menu, but you have to look up the market again.  You wrote down the name (Joey&#8217;s Eastside Butcher) and your whitepages tell you where it is.  Mike tells you on the phone to be careful, police have detected that the Tailor shop is a Speak-Easy, and is illegal.  As a lawful citizen, despite that you&#8217;d like a drink occasionally, you tend to stay away from that sort of place anyhow.</p>
<p>Off to the butcher&#8217;s, but wait&#8230; where&#8217;s Mike&#8217;s place?  The whitepages no longer list his building at all.  From your always-updated whitepages, Mike&#8217;s entire building is gone.  You ask a friend, they have one that doesn&#8217;t update as quickly, and it shows that last week, Mike&#8217;s address was 123 Main St.  yeah, that&#8217;s right.  Another friend has a version of whitepages from Germany, and although in a different language, it does show the local city, and it agrees: Mike&#8217;s address is still 123 Main St.  Good thing you wrote down Mike&#8217;s phone number itself rather than his name, or you&#8217;d lose all contact with Mike.  You should get yourself a German phonebook, or use one that doesn&#8217;t delete entries, just adds them.</p>
<p>Arriving at Mike&#8217;s building, you notice that the Speak-Easy is doing a brisk trade.  It hasn&#8217;t been shut down!  The police haven&#8217;t lifted a finger, just &#8220;hid&#8221; it by removing Mike&#8217;s building from the whitepages.  Everyone who goes there often knows exactly where it is; if they haven&#8217;t, they&#8217;ve written down the phone number already, or have it on speed-dial.</p>
<p>This is how these new bills work: they don&#8217;t stop crime, they simply allow it to become unlisted quickly, without any recourse, any due-process.  They just make it harder to find, quickly.  The internet whitepages is called &#8220;DNS&#8221;, and is controlled by many different countries.  DNS updates take up to 72 hours to occur, and even after that time, the services are still open.  Anyone using these services knows where to find them without having to look them up, but if they need to, they can use alternative listings to find the same address.  The piracy isn&#8217;t even affected, it continues unabated, but common people are affected: new arrivals at a website or an interest group, and those who have to find their websites when they move (which happens about as frequently as people change homes)</p>
<p>Worse, with some allusion to Brazil, and perhaps to some implementations of photo-radar speed-traps, there&#8217;s no double-checking of errors, no due-process.  Due to an error, not only is a building, and all it&#8217;s businesses gone, while they are barely making it through the recession.  I&#8217;m sure the people who think this is a good idea are not the small businesses and private citizens who can vanish immediately due to error.  &#8230; and we know the Department of Homeland Security makes no mistakes.</p>
<p>Would you give the &#8220;Internet Kill Switch&#8221; to the TSA?</p>
<p>Criminals will simply go to other countries&#8217; DNS, or just use the numbers, leaving only the lawful to be the victims of bad legislation and the zealots who support it.</p>
<p>Crime should be stopped by actually stopping crime, not by making it and its innocent neighbours into unlisted addresses.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2012/01/05/why-sopa-and-pipa-are-incapable-of-helping-while-still-dangerous/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Naming Consistency: Make a Script</title>
		<link>http://tech.chickenandporn.com/2012/01/05/naming-consistency-make-a-script/</link>
		<comments>http://tech.chickenandporn.com/2012/01/05/naming-consistency-make-a-script/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 17:50:32 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[Best Practices]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1681</guid>
		<description><![CDATA[If you want a consistent, easy-to-use repository, use a script to build directories and copy in your content, which gives consistency as a side-effect of making things easier to move around. Anyone who has tried to download software form a repository can tell when the ownership changes hands: the directory structure changes in subtle ways. [...]]]></description>
			<content:encoded><![CDATA[<p>If you want a consistent, easy-to-use repository, use a script to build directories and copy in your content, which gives consistency as a side-effect of making things easier to move around.</p>
<p>Anyone who has tried to download software form a repository can tell when the ownership changes hands: the directory structure changes in subtle ways.  There&#8217;s a dot in the path now, there wasn&#8217;t before, or capitalization changes.  This isn&#8217;t a problem until you try to use the repository in an automated fashion: scripting and tools.  Suddenly, a change from &#8220;V&#8221; to &#8220;v&#8221; requires an entirely new case, as if it&#8217;s a whole new repository on a different server.</p>
<p>NOTE: if the files are moved around manually, and the owner of those hands doing the moving is a bit flakey or random, then this sort of speed-wobble might as well count as changing the ownership, only more frequently (every release)</p>
<p>People will have a problem with this, but they&#8217;ll never tell you just as they&#8217;ll never tell you that your shoes don&#8217;t match your belt&#8230; but unlike fashion faux-pas, inconsistency with directories actually impacts others.</p>
<p>Don&#8217;t be a flake.  Be consistent.  A script helps you do that.</p>
<p>Additionally, if the script is the final part of the build process, it reduces the manual steps to a build.  I would recommend either right before or right after running your self-tests.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2012/01/05/naming-consistency-make-a-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cloaked Twittering in Dangerous Places</title>
		<link>http://tech.chickenandporn.com/2012/01/01/cloaked-twittering-in-dangerous-places/</link>
		<comments>http://tech.chickenandporn.com/2012/01/01/cloaked-twittering-in-dangerous-places/#comments</comments>
		<pubDate>Sun, 01 Jan 2012 22:56:09 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[dataflow]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1675</guid>
		<description><![CDATA[Recently I&#8217;ve been bothered by the concepts such as censorship, Arab Spring, crowd discussions. Many of the censorship tools in-use are just tools built by engineers who are not political, just building tools. Just doing their jobs. Often the desire to fulfill a challenging objective can blind the engineer to the possible uses &#8212; or [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I&#8217;ve been bothered by the concepts such as censorship, Arab Spring, crowd discussions.</p>
<p>Many of the censorship tools in-use are just tools built by engineers who are not political, just building tools. Just doing their jobs. Often the desire to fulfill a challenging objective can blind the engineer to the possible uses &#8212; or the engineer simply doesn&#8217;t care (i.e. has bigger issues to care about than some foreign country&#8217;s citizens&#8217; free speech).</p>
<p>I have an Idea I&#8217;d call Qloak (compression of &#8220;Quacking&#8221; and &#8220;Cloaked&#8221;, and &#8220;Quacking&#8221; based on what Chinese guys call gossip) that would allow:</p>
<ul>
<ul>
<li>twitter posts to get through firewalls and most paywall wifi APs</li>
<li>foursquare checkins to also get through</li>
<li>ability to check whether an app needs to self-destruct, flushing history</li>
</ul>
</ul>
<p>A lot of this technology is the way I used to configure the &#8220;ext&#8221; system as a phonebook at a past employer; as well, acting as the head of a TOR or a VPN connection may consistently get through.</p>
<p>I don&#8217;t judge Eqypt, or Libya, or China, but I worry over the limiting/chilling/hushing aspect of some engineering talent mis-applied.</p>
<p>I would prefer that more people are in the conversation.</p>
<p>Countries, Companies, people who claim to support freedom of speech should act to support it. Build a TOR gateway. Support free opinions in other countries. Listen to everyone, even the Gay, the Religious Fanatic, the Type-B personality, the Nature Fanatic, the Raging Republican &#8212; whatever grouping you put people into, those people will be oppressed in other countries. Listen to them, however much you may disagree.</p>
<p>Yes, if I built an App for this, I would give away free signups to anyone at an email with a domain such as .cn, .ly, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2012/01/01/cloaked-twittering-in-dangerous-places/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone 4s and iPhone4 Physical Case Differences</title>
		<link>http://tech.chickenandporn.com/2011/12/27/iphone-4s-and-iphone4-physical-case-differences/</link>
		<comments>http://tech.chickenandporn.com/2011/12/27/iphone-4s-and-iphone4-physical-case-differences/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 22:46:45 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1670</guid>
		<description><![CDATA[After some false-starts on iPhone cases (burned off my previous one, and i kinda don&#8217;t miss it), I wanted to post a quick note pointing others to a detailed description of some key differences. iCollectGadgets shows a few great photos, but the key is in the following two (with permission, I&#8217;m willing to host a [...]]]></description>
			<content:encoded><![CDATA[<p>After some false-starts on iPhone cases (burned off my previous one, and i kinda don&#8217;t miss it), I wanted to post a quick note pointing others to a detailed description of some key differences.</p>
<p><a href="https://icollectgadget.wordpress.com/2011/10/09/how-to-choose-cases-for-iphone-4s-and-iphone-4/">iCollectGadgets</a> shows a few great photos, but the key is in the following two (with permission, I&#8217;m willing to host a copy of these on my site to reduce any bandwidth-stealing):</p>
<p>Button Alignment:<br />
<img src="http://icollectgadget.files.wordpress.com/2011/10/av1withline.jpg"></p>
<p>Earbud 3.5mm Socket:<br />
<img src="http://icollectgadget.files.wordpress.com/2011/10/av21.jpg"></p>
<p>I would strongly recommend checking out the <a href="https://icollectgadget.wordpress.com/2011/10/09/how-to-choose-cases-for-iphone-4s-and-iphone-4/">original</a> site: <a href="https://icollectgadget.wordpress.com/2011/10/09/how-to-choose-cases-for-iphone-4s-and-iphone-4/">https://icollectgadget.wordpress.com/2011/10/09/how-to-choose-cases-for-iphone-4s-and-iphone-4/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2011/12/27/iphone-4s-and-iphone4-physical-case-differences/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Battery Life: non-optimal</title>
		<link>http://tech.chickenandporn.com/2011/12/20/battery-life-non-optimal/</link>
		<comments>http://tech.chickenandporn.com/2011/12/20/battery-life-non-optimal/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 16:51:09 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1092</guid>
		<description><![CDATA[Teo phones taken from chargers this morning at 8:00: the latest HTC Android, and an iPhone 4, not a 4S. The iOS device has all manner of 3G, wifi, location services activated, the HTC perhaps the same. IPhone is 80% battery, HTC is 57%. Sure, optimal conditions rate the content the other way, but we [...]]]></description>
			<content:encoded><![CDATA[<p>Teo phones taken from chargers this morning at 8:00: the latest HTC Android, and an iPhone 4, not a 4S. The iOS device has all manner of 3G, wifi, location services activated, the HTC perhaps the same.</p>
<p>IPhone is 80% battery, HTC is 57%. Sure, optimal conditions rate the content the other way, but we all know our wifi access points will hit 300 feet / 100meters range in an optimal situation: real life differs, and for my usage, HTC with MAYBE the same services active is burning battery twice as quickly.</p>
<p>Not sure Android is winning yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2011/12/20/battery-life-non-optimal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ConfirmEdit Nailed my WikiMedia</title>
		<link>http://tech.chickenandporn.com/2011/12/14/confirmedit-nailed-my-wikimedia/</link>
		<comments>http://tech.chickenandporn.com/2011/12/14/confirmedit-nailed-my-wikimedia/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 04:48:47 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1663</guid>
		<description><![CDATA[So I suddenly saw this: Fatal error: Call to undefined method WebRequest::getIP() in extensions/ConfirmEdit/Captcha.php on line 202 Apparently, this is due to rev 106097, which replaced wfGetIP() with a wgRequest-&#62;getIP() that doesn&#8217;t exist. Maybe it&#8217;s in Yesterday&#8217;s version of WikiMedia only. My fix: cd extensions/ConfirmEdit svn update -r 106096 I&#8217;m putting this blog entry so [...]]]></description>
			<content:encoded><![CDATA[<p>So I suddenly saw this:</p>
<p><code>Fatal error: Call to undefined method WebRequest::getIP() in extensions/ConfirmEdit/Captcha.php on line 202</code></p>
<p>Apparently, this is due to <a href="http://www.gossamer-threads.com/lists/wiki/mediawiki-cvs/263296">rev 106097</a>, which replaced <code>wfGetIP()</code> with a <code>wgRequest-&gt;getIP()</code> that doesn&#8217;t exist.  Maybe it&#8217;s in Yesterday&#8217;s version of WikiMedia only.  <img src='http://tech.chickenandporn.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>My fix:<br />
<code>cd extensions/ConfirmEdit</code><br />
<code>svn update -r 106096</code></p>
<p>I&#8217;m putting this blog entry so that others may see it and make use of it.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2011/12/14/confirmedit-nailed-my-wikimedia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Avoid MATCHES in Filters</title>
		<link>http://tech.chickenandporn.com/2011/12/07/avoid-matches-in-filters/</link>
		<comments>http://tech.chickenandporn.com/2011/12/07/avoid-matches-in-filters/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 07:30:24 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[VirtualWisdom]]></category>
		<category><![CDATA[fibrechannel]]></category>

		<guid isPermaLink="false">http://www.virtualinstruments.com/sanbestpractices/?p=226</guid>
		<description><![CDATA[Where possible, try to avoid using &#8220;MATCHES&#8221; expressions in Filters that are evaluated often; one suggestion is to move them to UDCs, but it&#8217;s not necessarily a constant rule. I&#8217;ve used a few terms in that one-line suggestion, perhaps I can expand on this a bit. VirtualWisdom lets you make filter expressions such as: Attached [...]]]></description>
			<content:encoded><![CDATA[<p>Where possible, try to avoid using &#8220;MATCHES&#8221; expressions in Filters that are evaluated often; one suggestion is to move them to UDCs, but it&#8217;s not necessarily a constant rule.</p>
<p>I&#8217;ve used a few terms in that one-line suggestion, perhaps I can expand on this a bit.</p>
<p>VirtualWisdom lets you make filter expressions such as:</p>
<p><code>Attached Port Name MATCHES ^OracleServer_*</code></p>
<p>This powerful logic lets you leverage similar names and terms to select similar servers.  Consider selecting similar storage targets or hosts by parts of names, or FCIDs that start or end in the same sequence, or switches using the word &#8220;Core&#8221; or &#8220;Edge&#8221; in its role.  In fact, a simple filter applied to an alarm can apply a more urgent reaction to a port with errors on a core switch rather than an edge, representing different SLAs or criticality.</p>
<p>The example above says &#8220;look for where the Attached Port Name &#8212; the nickname of the device attached to a switch &#8212; starts with &#8216;OracleServer_&#8217; &#8220;.</p>
<p>UDC &#8212; User-Defined Context &#8212; allows a VirtualWisdom Administrator to define an additional metric in terms of filter expressions: when various conditions match, a constant enumeration is used for that port&#8217;s value, or that ITL&#8217;s encoding.  For example, for switches with certain names, a &#8220;DataCenter&#8221; column can identify where that switch is to help forward physical layer errors (such as CRCs) to the right team to more quickly address the issue.  Different storage or servers involved in different business units can be enumerated, and based on that &#8220;BU&#8221; flag or value, different SLAs may be applied, or different teams alerted.  UDCs are quite powerful, and are processed on every summary that gets stored in the database.</p>
<p>UDCs can use the same &#8220;MATCHES&#8221; terms that standard filters can use.</p>
<p>The problem with MATCHES is that it strips away some optimization: the Query Optimizer is a part of a database that cross-references the client&#8217;s query with existing possible indices, even aggregate indices, to reduce the processing load by orders of magnitude.  Any Oracle Admin who has spent time with the &#8220;SQL EXPLAIN&#8221; has seen the difference a simple re-ordering of expressions can make in a complex query to get a more efficient join, or fewer rows evaluated for processing to reach a result.  These indices only match constant expressions with basic comparison operators such as &#8220;==&#8221;, &#8220;!=&#8221;, &#8220;&#8220;, and are completely inefficient for fuzzy or regular-expression matches.</p>
<p>A &#8220;MATCHES&#8221; expression in your filter or UDC can increase the load between a VirtualWisdom Portal Server and the underlying MySQL database engine.  Although Virtual Instruments Engineering has worked to improve the database schema and queries, resulting in dramatic improvements in processing efficiency and maximum ITL and port count of a Portal Server, we the users still have the power to ruin this with a heavy expression or two.</p>
<p>If a filter isn&#8217;t run very often (such as a private dashboard, or a filter used mostly in a daily report), it may not pose very much load on the database; conversely, for a filter that runs often, constantly, the load of a MATCHES expression can repeatedly affect the server for the same data points.  It&#8217;s almost as though a cache of the resulting filter would avoid rerunning the comparison so often.  That is where a UDC can be used.</p>
<p>For filter expressions that run often, consider moving the MATCHES to a UDC calculation, and convert the filter to a comparison against that precise value.  For example, if your filter looks like:</p>
<p><code>Attached Port Name MATCHES BillingServer_* OR Attached Port Name MATCHES CustRecords_*</code></p>
<p>This can be converted to a UDC such as:</p>
<ul>
<li>default value: &#8220;<code>Other</code>&#8220;</li>
<li>value &#8220;<code>Billing</code>&#8221; when &#8220;<code>Attached Port Name  MATCHES  BillingServer_*</code>&#8220;</li>
<li>value &#8220;<code>Records</code>&#8221; when &#8220;<code>Attached Port Name  MATCHES  CustRecord_*</code>&#8220;</li>
</ul>
<p>This sort of UDC means that the two MATCHES expressions will run twice on every Port or Exchange of every summary.  If only Servers are identified by this pattern of nicknames, you could also avoid this sort of evaluation on non-Servers by the following:</p>
<ul>
<li>default value: &#8220;<code>Other</code>&#8220;</li>
<li>value: &#8220;<code>Other</code>&#8221; when &#8220;<code>Attached Device Type != Server</code>&#8220;</li>
<li>value &#8220;<code>Billing</code>&#8221; when &#8220;<code>Attached Port Name  MATCHES  BillingServer_*</code>&#8220;</li>
<li>value &#8220;<code>Records</code>&#8221; when &#8220;<code>Attached Port Name  MATCHES  CustRecord_*</code>&#8220;</li>
</ul>
<p>In general, if a MATCHES is rarely evaluated, then its load &#8212; however heavier &#8212; only affects the server at rare times, so in total has a lower effect.  A 100-fold heavier query run only weekly is not worth swapping for a UDC expression run every five minutes.</p>
<p>Try to consider each case where MATCHES is used for conversion to a UDC expression, and whether even that evaluation can be avoided by a constant expression evaluated before the MATCHES expression.  Your portal server will thank you!</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2011/12/07/avoid-matches-in-filters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data Quality as Meta?</title>
		<link>http://tech.chickenandporn.com/2011/11/28/data-quality-as-meta/</link>
		<comments>http://tech.chickenandporn.com/2011/11/28/data-quality-as-meta/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 19:37:18 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[dataflow]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1063</guid>
		<description><![CDATA[When presenting data, try to include some sense of quality or accuracy, even if it&#8217;s just a flag &#8220;I derived this&#8221; or &#8220;I got this from a very accurate source&#8221; or &#8220;this is a space-filler&#8221;. I wanted to highlight something I saw quite interesting in Axeda Corporation&#8216;s Gateway and Connector technologies: Quality of metrics. Axeda [...]]]></description>
			<content:encoded><![CDATA[<p>When presenting data, try to include some sense of quality or accuracy, even if it&#8217;s just a flag &#8220;I derived this&#8221; or &#8220;I got this from a very accurate source&#8221; or &#8220;this is a space-filler&#8221;.</p>
<p>I wanted to highlight something I saw quite interesting in <a href="http://www.axeda.com/">Axeda Corporation</a>&#8216;s Gateway and Connector technologies: Quality of metrics.  Axeda uses an enumeration of simple qualities (Good, Bad, or Unknown), and this could theoretically be used when choosing which of two conflicting data types to show.</p>
<p>The simple act of collecting and summarizing metrics is not necessarily made easier when the precision meta is tracked, but it can help the end-user make better decisions based on this data: if you see an aberrant data point, do you know it&#8217;s seriously out-of-norm and needs to be acted upon, or is it based perhaps on a ratio with a questionable denominator, and should be taken with a bit of skepticism?</p>
<p>Consider precision, or at least define why it&#8217;s out-of-scope for your work. </p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2011/11/28/data-quality-as-meta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use UDCs to Group ISL Trunks or PortChannels</title>
		<link>http://tech.chickenandporn.com/2011/11/23/use-udcs-to-group-isl-trunks-or-portchannels/</link>
		<comments>http://tech.chickenandporn.com/2011/11/23/use-udcs-to-group-isl-trunks-or-portchannels/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 02:39:58 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[How to]]></category>
		<category><![CDATA[samplecode]]></category>
		<category><![CDATA[UDC]]></category>
		<category><![CDATA[fibrechannel]]></category>

		<guid isPermaLink="false">http://www.virtualinstruments.com/sanbestpractices/?p=199</guid>
		<description><![CDATA[I recently worked with a VirtualWisdom Administrator who wanted to group his ISL port utilization to match his ISL trunks, so we worked out a method of doing this, and I wanted to share it.  As a Field Application Engineer at Virtual Instruments, I tend to focus on these lower-level &#8220;how to&#8221; issues, working with [...]]]></description>
			<content:encoded><![CDATA[<p>I recently worked with a VirtualWisdom Administrator who wanted to group his ISL port utilization to match his ISL trunks, so we worked out a method of doing this, and I wanted to share it.  As a Field Application Engineer at Virtual Instruments, I tend to focus on these lower-level &#8220;how to&#8221; issues, working with users to achieve the data representation they need to make informed decisions in lieu of guesses and rule-of-thumb.</p>
<p>Initially, this administrator and I spoke of &#8220;trunks&#8221;, but between Brocade and Cisco terminology, these mean different things.  The aggregations of ISLs into single logical units are &#8220;Trunking&#8221; in Brocade, but &#8220;Port Channels&#8221; in Cisco.  Trunking E ports in Cisco is a different thing.  I&#8217;ll use &#8220;Aggregate&#8221; as much as possible to refer to this in terminology as vendor-neutral as VirtualWisdom is.</p>
<p>We discussed why this Admin wanted to see more than just &#8220;the top 20&#8243; values on a list of ISLs.  Diving deeper, this was because the top 24 entries are all the same aggregate: essentially, the first entire page is taken up by channels 1 and 2 of a a single aggregate ISL.  He wanted to skip beyond this to see the <em>next</em> 20 or 40 ISLs so he could see which ISLs were getting near 90% utilization.  So&#8230; why not combine these into a single filter or expression that matches the aggregate, and make sure that each aggregate uses only one row of this resulting table?</p>
<p>Additionally, one switch vender implements this aggregation of ISLs as balanced utilization across a collection of links between the same endpoints; conversely, another vendor implements this by overflowing one container, then moving to the next. In essence, an abstract aggregation that is has 60% Utilization may look like a collection of ports or links each with utilization 60%, or might look like 6 out of 10 links with Utilization 100%, and 4 of 10 with 0%.  That&#8217;s very difficult to separate in the data, and can obfuscate which ISL aggregations are approaching maximum desired load.</p>
<p>VirtualWisdom&#8217;s focus is on ports: what type, attached to what, etc.  Using Aliases or Nicknames, we can describe the endpoint, and in VirtualWisdom 3.0.0 and later, those ISL Nicknames are determined for us.  Unfortunately, these all have switch/blade/port, they&#8217;re too detailed.  We cannot use that combination for a  &#8220;group-by&#8221;expression to separate out the ISL aggregate.</p>
<p>VirtualWisdom is &#8220;too detailed&#8221; in this case: it wants to show all the ports individually.</p>
<p>A User-Defined Context, or UDC, is a metric with constant values applied using filter expressions.  We often use these to automatically apply a logical grouping that better represents the real world implementation.  One ISL aggregate between two switches A1 and A2 tends to encompass all E or TE ports on A1 connected to A2, and conversely, all A2 E or TE ports attached to switch A1.  That tends to make this one ISL unique from others.  We create a UDC in the SNMP/Link scope with values based on the &#8220;name of the switch&#8221; in an ISL: for example, in &#8220;SW12A44:3:1 ISL&#8221; as a link name, &#8220;SW12A44&#8243; is the switch name.  ISLs between two switches share the same switch names, but are distinct by this same manner from ISLs to other switches.  All we need is a UDC with values such as &#8220;SW12A44&#8243; where &#8220;Attached Port Name MATCHES ^SW12A44:*&#8221;, and &#8220;SW12B44&#8243; where &#8220;Attached Port Name MATCHES ^SW12B44:*&#8221;.</p>
<p>An example UDC would look like (Using terminology that&#8217;s a bit Brocade-leaning for this UDC because the Administrator favoured Brocade terminology) :</p>
<div id="attachment_209" class="wp-caption alignright" style="width: 740px"><a href="http://www.virtualinstruments.com/sanbestpractices/wp-content/uploads/2011/11/TrunkChannel.png"><img src="http://www.virtualinstruments.com/sanbestpractices/wp-content/uploads/2011/11/TrunkChannel.png" alt="" title="TrunkChannel" width="730" height="354" class="size-full wp-image-209" /></a><p class="wp-caption-text">UDC to Group ISL Trunks</p></div>
<p>As you can see, grouping these ISL connects by &#8220;Probe Name&#8221;, &#8220;Channel&#8221;, and &#8220;TrunkChannel&#8221;, and filtering by &#8220;Attached ISL&#8221; would summarize traffic on all ISLs by the switches each connects, but aggregating bandwidth of all trunk members between each switch.  Grouping by Channel continues to help us keep the directions separate so that a trunk loaded with 95% in one direction and 5% in the other shows &#8220;95%&#8221; and &#8220;5%&#8221; rather than &#8220;50%&#8221;.</p>
<p>You&#8217;ll notice, too, that we&#8217;ve added short-circuit to mark any non-ISL as a &#8220;NoTrunk&#8221;, the same as the default value.  This avoids running the heavier &#8220;MATCHES&#8221; expression to evaluate ports that aren&#8217;t even ISLs.  Your Portal server will thank you.</p>
<p>This logic assumes that all ISLs between two switches are in the same Aggregate; if you have any two switches with more than one distinct aggregation of ISLs, our logic no longer applies.  One of our Analysts has seen ISLs grouped into multiple distinct aggregates even though they&#8217;re between the same switches, but it wasn&#8217;t the case in the discussion sponsoring the work I wanted to share. </p>
<p>Some customers have smaller SANs with a few dozen switches; others exceed 280 switches.  This number of switches, and the various ISL possibilities between these, makes writing and maintaining a UDC with over 200 values very difficult and labour-intensive.  Because the user is effectively transferring config information from one format to another, accuracy risks can enter where users are transposing digits, or delayed in echoing the updated config information, or (more often) is simply not informed that any change needs to be echoed or copied.  These risks are significant detriments to using this method.</p>
<p>To de-risk this implementation and help you try it out, we&#8217;ve created a script to convert a basic list of ISLs with nicknames into a UDC: while the blogging engine doesn&#8217;t let me upload this file, your VI Support and Services teams can help you get &#8220;ISL2TrunkChannelUDC.awk&#8221;, and a version of &#8220;awk&#8221; to run it.  If your report with a Data View of &#8220;Table&#8221; is saved as a CSV with the AttachedPortName in the 4th column, you would run this script as:</p>
<p>      <code>awk  -v COL=4   -f ISL2TrunkChannelUDC.awk   'Table-(summary).csv'   >  ISLAggregation.udc</code></p>
<p>(resulting UDC tested on version 3.0.2 and version 3.1.0 pre-release, incompatible before version 3.0.0)</p>
<p>I hope this helps you keep watch on your ISL utilization, and show the correct justification for adding ISLs to an aggregation, or balancing traffic to another less-used edge switch.</p>
<p>Keep those nicknames updated, and have a great holiday.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2011/11/23/use-udcs-to-group-isl-trunks-or-portchannels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Grab Brocade and Cisco WWN Aliases by CommandLine</title>
		<link>http://tech.chickenandporn.com/2011/11/18/how-to-grab-brocade-and-cisco-wwn-aliases-by-commandline/</link>
		<comments>http://tech.chickenandporn.com/2011/11/18/how-to-grab-brocade-and-cisco-wwn-aliases-by-commandline/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 19:11:22 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1055</guid>
		<description><![CDATA[In my work, I find that customers need to continually grab some updated labels and data, and re-import. This is tedious. Worse, it&#8217;s in the Windows world, so by comparison, scripting is in a toddler world (small, doesn&#8217;t understand, and has tantrums) I end up using something like the following, understanding that pre-sharing a public [...]]]></description>
			<content:encoded><![CDATA[<p>In my work, I find that customers need to continually grab some updated labels and data, and re-import.  This is tedious.</p>
<p>Worse, it&#8217;s in the Windows world, so by comparison, scripting is in a toddler world (small, doesn&#8217;t understand, and has tantrums)</p>
<p>I end up using something like the following, understanding that pre-sharing a public SSH key is safer.</p>
<p><code>@echo off</p>
<p>plink.exe  -l ciscouser1 -pw Secr3tP@ssw0rd  192.168.0.1  "show device-alias database"  &gt;  cisco1.csv<br />
plink.exe  -l ciscouser2 -pw Secr3tP@ssw0rd  192.168.0.2  "show fcalias"  &gt; cisco2.csv<br />
plink.exe  -l brocadeuser1 -pw Secr3tP@ssw0rd  192.168.0.3  "zonecfg"  &gt; brocade1.csv<br />
plink.exe  -l brocadeuser2 -pw Secr3tP@ssw0rd  192.168.0.4  "alishow"  &gt; brocade2.csv</p>
<p>gawk.exe -f <a href="http://r.chickenandporn.com/brocade-alishow2wwncsv.awk">brocade-alishow2wwncsv.awk</a>  cisco1.csv cisco2.csv brocade1.csv brocade2.csv  &gt; nicknames-by-WWN.csv<br />
gawk.exe -f <a href="http://r.chickenandporn.com/unique-nicknames.awk">unique-nicknames.awk</a> nicknames-by-WWN.csv &gt;  E:\VirtualWisdomData\DeviceNickname\nicknames.csv</p>
<p></code></p>
<p>We&#8217;ve edited &#8220;brocade-alishow2wwncsv.awk&#8221; to accommodate broader formats, but I haven&#8217;t been able to check it on a wide range of platforms.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2011/11/18/how-to-grab-brocade-and-cisco-wwn-aliases-by-commandline/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NTP Diagnostic</title>
		<link>http://tech.chickenandporn.com/2011/11/01/ntp-diagnostic/</link>
		<comments>http://tech.chickenandporn.com/2011/11/01/ntp-diagnostic/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 20:40:32 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1040</guid>
		<description><![CDATA[I&#8217;ve been working quite a bit recently with NTP, so I wanted to record some notes. I&#8217;ve found that when the NTP server is fewer than 4x reached, then it will not choose a source. When it chooses a source, a local source might cause it to flag itself as &#8220;unreliable&#8221; (leap flag with a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working quite a bit recently with NTP, so I wanted to record some notes.</p>
<p>I&#8217;ve found that when the NTP server is fewer than 4x reached, then it will not choose a source.  When it chooses a source, a local source might cause it to flag itself as &#8220;unreliable&#8221; (leap flag with a bad result).  That or a poor stratum (less than client&#8217;s fudged 127.127.1.0) is causing a client to ignore a source.</p>
<p>In our case, we saw an SNTP reject on <a href="https://support.ntp.org/bugs/show_bug.cgi?id=585">status == 3</a> (see sntp/main.c::read_packet : &#8220;if (failed || data-&gt;status == 3&#8243;); this &#8220;status&#8221; is actually the <a href="http://www.meinberg.de/english/info/ntp-packet.htm">Leap Indicator</a> being 0%11 ( == 3), which was re-instated in <a href="http://www.rfc-editor.org/rfc/rfc2030.txt">RFC-2030</a> (superseding RFC-958) as an alarm condition (when the last second plus the next second are leap-seconds).</p>
<p>The client is flagging 0&#215;2001 and 0&#215;6001 quite frequently; this is clearly <a href="http://www.ntp.org/ntpfaq/NTP-s-algo-kernel.htm">PLL/FLL</a> changeovers, implying that it often sees a &#8220;weak&#8221; source, perhaps one that jitters too often, and swaps <a href="http://www.google.com/codesearch?q=STA_MODE">mode</a>.</p>
<p>I&#8217;ll add to this over time if I see additional factors.  As always &#8212; ALWAYS &#8212; &#8220;ntpq -c opeers&#8221; (in whatever form is permitted by your OS) is the best first-step, although &#8220;readvar&#8221; is also a good first step.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2011/11/01/ntp-diagnostic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XCode-4.2 gcc cannot find -lcrt1.10.6.0.o</title>
		<link>http://tech.chickenandporn.com/2011/10/28/xcode-4-2-gcc-cannot-find-lcrt1-10-6-0-o/</link>
		<comments>http://tech.chickenandporn.com/2011/10/28/xcode-4-2-gcc-cannot-find-lcrt1-10-6-0-o/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 07:41:26 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1037</guid>
		<description><![CDATA[When continuing to build, using automate and autoconf, I ran into this: checking whether make sets $(MAKE)... yes checking for gcc... gcc checking for C compiler default output file name... configure: error: C compiler cannot create executables See `config.log' for more details. make: *** [config.status] Error 77 The config.log shows: configure:2661: checking for C compiler [...]]]></description>
			<content:encoded><![CDATA[<p>When continuing to build, using automate and autoconf, I ran into this:</p>
<p><code>checking whether make sets $(MAKE)... yes<br />
checking for gcc... gcc<br />
checking for C compiler default output file name...<br />
configure: error: C compiler cannot create executables<br />
See `config.log' for more details.<br />
make: *** [config.status] Error 77<br />
</code></p>
<p>The config.log shows:</p>
<p><code><br />
configure:2661: checking for C compiler default output file name<br />
configure:2688: gcc    conftest.c  &gt;&amp;5<br />
ld: library not found for -lcrt1.10.6.o<br />
collect2: ld returned 1 exit status<br />
</code></p>
<p>There&#8217;s a lot of discussion about this, but basically, Apple didn&#8217;t check their own tool.  Shame on you, Apple.</p>
<p>The fix is simple, embarrassingly so:</p>
<p><code>sudo ln -s /Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.10.6.o /Developer/usr/llvm-gcc-4.2/lib</code></p>
<p>I would expect that this needs to be updated every release.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2011/10/28/xcode-4-2-gcc-cannot-find-lcrt1-10-6-0-o/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XCode-4.2 Breaks Automake Autoconf Autoreconf Aclocal</title>
		<link>http://tech.chickenandporn.com/2011/10/28/xcode-4-2-breaks-automake-autoconf-autoreconf-aclocal/</link>
		<comments>http://tech.chickenandporn.com/2011/10/28/xcode-4-2-breaks-automake-autoconf-autoreconf-aclocal/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 07:20:42 +0000</pubDate>
		<dc:creator>allanc</dc:creator>
				<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://tech.chickenandporn.com/?p=1033</guid>
		<description><![CDATA[Like everyone else, my Xcode install broke the command-line tools I use very often. It seems Apple didn&#8217;t feel like testing their command line stuff at all, since it&#8217;s glaringly obvious that it fails: autoreconf: Entering directory `.' autoreconf: configure.ac: not using Gettext autoreconf: running: aclocal --force autom4te: m4sugar/m4sugar.m4: no such file or directory aclocal: [...]]]></description>
			<content:encoded><![CDATA[<p>Like everyone else, my Xcode install broke the command-line tools I use very often.  It seems Apple didn&#8217;t feel like testing their command line stuff at all, since it&#8217;s glaringly obvious that it fails:</p>
<p><code><br />
autoreconf: Entering directory `.'<br />
autoreconf: configure.ac: not using Gettext<br />
autoreconf: running: aclocal --force<br />
autom4te: m4sugar/m4sugar.m4: no such file or directory<br />
aclocal: /Developer/usr/bin/autom4te failed with exit status: 1<br />
autoreconf: aclocal failed with exit status: 1<br />
</code></p>
<p>I mean &#8220;works&#8221; and &#8220;fails&#8221;, polar opposites, clearly no one checked.  Shame on you, Apple.</p>
<p>The fix was simple:  (Thanks to <a href="http://stackoverflow.com/users/374638/nathan-herring">Nathan Herring&#8217;s</a> consideration of <a href="http://stackoverflow.com/users/27835/adl">ADL&#8217;s</a> post in <a href="http://stackoverflow.com/questions/6033989/aclocal-autoconf-reports-missing-m4sugar-m4-on-mac-os-x/6035895#6035895">Stack Exchange</a> )</p>
<p><code><br />
*** /Developer/usr/share/autoconf/autom4te.cfg	2011-10-28 00:15:15.000000000 -0700<br />
--- /Developer/usr/share/autoconf/autom4te.cfg	2011-10-28 00:14:33.000000000 -0700<br />
***************<br />
*** 99,101 ****<br />
  begin-language: "Autoconf-without-aclocal-m4"<br />
! args: --prepend-include /usr/share/autoconf<br />
  args: --cache=autom4te.cache<br />
--- 99,101 ----<br />
  begin-language: "Autoconf-without-aclocal-m4"<br />
! args: --prepend-include /Developer/usr/share/autoconf<br />
  args: --cache=autom4te.cache<br />
***************<br />
*** 126,128 ****<br />
  begin-language: "Autotest"<br />
! args: --prepend-include /usr/share/autoconf<br />
  args: autotest/autotest.m4f<br />
--- 126,128 ----<br />
  begin-language: "Autotest"<br />
! args: --prepend-include /Developer/usr/share/autoconf<br />
  args: autotest/autotest.m4f<br />
***************<br />
*** 140,142 ****<br />
  begin-language: "M4sh"<br />
! args: --prepend-include /usr/share/autoconf<br />
  args: m4sugar/m4sh.m4f<br />
--- 140,142 ----<br />
  begin-language: "M4sh"<br />
! args: --prepend-include /Developer/usr/share/autoconf<br />
  args: m4sugar/m4sh.m4f<br />
***************<br />
*** 152,154 ****<br />
  begin-language: "M4sugar"<br />
! args: --prepend-include /usr/share/autoconf<br />
  args: m4sugar/m4sugar.m4f<br />
--- 152,154 ----<br />
  begin-language: "M4sugar"<br />
! args: --prepend-include /Developer/usr/share/autoconf<br />
  args: m4sugar/m4sugar.m4f<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://tech.chickenandporn.com/2011/10/28/xcode-4-2-breaks-automake-autoconf-autoreconf-aclocal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

