<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Harbinger&#039;s Hollow</title>
	<atom:link href="http://travelingfrontiers.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://travelingfrontiers.wordpress.com</link>
	<description>Savoring advances in information technology one bouillon cube at a time.</description>
	<lastBuildDate>Mon, 05 Dec 2011 17:37:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='travelingfrontiers.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Harbinger&#039;s Hollow</title>
		<link>http://travelingfrontiers.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://travelingfrontiers.wordpress.com/osd.xml" title="Harbinger&#039;s Hollow" />
	<atom:link rel='hub' href='http://travelingfrontiers.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Python imaplib &#8211; IMAP4 search method parameters</title>
		<link>http://travelingfrontiers.wordpress.com/2010/11/18/python-imaplib-imap4-search-method-parameters/</link>
		<comments>http://travelingfrontiers.wordpress.com/2010/11/18/python-imaplib-imap4-search-method-parameters/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 02:45:08 +0000</pubDate>
		<dc:creator>bpeterso2000</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[IMAP4]]></category>

		<guid isPermaLink="false">http://travelingfrontiers.wordpress.com/?p=1295</guid>
		<description><![CDATA[The imaplib IMAP4 &#8220;search&#8221; method is very powerful because it allows mail to be filtered on the mail server before ever sending the results back across the network.  The following example returns a list of messages numbers for all unread messages newer than the 1st of the year that do not contain &#8220;Smith&#8221; in the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1295&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The imaplib IMAP4 &#8220;search&#8221; method is very powerful because it allows mail to be filtered on the mail server before ever sending the results back across the network.  The following example returns a list of messages numbers for all unread messages newer than the 1st of the year that do not contain &#8220;Smith&#8221; in the &#8220;From&#8221; header:</p>
<p><pre class="brush: python; light: true;">
mbox.search(None, 'UNSEEN SINCE 1-Jan-2010 NOT FROM &quot;Smith&quot;')
</pre></p>
<p>Like many other IMAP4 object methods, you won&#8217;t find the options for this search parameter in the Python imaplib documentation.  This is because those parameters are specified in detail inside RFC3501; The Internet Message Access Protocol &#8211; Version 4rev1 standard.</p>
<p>RFC&#8217;s are great; they&#8217;re very detailed, but they were never designed to be user-friendly how-to&#8217;s.  For example the search string parameter options accepted by IMAP4&#8242;s  SEARCH command are strewn across five (5) different pages in the RFC and are listed in alphabetical order rather than grouped by function.</p>
<p>For future reference I decided to create an <a href="http://www.travelingfrontiers.com/projects/doku.php?id=imapv4_protocol">IMAPv4 SEARCH command reference</a>, i.e. cheat-sheet. I&#8217;ve grouped the commands by:</p>
<ul>
<li>Search for <strong>String in Message</strong> commands</li>
<li>Search for <strong>Message with Flags Set</strong> commands</li>
<li>Search for <strong>Messages with Flags Not Set</strong> commands</li>
<li>Search on <strong>Internal Message Date</strong> commands</li>
<li>Search on <strong>Message Header Date</strong> commands</li>
<li>Search on <strong>Message Size</strong> commands</li>
</ul>
<p><em>Note: If you use Lotus Notes the mailbox must be full-text indexed before the IMAP4 SEARCH command will work.</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/travelingfrontiers.wordpress.com/1295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/travelingfrontiers.wordpress.com/1295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/travelingfrontiers.wordpress.com/1295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/travelingfrontiers.wordpress.com/1295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/travelingfrontiers.wordpress.com/1295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/travelingfrontiers.wordpress.com/1295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/travelingfrontiers.wordpress.com/1295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/travelingfrontiers.wordpress.com/1295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/travelingfrontiers.wordpress.com/1295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/travelingfrontiers.wordpress.com/1295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/travelingfrontiers.wordpress.com/1295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/travelingfrontiers.wordpress.com/1295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/travelingfrontiers.wordpress.com/1295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/travelingfrontiers.wordpress.com/1295/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1295&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://travelingfrontiers.wordpress.com/2010/11/18/python-imaplib-imap4-search-method-parameters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76d421e52db4a6610e57a69f0157b06d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bpeterso2000</media:title>
		</media:content>
	</item>
		<item>
		<title>How-to retrieve Rancid device configs &amp; change-history from CVS</title>
		<link>http://travelingfrontiers.wordpress.com/2010/11/16/how-to-retrieve-rancid-device-configs-change-history-from-cvs/</link>
		<comments>http://travelingfrontiers.wordpress.com/2010/11/16/how-to-retrieve-rancid-device-configs-change-history-from-cvs/#comments</comments>
		<pubDate>Tue, 16 Nov 2010 06:23:10 +0000</pubDate>
		<dc:creator>bpeterso2000</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Rancid]]></category>

		<guid isPermaLink="false">http://travelingfrontiers.wordpress.com/?p=1266</guid>
		<description><![CDATA[OK, you&#8217;ve got Rancid working and you&#8217;re automatically collecting and doing version control on your network device configurations. Great! Except if you&#8217;re a network admin and not a developer, and not a veteran Unix admin, or perhaps just used to new version control systems like Git or Bazaar then you may not be familiar with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1266&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>OK, you&#8217;ve got <a href="http://www.shrubbery.net/rancid/">Rancid</a> working and you&#8217;re automatically collecting and doing version control on your network device configurations.  Great!  Except if you&#8217;re a network admin and not a developer, and not a veteran Unix admin,  or perhaps just used to new version control systems like Git or Bazaar then you may not be familiar with <a href="http://www.nongnu.org/cvs/#TOCdocumentation">CVS</a>.  So you&#8217;ve got the configs via Rancid, but now what do you do with them?  You could use CVSWeb, but what if you&#8217;re a network admin who still prefers the command-line?  I thought I&#8217;d share some really basic CVS commands to get you started.</p>
<h5>The examples below use:</h5>
<ul>
<li>&#8220;<code>Routers</code>&#8221; as the Rancid group-name of interest.  You can replace it with whatever group you want to look at.</li>
<li><code>/var/lib/rancid</code> as the Rancid home directory, default for the Ubuntu Rancid package.  If you are using a different Linux distro, just replace it with the correct home directory.</li>
</ul>
<h4>CVS checkout:</h4>
<p><em>First you need to checkout a local copy, by default it will go in the current directory.</em><br />
<code>sudo cvs -d /var/lib/rancid/CVS co Routers</code></p>
<h4>To get status:</h4>
<p><code>sudo cvs -d /var/lib/rancid/CVS status Routers</code></p>
<h4>To get a revision history:</h4>
<p><code>sudo cvs -d /var/lib/rancid/CVS rlog Routers</code></p>
<h4>To compare versions:</h4>
<p><code>sudo cvs -d /var/lib/rancid/CVS diff -r 1.2 -r 1.3 Routers</code></p>
<h4>To replace a file:</h4>
<p><em>Delete the file and use the following command &#8230;</em><br />
<code>sudo cvs -d /var/lib/rancid/CVS update Routers</code></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/travelingfrontiers.wordpress.com/1266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/travelingfrontiers.wordpress.com/1266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/travelingfrontiers.wordpress.com/1266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/travelingfrontiers.wordpress.com/1266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/travelingfrontiers.wordpress.com/1266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/travelingfrontiers.wordpress.com/1266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/travelingfrontiers.wordpress.com/1266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/travelingfrontiers.wordpress.com/1266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/travelingfrontiers.wordpress.com/1266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/travelingfrontiers.wordpress.com/1266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/travelingfrontiers.wordpress.com/1266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/travelingfrontiers.wordpress.com/1266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/travelingfrontiers.wordpress.com/1266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/travelingfrontiers.wordpress.com/1266/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1266&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://travelingfrontiers.wordpress.com/2010/11/16/how-to-retrieve-rancid-device-configs-change-history-from-cvs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76d421e52db4a6610e57a69f0157b06d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bpeterso2000</media:title>
		</media:content>
	</item>
		<item>
		<title>When a little awk goes a long way</title>
		<link>http://travelingfrontiers.wordpress.com/2010/11/16/when-a-little-awk-goes-a-long-way/</link>
		<comments>http://travelingfrontiers.wordpress.com/2010/11/16/when-a-little-awk-goes-a-long-way/#comments</comments>
		<pubDate>Mon, 15 Nov 2010 20:13:37 +0000</pubDate>
		<dc:creator>bpeterso2000</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[awk]]></category>

		<guid isPermaLink="false">http://travelingfrontiers.wordpress.com/?p=1248</guid>
		<description><![CDATA[There is great post on a blog called Gregable, the post is titled &#8220;Why you should know just a little awk&#8220;.  The comments are also worth reading. I discovered the link from another post titled &#8220;A little awk&#8221; on John Cook&#8217;s blog, The Endeavour. I use a wide variety of Unix text processing tools on a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1248&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There is great post on a blog called <a href="http://gregable.com/">Gregable</a>, the post is titled &#8220;<a href="http://gregable.com/2010/09/why-you-should-know-just-little-awk.html">Why you should know just a little awk</a>&#8220;.  The comments are also worth reading.  I discovered the link from another post titled &#8220;<a href="http://www.johndcook.com/blog/?s=awk">A little awk</a>&#8221; on John Cook&#8217;s blog, <a href="http://www.johndcook.com/blog">The Endeavour</a>.</p>
<p>I use a wide variety of Unix text processing tools on a regular basis, but over time, like many others I started migrating those tasks that required the power of &#8216;awk&#8217; over to another language; in my case that language was Python.  Typically I can write scripts faster in Python and I find that the code is more readable. However, after reading the above post I was reminded that there are some one-liner &#8216;awk&#8217; tasks that are really clean and effective.  Lately I have found myself starting to sparingly use &#8216;awk&#8217; again, here&#8217;s why&#8230;</p>
<h3>When to use &#8216;awk&#8217; instead of &#8216;cut&#8217;</h3>
<ol>
<li>Cut&#8217;s delimiter is a single character, awk&#8217;s delimiter is a regular expression.</li>
<li>Awk allows fields to specified relative to the last field position using &#8216;NF&#8217;.</li>
<li>Cut always displays fields in order of ascending field number, regardless of the order fields are specified in the field list parameter, awk can redisplay the fields in any order that you specify.</li>
</ol>
<ul></ul>
<h5>Examples:</h5>
<p><i>splits fields at multiple characters either a, b, c, d</i><br />
<code>awk -F'[abcd]'</code></p>
<p><i>split at one (1) or more spaces</i><br />
<code>awk -F' +'</code></p>
<p><i>re-order fields</i><br />
<code> awk '{print $3 "\t" $2 "\t" $1}'</code></p>
<p><i>prints last field</i><br />
<code>awk '{print $NF}'</code></p>
<p><i>prints next to last field</i><br />
<code>awk '{print $(NF-1)}'</code></p>
<h3>When to use &#8216;awk&#8217; instead of Python, Perl, etc.?</h3>
<ol>
<li>When you can write the task in one simple, readable line with awk, i.e.
<ol>
<li>Simple reformatting of data.</li>
<li>Simple comparisons on fields.</li>
<li>Rearrange order of fields.</li>
<li>Split on regular expressions, including multiple characters.</li>
<li>Feel free to comment on other reasons.</li>
</ol>
</li>
<li>When the speed of Python, Perl, etc. scripts are too slow for repeated use, this is rare when coded properly.</li>
</ol>
<h3>Watch your quotes with &#8216;awk&#8217; &#8230;</h3>
<h4>Here is the standard unix method of quoting:</h4>
<pre>$ awk '$NF &gt; 385 &amp;&amp; $(NF-1) ~ "^Sh" {print NR "\t" $0}' orders.txt
4       10416   2005-05-10 00:00:00     Shipped 386
6       10418   2005-05-16 00:00:00     Shipped 412

<span style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;line-height:19px;white-space:normal;font-size:13px;font-weight:bold;">Here is the equivalent command using unxutils for Windows:</span></pre>
<p><em>Note the difference in quoting&#8230;</em></p>
<pre>C:\&gt; gawk "$NF&gt;385 &amp;&amp; $(NF-1) ~ \"^Sh\" {print NR \"\t\" $0}" orders.txt
3       10416   2005-05-10 00:00:00     Shipped 386
5       10418   2005-05-16 00:00:00     Shipped 412<span style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;line-height:19px;white-space:normal;font-size:13px;font-weight:bold;">
</span></pre>
<h4>Here is what the above command is doing:</h4>
<ol>
<li> <span style="font-weight:normal;font-size:12px;">Iterates through every line in the file &#8220;orders.txt&#8221;.</span></li>
<li> <span style="font-weight:normal;font-size:12px;">Splits the fields at tab characters (default delimiter).</span></li>
<li> <span style="font-weight:normal;font-size:12px;">Tests if the last field is greater than 385.</span></li>
<li> <span style="font-weight:normal;font-size:12px;">Tests if the next to last field matches the regular expression &#8220;^Sh&#8221;, i.e. begins with the letters &#8220;Sh&#8221;.</span></li>
<li> <span style="font-weight:normal;font-size:12px;">If items 3 &amp; 4 were true then print the line number followed by a tab and then then line text itself.</span></li>
</ol>
<h5>Sample text being processed:</h5>
<pre>$ cat orders.txt
10413   2005-05-05 00:00:00     Shipped 175
10414   2005-05-06 00:00:00     On Hold 362
10415   2005-05-09 00:00:00     Disputed        471
10416   2005-05-10 00:00:00     Shipped 386
10417   2005-05-13 00:00:00     Disputed        141
10418   2005-05-16 00:00:00     Shipped 412
10419   2005-05-17 00:00:00     Shipped 382
10420   2005-05-29 00:00:00     In Process      282</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/travelingfrontiers.wordpress.com/1248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/travelingfrontiers.wordpress.com/1248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/travelingfrontiers.wordpress.com/1248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/travelingfrontiers.wordpress.com/1248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/travelingfrontiers.wordpress.com/1248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/travelingfrontiers.wordpress.com/1248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/travelingfrontiers.wordpress.com/1248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/travelingfrontiers.wordpress.com/1248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/travelingfrontiers.wordpress.com/1248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/travelingfrontiers.wordpress.com/1248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/travelingfrontiers.wordpress.com/1248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/travelingfrontiers.wordpress.com/1248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/travelingfrontiers.wordpress.com/1248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/travelingfrontiers.wordpress.com/1248/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1248&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://travelingfrontiers.wordpress.com/2010/11/16/when-a-little-awk-goes-a-long-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76d421e52db4a6610e57a69f0157b06d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bpeterso2000</media:title>
		</media:content>
	</item>
		<item>
		<title>How-to turn your network diagrams into schematics instead of arts &amp; crafts projects</title>
		<link>http://travelingfrontiers.wordpress.com/2010/11/14/how-to-turn-your-network-diagrams-into-schematics-instead-of-arts-crafts-projects/</link>
		<comments>http://travelingfrontiers.wordpress.com/2010/11/14/how-to-turn-your-network-diagrams-into-schematics-instead-of-arts-crafts-projects/#comments</comments>
		<pubDate>Sun, 14 Nov 2010 03:11:48 +0000</pubDate>
		<dc:creator>bpeterso2000</dc:creator>
				<category><![CDATA[Networking]]></category>

		<guid isPermaLink="false">http://travelingfrontiers.wordpress.com/?p=1231</guid>
		<description><![CDATA[Visio can create awesome looking network diagrams with cool pictures of your network equipment, however those pictures come at a cost; they consume valuable real-estate.  As a result drawings are often cluttered with device specific information scattered all around the outsides of visual representations. In the electrical engineering world we used lots of schematics; schematics [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1231&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Visio can create awesome looking network diagrams with cool pictures of your network equipment, however those pictures come at a cost; they consume valuable real-estate.  As a result drawings are often cluttered with device specific information scattered all around the outsides of visual representations.</p>
<p>In the electrical engineering world we used lots of schematics; schematics didn&#8217;t waste valuable real-estate with actual pictures of the resistors, capacitors, inductors, diodes, transformers, etc.   Why?  Because it was supposed to be a design &amp; troubleshooting tool, not a flipp’n art &amp; crafts project!</p>
<p>As an experiment try using geometric shapes, i.e. triangles, pentagons, octagons, hexagons, etc. to represent network devices.</p>
<ol>
<li>Use a geometric shape that matches the number of interconnecting interfaces, then label each  inside  corner of the shape with interface specific info.</li>
<li>Use the remaining interior of the shape to record device specific information, i.e. hostname, IP/mask, serial number, firmware/software version, etc.</li>
<li>Fill in geometric shapes with a color to identify the device type, i.e. red for firewalls, orange for IPS’s, blue for routers, green for switches, etc.</li>
</ol>
<p>Whether or not you like the idea of using geometric shapes in your network drawings, at least consider putting the emphasis on creating useful schematics for design &amp; troubleshooting; the quality and presentation of the data and the interconnects should always trump the artwork.   Chances are anyone else using your drawings will also appreciate it.</p>
<p><em>Thanks to J. Scott Haugdahl’s for his book <a href="http://books.google.com/books?id=dCcNjsfj-CwC&amp;lpg=PP1&amp;dq=network%20analysis%20and%20troubleshooting&amp;pg=PP1#v=onepage&amp;q&amp;f=false">Network Analysis and Troubleshooting</a>, it was from his book that I first got the idea of using geometric shapes in network drawings.</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/travelingfrontiers.wordpress.com/1231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/travelingfrontiers.wordpress.com/1231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/travelingfrontiers.wordpress.com/1231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/travelingfrontiers.wordpress.com/1231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/travelingfrontiers.wordpress.com/1231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/travelingfrontiers.wordpress.com/1231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/travelingfrontiers.wordpress.com/1231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/travelingfrontiers.wordpress.com/1231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/travelingfrontiers.wordpress.com/1231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/travelingfrontiers.wordpress.com/1231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/travelingfrontiers.wordpress.com/1231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/travelingfrontiers.wordpress.com/1231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/travelingfrontiers.wordpress.com/1231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/travelingfrontiers.wordpress.com/1231/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1231&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://travelingfrontiers.wordpress.com/2010/11/14/how-to-turn-your-network-diagrams-into-schematics-instead-of-arts-crafts-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76d421e52db4a6610e57a69f0157b06d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bpeterso2000</media:title>
		</media:content>
	</item>
		<item>
		<title>Quickly parsing Cobol fixed-length data from Copybook definitions into Python lists</title>
		<link>http://travelingfrontiers.wordpress.com/2010/11/09/quickly-parsing-cobol-fixed-length-data-from-copybook-definitions-into-python-lists/</link>
		<comments>http://travelingfrontiers.wordpress.com/2010/11/09/quickly-parsing-cobol-fixed-length-data-from-copybook-definitions-into-python-lists/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 01:43:03 +0000</pubDate>
		<dc:creator>bpeterso2000</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[COBOL]]></category>
		<category><![CDATA[Copybook]]></category>
		<category><![CDATA[Mainframe]]></category>

		<guid isPermaLink="false">http://travelingfrontiers.wordpress.com/?p=1220</guid>
		<description><![CDATA[Here is a really simple module for converting fixed-length Cobol data into a Python list &#8230; you can find this code and related modules at: https://github.com/bpeterso2000/pycobol https://github.com/bpeterso2000/Harbingers-Hollow You can pipe the results of copybook2csv.py into this module to quickly parse the data into a list, or once you already know the structure you can call [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1220&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Here is a really simple module for converting fixed-length Cobol data into a Python list &#8230; you can find this code and related modules at:</p>
<ul>
<li><a href="https://github.com/bpeterso2000/pycobol">https://github.com/bpeterso2000/pycobol</a></li>
<li><a href="https://github.com/bpeterso2000/Harbingers-Hollow">https://github.com/bpeterso2000/Harbingers-Hollow</a></li>
</ul>
<p>You can pipe the results of copybook2csv.py into this module to quickly parse the data into a list, or once you already know the structure you can call <code>parse_data(struct_fmt_string)</code> directly.  If the copybook field and actual record lengths don&#8217;t match it will still parse the data, but it will display a warning indicating that the data could be truncated or needed to be padded to fit the field definitions.</p>
<p><pre class="brush: python;">
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__version__ = &quot;&quot;&quot;COBOL Fixed-length Data Parser ver 0.2
Note: This version does not work with OCCURS in Copybook files,
but is a lot faster than the varaible length data parser modules.

License: GPLv3, Copyright (C) 2010 Brian Peterson
This is free software.  There is NO warranty; 
not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
&quot;&quot;&quot;
USAGE = &quot;&quot;&quot;copybook2list.py CopybookFile&quot;&quot;&quot;

import load
import csv, struct, sys

def parse_data(struct_fmt, lines):
    try:
      return [ struct.unpack(struct_fmt, i) for i in lines ]
    except struct.error:
        sys.stderr.write('Record layout vs. record size mismatch\n')
        size = sum([ int(i) for i in struct_fmt.split('s')[:-1] ])
        return [ struct.unpack(struct_fmt, i.ljust(size)[:size]) 
          for i in lines ]

def main(args):  
    copybook = load.csv_(args.copybook.readlines(), strip_=True)[1:]
    field_lengths = [ int(i[2]) for i in copybook ]
    struct_fmt = 's'.join([ str(i) for i in field_lengths ]) + 's'
    if args.struct:
        print struct_fmt
    else:
        for record in parse_data(struct_fmt, load.lines(args.datafile)):
            print record

if __name__ == '__main__':
    from cmd_line_args import Args
    args = Args(USAGE, __version__)
    args.allow_stdin()
    args.add_files('datafile', 'copybook')
    args.parser.add_argument('-s', '--struct', action='store_true',
        help='show structure format')
    main(args.parse())
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/travelingfrontiers.wordpress.com/1220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/travelingfrontiers.wordpress.com/1220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/travelingfrontiers.wordpress.com/1220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/travelingfrontiers.wordpress.com/1220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/travelingfrontiers.wordpress.com/1220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/travelingfrontiers.wordpress.com/1220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/travelingfrontiers.wordpress.com/1220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/travelingfrontiers.wordpress.com/1220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/travelingfrontiers.wordpress.com/1220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/travelingfrontiers.wordpress.com/1220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/travelingfrontiers.wordpress.com/1220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/travelingfrontiers.wordpress.com/1220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/travelingfrontiers.wordpress.com/1220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/travelingfrontiers.wordpress.com/1220/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1220&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://travelingfrontiers.wordpress.com/2010/11/09/quickly-parsing-cobol-fixed-length-data-from-copybook-definitions-into-python-lists/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76d421e52db4a6610e57a69f0157b06d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bpeterso2000</media:title>
		</media:content>
	</item>
		<item>
		<title>Simple Python argparse wrapper</title>
		<link>http://travelingfrontiers.wordpress.com/2010/11/03/simple-python-argparse-wrapper/</link>
		<comments>http://travelingfrontiers.wordpress.com/2010/11/03/simple-python-argparse-wrapper/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 01:32:32 +0000</pubDate>
		<dc:creator>bpeterso2000</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Command-line]]></category>

		<guid isPermaLink="false">http://travelingfrontiers.wordpress.com/?p=1197</guid>
		<description><![CDATA[When creating Python modules I frequently turn them into a Unix-style command-line applications. It makes them easy to demo, test, debug, pipe together, parse the input/output with Unix tools, etc. The argparse module available in Python versions 2.7 and later is great for this sort of thing, but I found myself copying and pasting a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1197&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>When creating Python modules I frequently turn them into a Unix-style command-line applications.  It makes them easy to demo, test, debug, pipe together, parse the input/output with Unix tools, etc.  The <a href="http://code.google.com/p/argparse/">argparse</a> module available in Python versions 2.7 and later is great for this sort of thing, but I found myself copying and pasting a lot of code for each new application and thereby breaching the DRY (Don&#8217;t Repeat Yourself) principle.  I used <a href="http://pypi.python.org/pypi/plac">plac</a> for a while, but then when I went to deploy the application to production I needed to switch it over to argparse.  As a result I decided to build my own argparse wrapper:</p>
<ul>
<li>Ability to display multi-line version information strings (argparse ignores line feeds),  used with the <code>--version</code> option.</li>
<li>Ability to include positional filename arguments with very little code.</li>
<li>Ability to allow the last positional filename argument to be replaced with Stdin.</li>
<li>Ability to call common options from a standard command-argument library.</li>
</ul>
<h4>Examples:</h4>
<p><pre class="brush: python;">
#!/usr/bin/python
__version__ = &quot;&quot;&quot;argparse wrapper sample code version 0.1a

This is free software.  There is NO warranty; 
not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
&quot;&quot;&quot;

USAGE = &quot;&quot;&quot;cobol2csv.py [OPTIONS] COPYBOOK [DATAFILE]
COPYBOOK - Filename: output from copybook2csv.py
DATAFILE - Filename: COBOL records, fixed-width text
&quot;&quot;&quot;

import load

def main(args):
    fields = load.csv_(args.copybook, strip_=&quot;right&quot;, prune=True)
    data = load.lines(args.datafile, stop_at_line=1)
    if args.verbose:
        print 'In verbose mode...'
    if args.license:
        print 'GPL (GNU Public License)'

if __name__ == '__main__':
    from cmd_line_args import Args
    args = Args(USAGE, __version__)
    args.allow_stdin()
    args.add_files('copybook', 'datafile')
    args.add_options('debug', 'verbose')
    args.parser.add_argument('--license', action='store_true', 
        help='display license information')
    main(args.parse())
</pre></p>
<h4>Explanation:</h4>
<ul>
<li>Adds 2 positional filename parameters: <code>copybook</code> &amp; <code>datafile</code></li>
<li>The &#8216;datafile&#8217; parameter can be optionally omitted and Standard Input (Stdin) can be used instead of reading from a file.  For example <code>cat file1.txt|./cobol2csv.py layout.csv</code> will work.</li>
<li><code>-d, --debug, -v, --verbose</code> are automatically added from a standard library of command-line options</li>
<li>The argparse object can be accessed directly to support all normal argparse methods &amp; functionallity (i.e. see <code>--license</code> option).</li>
</ul>
<p>Note: The source code below may be dated, to get the most current version visit <a href="http://github.com/bpeterso2000/Harbingers-Hollow">Harbingers-Hollow at Github</a>.</p>
<p><pre class="brush: python;">
import argparse, sys

__all__ = ['Args']

class VersionAction(argparse.Action):
    &quot;&quot;&quot;Overrides argparse_VersionAction(Action) to allow line feeds within
    version display information.&quot;&quot;&quot; 
    def __init__(self, option_strings, version=None, 
         dest=None, default=None, help=None):
         super(VersionAction, self).__init__(option_strings=option_strings,
             dest=dest, default=default, nargs=0, help=help)
         self.version = version

    def __call__(self, parser, namespace, values, option_string=None):
        version = self.version
        if version is None:
            version = parser.version
        print version
        parser.exit()

class Args:
    &quot;&quot;&quot;argparse wrapper&quot;&quot;&quot;
    
    allow_stdin = False
    
    def __init__(self, usage, version):
        self.parser = argparse.ArgumentParser(usage=usage)
        self.parser.version = version
        self.parser.add_argument('-V', '--version', 
            action = VersionAction,
            help='display version information and exit')
    
    def add_files(self, *file_args):
        &quot;&quot;&quot;Add positional filename argurments.  If self.allow_stdin is set
        Example:
            object.add_filenames('config_file', 'data_file'])
            The 1st filename will be saved in a variable called 'config_file'.
            The 2st filename will be saved in a variable called 'data_file'.
        &quot;&quot;&quot;
        if self.allow_stdin:
            for file_arg in file_args[:-1]:
                self.parser.add_argument(file_arg, help='filename... %s' % file_arg)
            self.parser.add_argument(file_args[-1], 
                help='filename... %s' % file_args[-1], nargs='?')
        else:
            for file_arg in file_args:
                self.parser.add_argument(file_arg, help='filename... %s' % file_arg)      
        self.file_args = file_args
  
    def add_filelist(self):
        &quot;&quot;&quot;FUTURE: ability to add a list of files to be processed.  Similar to
        python filelist module, but with ability to include other arguments.
        Support for wildcards.&quot;&quot;&quot;
        pass
        
    def add_options(self, *options):
        &quot;&quot;&quot;Add from a standard library of pre-defined command-line arguments&quot;&quot;&quot;
        for option in options:
            option = option.lower()
            if option == 'debug':
                self.parser.add_argument('-d', '--debug', action='store_true',
                    help='Turn on debug mode.')
            elif option == 'debug_level':
                self.parser.add_argument('-d', '--debug', type=int,
                    help='Set debug level 1-10.')
            elif option == 'verbose':
                self.parser.add_argument('-v', '--verbose', action='store_true',
                    help='Turn on verbose mode.')
            elif option == 'quiet':
                self.parser.add_argument('-q', '--quiet', action='store_true',
                    help='Suppress all output to terminal.')
    
    def allow_stdin(self):
        self.allow_stdin = True

    def parse(self):
        &quot;&quot;&quot;Parse args &amp; use sys.stdin if applicable
        Sets all file arguments to a file read object&quot;&quot;&quot;
        args = self.parser.parse_args()
        if self.file_args:
            if self.allow_stdin:
                if not sys.stdin.isatty():
                    setattr(args, self.file_args[-1], sys.stdin)
                else:
                    self.allow_stdin = False
            last_arg_idx = len(self.file_args) - self.allow_stdin
            for file_arg in self.file_args[:last_arg_idx]:
                try:
                    file_ = open(getattr(args, file_arg))
                except IOError, error_msg:
                    sys.stderr.write('ERROR loading file &quot;%s&quot;.\n%s\n' % 
                        (file_arg, error_msg))
                    sys.exit(1)
                setattr(args, file_arg, file_)        
        return args   
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/travelingfrontiers.wordpress.com/1197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/travelingfrontiers.wordpress.com/1197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/travelingfrontiers.wordpress.com/1197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/travelingfrontiers.wordpress.com/1197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/travelingfrontiers.wordpress.com/1197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/travelingfrontiers.wordpress.com/1197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/travelingfrontiers.wordpress.com/1197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/travelingfrontiers.wordpress.com/1197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/travelingfrontiers.wordpress.com/1197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/travelingfrontiers.wordpress.com/1197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/travelingfrontiers.wordpress.com/1197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/travelingfrontiers.wordpress.com/1197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/travelingfrontiers.wordpress.com/1197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/travelingfrontiers.wordpress.com/1197/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1197&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://travelingfrontiers.wordpress.com/2010/11/03/simple-python-argparse-wrapper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76d421e52db4a6610e57a69f0157b06d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bpeterso2000</media:title>
		</media:content>
	</item>
		<item>
		<title>Eventum email integration &#8211; outgoing, incoming &amp; associated tickets</title>
		<link>http://travelingfrontiers.wordpress.com/2010/10/21/eventum-email-integration-outgoing-incoming-associated-tickets/</link>
		<comments>http://travelingfrontiers.wordpress.com/2010/10/21/eventum-email-integration-outgoing-incoming-associated-tickets/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 00:25:41 +0000</pubDate>
		<dc:creator>bpeterso2000</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Eventum]]></category>
		<category><![CDATA[Helpdesk]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://travelingfrontiers.wordpress.com/?p=1163</guid>
		<description><![CDATA[Outgoing Mail Setup Configure SMTP server settings Select Administration &#8211;&#62; General Setup Enter parameters under SMTP (Outgoing Email) Settings. For more information visit Eventum Outgoing Email Setup Process outgoing e-mail Eventum outgoing e-mail will queue up until the process_mail_queue.php script is run. Setup a cron job for this, i.e. Incoming Mail Setup Setup email account [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1163&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3>Outgoing Mail Setup</h3>
<h4>Configure SMTP server settings</h4>
<ul>
<li>Select <em><code>Administration</code></em> &#8211;&gt; <code>General Setup</code></li>
<li>Enter parameters under <code>SMTP (Outgoing Email) Settings</code>.  For more information visit  <a href="http://forge.mysql.com/wiki/Eventum:General_Setup#SMTP_.28Outgoing_Email.29_Settings">Eventum Outgoing Email Setup</a>
</li>
</ul>
<h4>Process outgoing e-mail</h4>
<p>Eventum outgoing e-mail will queue up until the <code>process_mail_queue.php</code> script is run.  Setup a cron job for this, i.e.<br />
<pre class="brush: bash; light: true;">
* * * * * /usr/bin/php /var/www/eventum/misc/process_mail_queue.php
</pre></p>
<h3>Incoming Mail Setup</h3>
<h4>Setup email account for new tickets</h4>
<p>Setup an account on your email server where new tickets can be sent, i.e. &#8220;Eventum Helpdesk&#8221; eventum@&lt;domain_name&gt;</p>
<h4>Setup the email account in Eventum to download new tickets</h4>
<p>Select <code>Administration</code> &#8211;&gt; <code>Manage Email Accounts</code><br />
Create the account, i.e. Associated Project: &#8220;Incident Tracking&#8221;, Hostname: &#8220;Eventum Helpdesk&#8221;, Type: pop3, Port: 110, Auto-Creation of Issues: Enabled.</p>
<h4>Enable Eventum e-mail integration</h4>
<ul>
<li>Select <code>Administration</code> &#8211;&gt; <code>General Settings</code></li>
<li>Select <code>Yes</code> under <code>Allow Un-Assigned Issues?</code>
<li>Select <code>Enabled</code> under <code>Email Integration Feature</code>.  For more information visit  <a href="http://forge.mysql.com/wiki/Eventum:General_Setup#Email_Integration_Feature">Eventum Email Integration Setup</a></li>
</ul>
<h4>Setup a cron job to download the new ticket emails</h4>
<p><pre class="brush: bash; light: true;">
* * * * * /usr/bin/php -f /var/www/eventum/misc/download_emails.php &quot;Eventum Helpdesk&quot; &lt;email_server_hostname&gt;
</pre></p>
<h3>Setup email account for association with existing tickets (subject-based)</h4>
<p>Setup an account on your email server where email can be sent that is associated with an existing ticket, i.e. &#8220;Eventum Ticket&#8221; eventum.ticket@&lt;domain_name&gt;</p>
<h4>Enable Eventum subject-based e-mail association</h4>
<ul>
<li>Select <code>Administration</code> &#8211;&gt; <code>General Settings</code></li>
<li>Select <code>Enabled</code> under <code>Subject Based Routing</code>.</li>
</ul>
<h4>Setup the email account in Eventum to download associated tickets</h4>
<p>Select <code>Administration</code> &#8211;&gt; <code>Manage Email Accounts</code><br />
Create the account, i.e. Associated Project: &#8220;Incident Tracking&#8221;, Hostname: &#8220;Eventum Ticket&#8221;, Type: pop3, Port: 110, Auto-Creation of Issues: Disabled.</p>
<h4>Setup a cron job to download emails associated with tickets</h4>
<p><pre class="brush: bash; light: true;">
* * * * * /usr/bin/php -f /var/www/eventum/misc/download_emails.php &quot;Eventum Ticket&quot; &lt;email_server_hostname&gt;
</pre></p>
<h3>Additional Eventum E-mail Integration Documentation</h3>
<p>See <a href="http://forge.mysql.com/wiki/Eventum#Documentation">Email Routing Interface</a> for information on:</p>
<ul>
<li>Setting up email routing with Sendmail</li>
<li>Setting up email routing with qmail</li>
<li>Setting up email routing with postfix</li>
<li>Setting up email routing with exim</li>
<li>Setting up email routing with 1 email account for multiple projects</li>
</ul>
<p><i>Special thanks to Jeremy Dye for contributions to this post.</i></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/travelingfrontiers.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/travelingfrontiers.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/travelingfrontiers.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/travelingfrontiers.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/travelingfrontiers.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/travelingfrontiers.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/travelingfrontiers.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/travelingfrontiers.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/travelingfrontiers.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/travelingfrontiers.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/travelingfrontiers.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/travelingfrontiers.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/travelingfrontiers.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/travelingfrontiers.wordpress.com/1163/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1163&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://travelingfrontiers.wordpress.com/2010/10/21/eventum-email-integration-outgoing-incoming-associated-tickets/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76d421e52db4a6610e57a69f0157b06d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bpeterso2000</media:title>
		</media:content>
	</item>
		<item>
		<title>Maximizing Opsview viewport real-estate</title>
		<link>http://travelingfrontiers.wordpress.com/2010/09/16/maximizing-opsview-viewport-grid-real-estate/</link>
		<comments>http://travelingfrontiers.wordpress.com/2010/09/16/maximizing-opsview-viewport-grid-real-estate/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 00:48:14 +0000</pubDate>
		<dc:creator>bpeterso2000</dc:creator>
				<category><![CDATA[Systems Monitoring]]></category>
		<category><![CDATA[Logging]]></category>

		<guid isPermaLink="false">http://travelingfrontiers.wordpress.com/?p=1158</guid>
		<description><![CDATA[In the war room After mounting a large flat screen LCD TV to display real-time Opsview&#8217;s viewport grids &#38; Syslog-ng Log-Reaver translations we came across an interesting challenge &#8211; Opsview page headers, menus &#38; footers gobbled up about half of our viewport screen real-estate, as a result the viewport grid didn’t fit on the TV [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1158&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://travelingfrontiers.files.wordpress.com/2010/09/opsview_viewport_cells.jpg"></a><br />
<h4>In the war room</h4>
<p>After mounting a large flat screen LCD TV to display real-time Opsview&#8217;s viewport grids &amp; Syslog-ng Log-Reaver translations we came across an interesting challenge &#8211; Opsview page headers, menus &amp; footers gobbled up about half of our viewport screen real-estate, as a result the viewport grid didn’t fit on the TV without scrolling. At first we looked into possibly of tossing together some custom code to display stripped down viewports, but we didn’t get very far before Scott Burningham came up with a brilliant idea – why not use Chrome’s AdBlock extension to hide all of Opsview’s header, menu and footer div elements? This solution totally cleaned up the viewport and it works like a charm.</p>
<h4>Opsview viewport grids</h4>
<p>Viewports in Opsview allow us to assign keywords to any combination of monitored services &amp; hosts and then generate labeled cells that represent aggregated views of those statuses. This allows us to display statuses for important business processes/services &amp; applications rather than just individual pieces of I.T. equipment and their hosted-services.</p>
<p>I have been really happy with Opsview&#8217;s viewport grid (cells) option in the 3.7.x release. In previous releases of Opsview the viewport cells only allowed the user to list items vertically and it didn’t take very many items before they would fall off the screen. By combining the viewport grid option with the Chrome AdBlock extension we can display a large array of highly-visible status lights.</p>
<p>Opsview viewports work extremely well once you understand them, but out of the box it’s not particularly intuitive as to how the contact’s authorized keywords configuration settings affect viewport displays. In each contact configuration page there is a section with checkboxes for configuring the user’s authorized keywords, these authorized keywords determine which items/cells will show up by default in the viewport page.  You can manually set the viewport filter to override these defaults and display unauthorized keyword cells, however, each time you leave and return to the viewport page it will revert to hiding all viewport cells not associated with an authorized keyword.</p>
<p>Here is a bare-bones mach-up, the actual production application includes scores of service specific applications that I can&#8217;t show here, but with a little imagination you can envision what it looks populated with all those extra cells nicely represented in one dashboard view.<br />
<img src="http://travelingfrontiers.files.wordpress.com/2010/09/opsview_viewport_cells.jpg?w=600&#038;h=100" alt="" title="Opsview Viewport Cells" width="600" height="100" class="alignleft size-medium wp-image-1190" /></p>
<h4>Syslog-ng Log-Reaver translations</h4>
<p>A really cool log tool, I will be releasing the details of this free open source application in future posts&#8230; stay tuned.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/travelingfrontiers.wordpress.com/1158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/travelingfrontiers.wordpress.com/1158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/travelingfrontiers.wordpress.com/1158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/travelingfrontiers.wordpress.com/1158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/travelingfrontiers.wordpress.com/1158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/travelingfrontiers.wordpress.com/1158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/travelingfrontiers.wordpress.com/1158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/travelingfrontiers.wordpress.com/1158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/travelingfrontiers.wordpress.com/1158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/travelingfrontiers.wordpress.com/1158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/travelingfrontiers.wordpress.com/1158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/travelingfrontiers.wordpress.com/1158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/travelingfrontiers.wordpress.com/1158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/travelingfrontiers.wordpress.com/1158/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1158&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://travelingfrontiers.wordpress.com/2010/09/16/maximizing-opsview-viewport-grid-real-estate/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76d421e52db4a6610e57a69f0157b06d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bpeterso2000</media:title>
		</media:content>

		<media:content url="http://travelingfrontiers.files.wordpress.com/2010/09/opsview_viewport_cells.jpg?w=300" medium="image">
			<media:title type="html">Opsview Viewport Cells</media:title>
		</media:content>
	</item>
		<item>
		<title>How-to add colors to Linux command-line output</title>
		<link>http://travelingfrontiers.wordpress.com/2010/08/22/how-to-add-colors-to-linux-command-line-output/</link>
		<comments>http://travelingfrontiers.wordpress.com/2010/08/22/how-to-add-colors-to-linux-command-line-output/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 02:18:52 +0000</pubDate>
		<dc:creator>bpeterso2000</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://travelingfrontiers.wordpress.com/?p=1104</guid>
		<description><![CDATA[&#092;&#048;33[ Start color scheme x;y;z ANSI color pairs (x;y), see table below TEXT whatever text you want to color &#092;&#048;33[0m Stop color scheme ANSI Color Pairs (x;y) X values (attribute/intensity) Standard 0 Bold 1 Reverse 7 Y values (color) Black 30 Blue 34 Yellow 33 Cyan 36 Green 32 Magenta 35 Red 31 White 37 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1104&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><pre class="brush: bash; light: true;">
&#092;&#048;33[x;ymTEXT&#092;&#048;33[0m
</pre></p>
<table border="1">
<tr>
<td>&#092;&#048;33[</td>
<td>Start color scheme</td>
</tr>
<tr>
<td>x;y;z</td>
<td>ANSI color pairs (x;y), see table below</td>
</tr>
<tr>
<td>TEXT</td>
<td>whatever text you want to color</td>
</tr>
<tr>
<td>&#092;&#048;33[0m</td>
<td>Stop color scheme</td>
</tr>
</table>
<h4>ANSI Color Pairs (x;y)</h4>
<h5>X values (attribute/intensity)</h5>
<table border="1">
<tr>
<td>Standard</td>
<td>0</td>
</tr>
<tr>
<td>Bold</td>
<td>1</td>
</tr>
<tr>
<td>Reverse</td>
<td>7</td>
</tr>
</table>
<h5>Y values (color)</h5>
<table border="1">
<tr>
<td>Black</td>
<td>30</td>
</tr>
<tr>
<td>Blue</td>
<td>34</td>
</tr>
<tr>
<td>Yellow</td>
<td>33</td>
</tr>
<tr>
<td>Cyan</td>
<td>36</td>
</tr>
<tr>
<td>Green</td>
<td>32</td>
</tr>
<tr>
<td>Magenta</td>
<td>35</td>
</tr>
<tr>
<td>Red</td>
<td>31</td>
</tr>
<tr>
<td>White</td>
<td>37</td>
</tr>
</table>
<h4>Additional attributes &amp; background colors</h4>
<p>You may read about ANSI codes that support strike-through, blinking, underline, dimming, background colors, etc.  Those are not universally supported and their results may vary on different ANSI terminals.  The attributes &amp; colors I listed above should work with predictable results on any ANSI terminal.</p>
<h4>Setting ANSI colors using echo</h4>
<p><em>To set a red color prompt…</em><br />
<pre class="brush: bash; light: true;">
echo &quot;^[[7;31mCRITICAL^[[0m&quot;
</pre><br />
<em>^[ is an escape character, use ctrl-v followed by ESC.</em></p>
<h4>Setting ANSI colors using sed</h4>
<p><pre class="brush: bash; light: true;">
sed ''/crit/s//$(printf &quot;&#092;&#048;33[31mCRITICAL&#092;&#048;33[0m&quot;)/g''
</pre></p>
<h4>Setting ANSI colors using Python</h4>
<p><pre class="brush: python; light: true;">
print '&#092;&#048;33[0;31mCRITICAL&#092;&#048;33[0m'
</pre></p>
<h4>Python function to set text colors using color name &amp; bold flag</h4>
<p><pre class="brush: python;">
#!/usr/bin/env python
import sys
COLORS = (
    'BLACK', 'RED', 'GREEN', 'YELLOW',
    'BLUE', 'MAGENTA', 'CYAN', 'WHITE'
)

def color_text(text, color_name, bold=False):
    if color_name in COLORS:
        return '&#092;&#048;33[{0};{1}m{2}&#092;&#048;33[0m'.format(
            int(bold), COLORS.index(color_name) + 30, text)
    sys.stderr.write('ERROR: &quot;{0}&quot; is not a valid color.\n'.format(color_name))
    sys.stderr.write('VALID COLORS: {0}.\n'.format(', '.join(COLORS)))

# TESTS
if __name__ == '__main__':
    for bold in (False, True):
        for color_name in COLORS:
            print color_text('Example of {0}'.format(color_name), color_name, bold)
    print
    # test error handling
    color_text('TEST', 'SILVER')
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/travelingfrontiers.wordpress.com/1104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/travelingfrontiers.wordpress.com/1104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/travelingfrontiers.wordpress.com/1104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/travelingfrontiers.wordpress.com/1104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/travelingfrontiers.wordpress.com/1104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/travelingfrontiers.wordpress.com/1104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/travelingfrontiers.wordpress.com/1104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/travelingfrontiers.wordpress.com/1104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/travelingfrontiers.wordpress.com/1104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/travelingfrontiers.wordpress.com/1104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/travelingfrontiers.wordpress.com/1104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/travelingfrontiers.wordpress.com/1104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/travelingfrontiers.wordpress.com/1104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/travelingfrontiers.wordpress.com/1104/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1104&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://travelingfrontiers.wordpress.com/2010/08/22/how-to-add-colors-to-linux-command-line-output/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
<enclosure url="" length="" type="" />
	
		<media:content url="http://1.gravatar.com/avatar/76d421e52db4a6610e57a69f0157b06d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bpeterso2000</media:title>
		</media:content>
	</item>
		<item>
		<title>How-to restore a MySQL table from a mysqldump file</title>
		<link>http://travelingfrontiers.wordpress.com/2010/08/19/how-to-restore-a-mysql-table-from-a-mysqldump-file/</link>
		<comments>http://travelingfrontiers.wordpress.com/2010/08/19/how-to-restore-a-mysql-table-from-a-mysqldump-file/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 01:26:23 +0000</pubDate>
		<dc:creator>bpeterso2000</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Mysql]]></category>

		<guid isPermaLink="false">http://travelingfrontiers.wordpress.com/?p=1077</guid>
		<description><![CDATA[Here&#8217;s one way to do it&#8230; Note the starting line number Search for &#8220;UNLOCK TABLES&#8221; (type &#8216;/&#8217; in less to search) Note the line number found, this is the ending line number Example: How it works: less -Np regex filename -N shows the line numbers -p opens the specified file at the specified regular expression [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1077&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s one way to do it&#8230;</p>
<p><pre class="brush: bash; light: true;">
$ less -Np &quot;TABLE.*&quot;
</pre></p>
<ul>
<li><em>Note the starting line number</em></li>
<li>Search for &#8220;UNLOCK TABLES&#8221; <em>(type &#8216;/&#8217; in <code>less</code> to search)</em></li>
<li><em>Note the line number found, this is the ending line number</em></li>
</ul>
<p><pre class="brush: bash; light: true;">
$ mysql -u -p &lt; sed -n &lt;starting-line-num&gt;,&lt;ending-line-num&gt;p
</pre></p>
<h4>Example:</h4>
<p><pre class="brush: bash; light: true;">
$ less -Np &quot;TABLE.*user&quot; dumpfile.sql
/UNLOCK TABLES
$ mysql -u jsmith -p logdata &lt; sed -n 1034,1602p dumpfile.sql
</pre></p>
<h4>How it works:</h4>
<pre>
less -Np regex filename
    -N shows the line numbers
    -p opens the specified file at the specified regular expression

sed -n start,stopp
    -n supress automatic printing of pattern space
    start  - line number to start at
    stop - line number to stop at
    p - print
</pre>
<ol>
<li>The <code>mysqldump</code> file will open up at the first line that starts with the word TABLE and contains your database table name. This shows the starting line number.</li>
<li>Since every <code>mysqldump</code> TABLE section ends with an UNLOCK TABLES line, search for it to determine the ending line number.</li>
<li>Use <code>sed</code> to extract the desired line numbers from the <code>mysqldump</code> file.</li>
<li>Redirect the output of sed to the input of MySQL to and to restore the database table, i.e. DROP, CREATE and populate.</li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/travelingfrontiers.wordpress.com/1077/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/travelingfrontiers.wordpress.com/1077/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/travelingfrontiers.wordpress.com/1077/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/travelingfrontiers.wordpress.com/1077/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/travelingfrontiers.wordpress.com/1077/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/travelingfrontiers.wordpress.com/1077/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/travelingfrontiers.wordpress.com/1077/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/travelingfrontiers.wordpress.com/1077/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/travelingfrontiers.wordpress.com/1077/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/travelingfrontiers.wordpress.com/1077/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/travelingfrontiers.wordpress.com/1077/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/travelingfrontiers.wordpress.com/1077/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/travelingfrontiers.wordpress.com/1077/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/travelingfrontiers.wordpress.com/1077/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=travelingfrontiers.wordpress.com&amp;blog=13076124&amp;post=1077&amp;subd=travelingfrontiers&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://travelingfrontiers.wordpress.com/2010/08/19/how-to-restore-a-mysql-table-from-a-mysqldump-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76d421e52db4a6610e57a69f0157b06d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bpeterso2000</media:title>
		</media:content>
	</item>
	</channel>
</rss>
