<?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>LiveAverage &#187; Features</title>
	<atom:link href="http://liveaverage.com/category/features/feed/" rel="self" type="application/rss+xml" />
	<link>http://liveaverage.com</link>
	<description>I can&#039;t afford to live any other way.</description>
	<lastBuildDate>Tue, 08 May 2012 21:40:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Nagios Plugin: Windows Server DHCP Scopes Usage Monitoring</title>
		<link>http://liveaverage.com/news/nagios-plugin-windows-server-dhcp-scopes-usage-monitoring/</link>
		<comments>http://liveaverage.com/news/nagios-plugin-windows-server-dhcp-scopes-usage-monitoring/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 16:03:59 +0000</pubDate>
		<dc:creator>JR</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Infrastructure Management]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://liveaverage.com/?p=460</guid>
		<description><![CDATA[<p>I&#8217;ve stumbled on a <a title="Link to original check_dhcp_pool plug-in from Lars Michelsen" href="http://nagios.larsmichelsen.com/check_dhcp_pool/" target="_blank">useful plug-in from Lars Michelsen</a> that easily monitors a single Windows Server DHCP scope for usage using SNMPv2, but found this fell short of what I needed for monitoring several scopes at once. I&#8217;ve modified Lars&#8217; original plugin/script to accommodate all [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve stumbled on a <a title="Link to original check_dhcp_pool plug-in from Lars Michelsen" href="http://nagios.larsmichelsen.com/check_dhcp_pool/" target="_blank">useful plug-in from Lars Michelsen</a> that easily monitors a single Windows Server DHCP scope for usage using SNMPv2, but found this fell short of what I needed for monitoring several scopes at once. I&#8217;ve modified Lars&#8217; original plugin/script to accommodate all available DHCP scopes on your monitored Windows server. You no longer need to add separate service definitions to monitor all available scopes. It&#8217;s worth noting a couple of important details:</p>
<ul>
<li>Nagios 3.x or above is <strong>required</strong> for the multi-line output generated by this command.</li>
<li>This service check will alarm if<strong> any</strong> scope is nearing the critical or warning threshold(s) specified command call.</li>
<ul>
<li>If you require per-scope or per-pool alarm configuration, you should use the original plugin created by Lars Michelsen.</li>
</ul>
<li>Performance Data has been commented out, but is available if you&#8217;d like to add it.</li>
<li>Scopes that exist but are not in use (e.g. scopes exclusively used for reservations) are left out of this check. There is a conditional statement commented below that can report these scopes as being available, but with zero (0) free or used addresses, equaling zero (0) MAX available amount of addresses. This information isn&#8217;t really relevant, so I omitted it from being returned; however,  there is a count returned of configured and shown scopes (located at the bottom).</li>
</ul>
<p>Feel free to use, reuse, or modify the script the suit your needs. There are other, similar plugins to accomplish the same thing, but most of these rely on NRPE, NSClient++, and netsh.</p>
<pre class="brush: bash; title: ; notranslate">
#! /bin/bash
# ##############################################################################
# check_dhcp_all_pools.sh - Nagios plugin
#
# This script querys a MS Windows DHCP-Server via SNMP v2 to fetch information about ALL available DHCP-Pools.
#
# Copyright (C) 2006, 2007 Lars Michelsen &lt;lars@vertical-visions.de&gt;,
# Modified 2012 by JRM
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
#
# GNU General Public License: http://www.gnu.org/licenses/gpl-2.0.txt
#
# Report bugs to: lars@vertical-visions.de
#
# 2006-07-05 Version 0.2
# 2007-10-27 Version 0.3
#
# ##############################################################################

if [ $# -lt 2 ]; then
echo &quot;check_dhcp_all_pools&quot;
echo &quot;Usage: $0 &lt;host&gt; &lt;community&gt; [&lt;warn=10&gt;] [&lt;crit=5&gt;]&quot;
exit 3
fi

IP=&quot;$1&quot;
COMMUNITY=&quot;$2&quot;
WARN=&quot;$4&quot;
CRIT=&quot;$5&quot;
RET=0
RETW=0
RETC=0
STAT=( )
i=0

if [ ${#WARN} -lt 1 ]
then
WARN=10
fi

if [ ${#CRIT} -lt 1 ]
then
CRIT=5
fi

#Get the list of all scopes/subnets from the server:
TEMP=($( snmpwalk -c $COMMUNITY $IP .1.3.6.1.4.1.311.1.3.2.1.1.1 | cut -d &quot; &quot; -f4 ))

#Traverse array and get usage information per scope:
for i  in ${!TEMP[*]};do

POOL=${TEMP[$i]}

FREEOID=&quot;.1.3.6.1.4.1.311.1.3.2.1.1.3.$POOL&quot;
USEDOID=&quot;.1.3.6.1.4.1.311.1.3.2.1.1.2.$POOL&quot;

SNMP_RESULT=`snmpget -v 2c -c $COMMUNITY $IP $FREEOID`
FREE=`echo $SNMP_RESULT|cut -d &quot; &quot; -f4`

SNMP_RESULT=`snmpget -v 2c -c $COMMUNITY $IP $USEDOID`
USED=`echo $SNMP_RESULT|cut -d &quot; &quot; -f4`

MAX=`echo &quot;$FREE+$USED&quot; |bc`

if [ &quot;$MAX&quot; -ne 0 ]; then

PERCFREE=`echo &quot;$FREE*100/$MAX&quot; |bc`
PERCUSED=`echo &quot;$USED*100/$MAX&quot; |bc`

#DEBUG: echo &quot;FREE: $FREE USED: $USED MAX: $MAX PERC: $PERCFREE,$PERCUSED&quot;

if [ &quot;$FREE&quot; -le &quot;$WARN&quot; -a &quot;$FREE&quot; -gt &quot;$CRIT&quot; ]; then
STAT=( &quot;${STAT[@]}&quot; &quot;Warning:\t$POOL - $PERCFREE free&quot; )
RETW+=1
elif [ &quot;$FREE&quot; -le &quot;$CRIT&quot; ]; then
STAT=( &quot;${STAT[@]}&quot; &quot;Critical:\t$POOL - $PERCFREE free&quot; )
RETC+=2
else
STAT=( &quot;${STAT[@]}&quot; &quot;OK:\t$POOL\t$PERCUSED% used&quot; )
RET+=0
fi

#elif [ &quot;$MAX&quot; -eq 0 ]; then

#Debug for detecting 100% excluded ranges (reservations only):
#STAT=( &quot;${STAT[@]}&quot; &quot;OK:\t$POOL\tNothing used, could be excluded&quot; )

fi

# Performance-Data
#echo &quot; | 'Scope Usage'=$PERCUSED%;$WARN;$CRIT;0;$MAX&quot;
#echo -e &quot; | $POOL OK - Usage: $PERCUSED% ($FREE Addresses of $MAX in pool free) \n&quot;

done

#Evaluate return code:

if [ &quot;$RET&quot; -eq 0 ]; then
RET=0
echo -e &quot;OK:\tAll scopes fine&quot;
elif [ &quot;$RETC&quot; -gt 0 ]; then
RET=2
echo  -e &quot;Critical: One or more scopes is nearing capacity&quot;
elif [ &quot;$RETW&quot; -gt 0 ]; then
RET=1
echo -e &quot;Warning: One or more scopes is nearing capacity&quot;
fi

###### Second loop for long service output:

for I in ${!STAT[*]};do
echo -e ${STAT[$I]}
done

#Echo the total amount of scopes available vs those shown:
echo -e &quot;\nShowing ${#STAT[@]} of ${#TEMP[@]} configured scopes&quot;

exit $RET
</pre>
]]></content:encoded>
			<wfw:commentRss>http://liveaverage.com/news/nagios-plugin-windows-server-dhcp-scopes-usage-monitoring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Managing backup retention&#8230; with one line of Powershell</title>
		<link>http://liveaverage.com/features/coding/managing-backup-retention-with-one-line-of-powershell/</link>
		<comments>http://liveaverage.com/features/coding/managing-backup-retention-with-one-line-of-powershell/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 18:09:08 +0000</pubDate>
		<dc:creator>JR</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://liveaverage.com/?p=401</guid>
		<description><![CDATA[<p>Ok, I used four lines, but my needs for retention might be a bit more complex than most. I also spaced each pipeline command, so it looks longer than it should, but readability is important. Additionally, there&#8217;s a good half-page of comments in the script than can safely be ignored, unless you want to know [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, I used four lines, but my needs for retention might be a bit more complex than most. I also spaced each pipeline command, so it looks longer than it should, but readability is important. Additionally, there&#8217;s a good half-page of comments in the script than can safely be ignored, unless you <em>want</em> to know what was going through my mind. Most of these related directly to my desired retention periods.</p>
<p>For testing purposes, the last two &#8220;lines&#8221; only print out the listing of files that would be deleted.</p>
<p><span id="more-401"></span></p>
<pre class="brush: bash; title: ; notranslate">
Param ($backupDir)

######
# Handle 30-day backup recyclables first (no directory recursion since each backup is in its own directory)
# The current backup schedule performs weekly configuration backups with 1-month retention.
######

Get-ChildItem &quot;$backupDir\backup_data&quot; | `
`
Where-Object {(($_.FullName -match &quot;configuration_isxpr01_&quot;) -and ( $_.CreationTime -lt ((Get-Date).AddMonths(-1)) ) )} | `
`
ForEach-Object {`
                    Out-File -filepath &quot;$backupDir\log&quot; -inputobject $((Get-Date -format g) + &quot;Removing &quot; + $_.FullName + &quot; from &quot; + $_.CreationTime) -append`
                    Remove-Item $_.FullName -recurse}

######
# Handle 7-day backup recyclables next (no directory recursion since each backup is in its own directory)
# The current backup schedule performs weekly configuration backups with 1-week retention.
# No &quot;overwrite option available, so this script manages removal
######

Get-ChildItem &quot;$backupDir\backup_data&quot; | `
`
Where-Object {(($_.FullName -match &quot;backup_isxpr01_&quot;) -and ( $_.CreationTime -lt ((Get-Date).AddDays(-7)) ) )} | `
`
ForEach-Object {(Remove-Item $_.FullName -recurse)}

######
# Handle daily trend data recyclables next (use recursion parameter).
# The current daily trend export schedule requires 1-month retention for 24-hr trend data.
######

Get-ChildItem -include *.zip -recurse -path &quot;$backupDir\trend_data_export&quot; | `
`
Where-Object {(($_.FullName -match &quot;24-hr&quot;) -and ( $_.CreationTime -lt ((Get-Date).AddMonths(-1)) ) )} | `
`
ForEach-Object {($_.FullName)}

######
# Handle monthly trend data recyclables next (use recursion parameter).
# The current monthly trend export schedule requires 5-year retention for 30-day trend data.
######

Get-ChildItem -include *.zip -recurse -path &quot;$backupDir\trend_data_export&quot; | `
`
Where-Object {(($_.FullName -match &quot;30-day&quot;) -and ( $_.CreationTime -lt ((Get-Date).AddYears(-5)) ) )} | `
`
ForEach-Object {($_.FullName)}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://liveaverage.com/features/coding/managing-backup-retention-with-one-line-of-powershell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenFiler errors that only I seemed to experience&#8230;</title>
		<link>http://liveaverage.com/features/coding/openfiler-errors-that-only-i-seemed-to-experience/</link>
		<comments>http://liveaverage.com/features/coding/openfiler-errors-that-only-i-seemed-to-experience/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 16:51:03 +0000</pubDate>
		<dc:creator>JR</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Infrastructure Management]]></category>

		<guid isPermaLink="false">http://liveaverage.com/?p=378</guid>
		<description><![CDATA[<p>Well, I&#8217;ve finally deployed some production Openfiler ESA 2.99.1 machines as home-brew iSCSI boxes, primarily used for backups or low-stress virtual storage. Yes, they&#8217;re great &#8212; my basic write speeds on a Core 2 Duo box (recycled Dell Precision 390 workstation with 2GB of RAM and a single 1TB drive *no* RAID):</p> <p>I&#8217;m pretty happy with [...]]]></description>
			<content:encoded><![CDATA[<p>Well, I&#8217;ve finally deployed some production Openfiler ESA 2.99.1 machines as home-brew iSCSI boxes, primarily used for backups or low-stress virtual storage. Yes, they&#8217;re great &#8212; my basic write speeds on a Core 2 Duo box (recycled Dell Precision 390 workstation with 2GB of RAM and a single 1TB drive *no* RAID):</p>
<pre class="brush: bash; title: ; notranslate">
administrator@mail:/backup-iscsi$ sudo dd if=/dev/zero of=garbage bs=131072 count=20000
20000+0 records in
20000+0 records out
2621440000 bytes (2.6 GB) copied, 40.8493 s, 64.2 MB/s
</pre>
<p>I&#8217;m pretty happy with that. What I&#8217;m not please with is a 56MB log (/var/log/secure) filled with strange messages:</p>
<pre class="brush: bash; title: ; notranslate">Jul 26 12:25:46 e0-002 sudo: openfiler : TTY=unknown ; PWD=/opt/openfiler/var/www/htdocs ; USER=root ; COMMAND=/usr/bin/uptime
Jul 26 12:25:46 e0-002 sudo: PAM unable to dlopen(/lib64/security/pam_gnome_keyring.so)
Jul 26 12:25:46 e0-002 sudo: PAM [error: /lib64/security/pam_gnome_keyring.so: cannot open shared object file: No such file or directory]
Jul 26 12:25:46 e0-002 sudo: PAM adding faulty module: /lib64/security/pam_gnome_keyring.so</pre>
<p>Okay, so the first message isn&#8217;t strange. In fact, it&#8217;s normal. But I couldn&#8217;t figure out why a non-GUI (yes, it has a web interface, but no default window manager) distro was trying to load the Gnome keyring shared object. I still don&#8217;t know why. What I do know is how to get rid of this message:</p>
<ol>
<li>Verify which PAM files reference this shared object:</li>
<ol>
<li>
<pre class="brush: bash; title: ; notranslate">[root@e0-002 pam.d]# cd /etc/pam.d/
[root@e0-002 pam.d]# grep -i -n 'pam_gnome_keyring.so' *
system-auth:5:# FL: Have (patched) pam_gnome_keyring.so grab the password before pam_unix.so
system-auth:6:auth        optional      pam_gnome_keyring.so
system-auth:16:password    optional      pam_gnome_keyring.so</pre>
</li>
</ol>
<li>In this instance, the &#8216;system-auth&#8217; file contained these troublesome pam_gnome_keyring.so entries.</li>
<li>Fire-up your favorite text editor and comment those lines.</li>
<li>Reboot &amp; enjoy a log without an absurd amount of irrelevant errors.</li>
</ol>
<div><a title="The original thread mentioning the problem." href="https://lists.openfiler.com/viewtopic.php?id=6228" target="_blank">I found this referenced <em>once</em> on the OpenFiler forums</a>, but no answer or explanation. I hope this helps someone else that might experience a similar problem.</div>
<div>I&#8217;ll also be doing a write-up related to OpenFiler volume backups with LVM snapshots.</div>
]]></content:encoded>
			<wfw:commentRss>http://liveaverage.com/features/coding/openfiler-errors-that-only-i-seemed-to-experience/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How-to: GSX650F &amp; Vortex 41mm Clip-ons</title>
		<link>http://liveaverage.com/features/living/how-to-gsx650f-vortex-41mm-clip-ons/</link>
		<comments>http://liveaverage.com/features/living/how-to-gsx650f-vortex-41mm-clip-ons/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 21:00:46 +0000</pubDate>
		<dc:creator>JR</dc:creator>
				<category><![CDATA[Living]]></category>

		<guid isPermaLink="false">http://liveaverage.com/?p=84</guid>
		<description><![CDATA[<p>Author Note: I wrote this article when I still owned my GSX650F. I&#8217;ve since traded-up for a 2007 GSXR600 (and I couldn&#8217;t be happier). I might have some images to post with this tutorial, but I&#8217;ll post them when/if I can find them. Hopefully the write-up is enough to help&#8230; Good luck, modders.</p> <p><a href="http://liveaverage.com/wp-content/themes/mimbo2.2/images/08VortexClipOnsLG1.jpg"></a>Prior [...]]]></description>
			<content:encoded><![CDATA[<p><em>Author Note: I wrote this article when I still </em><em>owned my GSX650F. I&#8217;ve since traded-up for a 2007 GSXR600 (and I couldn&#8217;t be happier). I might have some images to post with this tutorial, but I&#8217;ll post them when/if I can find them. Hopefully the write-up is enough to help&#8230; Good luck, modders.</em></p>
<p><a href="http://liveaverage.com/wp-content/themes/mimbo2.2/images/08VortexClipOnsLG1.jpg"><img class="alignleft size-thumbnail wp-image-317" title="Vortex 41MM Clip-ons" src="http://liveaverage.com/wp-content/themes/mimbo2.2/images/08VortexClipOnsLG1-150x150.jpg" alt="Vortex 41MM Clip-ons" width="150" height="150" /></a>Prior to my experiences with the Suzuki GSX650F, I was the semi-proud owner of a Hyosung GT250R. I loved the body styling, aggressive riding position, cheap price ($3300 OTD) and gas mileage, but I realized something more powerful was necessary for longer trips (and riding 2-up with the Mrs.).  This brought me to my evolving 2008 GSX650F, which has the power, speed, and styling qualities that I was looking for, but still lacked the aggressive riding position I had with the Hyosung.</p>
<p>Vortex Racing had the answer to my commuter bar problem: 41mm clip-ons. They&#8217;re available in three different colors: silver (aluminum), black, and gold. Additionally, Vortex manufactures after-market bar ends (weighted or unweighted) for their clip-ons &#8212; which are certainly necessary after losing the dampers. The install took less than 45 minutes, but I&#8217;ll admit I made the mistake of loosening one of the fork bolts <em>too</em> much while lowering the front-end (required for installation on the GSX650F). This inevitably resulted in a lopsided front after the left fork pushed right through the triple-tree clamp. An extra 10 minutes of jacking the bike up and re-adjustment was required. Here&#8217;s a concise set of steps used to complete the project:</p>
<p><span id="more-84"></span></p>
<blockquote><p>Materials:</p>
<ul>
<li>(1) Pair of Vortex 41mm Clip-on handle bars (clamps and bars)</li>
<li>(1) Pair of new grips (optional)</li>
<li>(1) Pair of bar-end sliders, preferably weighted (optional)</li>
<li>Set of allen keys/wrenches</li>
<li>Philips-head screwdriver</li>
<li>Rubber mallet or lightweight hammer wrapped in cloth</li>
<li>Patience, maybe some coffee</li>
</ul>
</blockquote>
<li>Remove the control housings, levers, and grips from the handlebars. If one or both of your grips happen to be glued/adhered to the handlebars, you may want to remove all the control housings &amp; levers first, then cut the grip(s) off with shears after the bars are away from the bike. To access the (2) phillips-head screws holding the switch housings on the bars, it may be necessary to first loosen the handlebar clamps and rotate the bar toward the front of the bike.  The levers should have two-piece clamps holding them to the bars.** Be careful when separating the throttle control housing. It may be best to loosen the housing and slide the throttle control assembly off the bar since the plastic throttle sleeve and throttle control housing are connected with cabling.</li>
<li>When all the controls and levers are safely away from the bars (and bike body), loosen and remove the handlebar clamps using the appropriate allen wrench. Set the bars aside and re-tighten the clamps back to the triple-tree, or you may want to completely remove the clamp assembly. Your choice.</li>
<li>Next you need to very carefully (and I can&#8217;t stress this enough &#8212; <em>very carefully</em>) loosen the (3) fork bolts [ (1) on the triple-tree clamp, (2) above the front fender] on <em>one </em>side of the bike. It is strongly recommended to only perform this procedure on one side of the bike at a time to prevent your entire front-end from sliding down the forks (like mine!). You&#8217;ll want to leave the three bolts fairly snug, then use the rubber mallet to hammer on the triple-tree clamp until the fork begins to push through the top of the triple-tree. Keep your clip-ons nearby to measure how much of the fork you&#8217;ll require above the triple-tree.</li>
<li>Once the clip-on clamp gap is filled from top-to-bottom with the fork, re-tighten the (3) fork bolts to prevent the front-end from sliding. Leave the clip-on clamp loose for later adjustments (trust me, you&#8217;ll be making plenty of them).</li>
<li>Repeat these same steps for the other side of the bike, making certain you don&#8217;t loosen the (3) fork bolts <em>too</em> much. Again, don&#8217;t over-tighten the clip-on hardware until all controls are remounted and all adjustments are made. Go ahead and tighten the the bar clamps, making sure the bars are positioned the furthest distance from the bike/tank (the black bar end near the dash should almost be under the bar clamp) .</li>
<li>Next, begin remounting your control housings and levers onto the new clip-on bars. Don&#8217;t tighten hardware completely. Instead, tighten just enough to wiggle or move the housings/levers across the bars for adjustments.</li>
<li> Now here comes the tedious step: adjustment. If you have a motorcycle jack or center stand (I don&#8217;t), put the bike on it if you haven&#8217;t already. You need to find the sweet-spot for clip-on positioning&#8230; You should be able to cut hard-left or hard-right without pinching your hands between the bars and the tank <em>and</em> without hitting the control housings or levers on the bike&#8217;s dash. Yes, it can be done. I was more worried about my hands getting pinched between the bars and tank, so my controls are <em>very</em> close  (millimeters) to the dash, but they <em>do </em>clear them without rubbing or scraping.
<ol>
<li>If you don&#8217;t have a jack, you&#8217;ll be doing a lot of tightening/loosening and turning to test for clearance. The only constant is the <em>bar</em> positioning on the clip-on clamps. The black, plastic bar end near the center of the dash should be as close as possible to the clamp (without actually clamping down on it).</li>
<li>Adjust the angle of the clip-ons by rotating them around the forks.</li>
<li>Adjust the x-axis positioning of the controls by sliding them back and forth across the clip-on bars. Any scratches on the bars can generally be polished out with Mother&#8217;s Aluminum polish.<em>NOTE: you may need to mount the plastic throttle assembly a bit more inside if you&#8217;re installing bar-ends (weighted or unweighted). Otherwise, the grips (once installed) may rub on the inside of the bar-end, causing the throttle to stick (uh&#8230; not good). </em><em> </em></li>
<li>Adjust the y-axis positioning of the controls by rotating them up and down on the bars.</li>
<li>Keep turning the bars left and right to test for clearance, repeat as needed.<em>** NOTE: It is extremely helpful to sit on the bike while making some of these adjustments.  It may also help to temporarily remove your cables and tubing from the cable management arm(s) to permit a more free range of movement while adjusting. Once the positioning is correct, be sure to test for adequate cable/tubing slack and safe movement when turning hard-left or hard-right.<br />
</em></li>
</ol>
</li>
<li>Whenever your adjustment are complete, it&#8217;s time to tighten the control housings and clip-on clamps. You may need a socket wrench with a bit adapter to tighten some of the control housing(s) due to their awkward position.</li>
<li>Lastly, install your grips (pre-existing or new) according to their instruction guide (i.e. using adhesive, soapy water, etc.). Depending on the type and style of grips, and whether or not you purchased bar-ends, you may need to cut the end-cap on the grips. I used fairly generic Pro-Grip grips that required me to cut the ends off so I could mount my Vortex bar-ends.</li>
<p>As mentioned elsewhere, make sure to take it slow and easy on your first ride. Turning is <em>much </em>easier (and quicker) with the new bars. Also be sure to carry a set of allen keys for any adjustments (or clamp tightening) while out on your first ride.</p>
<p>Sources:</p>
<p>http://www.gsx650f.biz/lowering-t915.html?highlight=triple</p>
<p>http://www.squidbusters.com/sb/showthread.php?threadid=682</p>
]]></content:encoded>
			<wfw:commentRss>http://liveaverage.com/features/living/how-to-gsx650f-vortex-41mm-clip-ons/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Add &#8216;Submitted Tickets&#8217; Listing Page for Joomla! RSTickets</title>
		<link>http://liveaverage.com/features/coding/add-submitted-tickets-listing-page-for-joomla-rstickets/</link>
		<comments>http://liveaverage.com/features/coding/add-submitted-tickets-listing-page-for-joomla-rstickets/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 17:15:21 +0000</pubDate>
		<dc:creator>JR</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://liveaverage.com/?p=202</guid>
		<description><![CDATA[<p></p> <p>If you haven&#8217;t heard, <a title="Check out the RSTickets! extension from RSJoomla!" href="http://www.rsjoomla.com/joomla-components/rstickets.html" target="_blank">RSTickets!</a> is an advanced Joomla! Help Desk ticketing system that allows you (or a team of yous) to manage and keep track of your clients&#8217; issues. It&#8217;s actually one of the few effective, useful Help Desk systems available for the Joomla! [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="Joomla!" src="http://cdn.joomla.org/images/logo.png" alt="" width="235" height="46" /></p>
<p>If you haven&#8217;t heard, <a title="Check out the RSTickets! extension from RSJoomla!" href="http://www.rsjoomla.com/joomla-components/rstickets.html" target="_blank">RSTickets!</a> is an advanced Joomla! Help Desk ticketing system that allows you (or a team of yous) to manage and keep track of your clients&#8217; issues. It&#8217;s actually one of the few effective, useful Help Desk systems available for the Joomla! 1.5+ framework that I would personally recommend. Unfortunately, it&#8217;s still under development and lacks certain features that one may desire, such as a read-only listing page that displays tickets already submitted to you or your department.</p>
<p><span id="more-202"></span><strong>My Problem:</strong></p>
<p>I noticed internal network clients were submitting several duplicate tickets related to a shared problem (i.e. printer trouble, network outages, etc.). I couldn&#8217;t blame them since they couldn&#8217;t view previously submitted tickets, so I decided to create a quick + dirty page that pulls <em>&#8220;open,&#8221; </em>or <em>&#8220;on-hold,&#8221;</em> tickets from a specific department&#8217;s table of submitted [active] tickets and displays them on a Joomla! article page (using the Sourcerer plug-in to execute custom PHP with {source} tags). Pasting this code into an article without the Sourcerer plug-in [or some sort of plug-in for executing PHP] <em>will do nothing. </em>Also note the <em>include</em> file for making a raw connection to your MySQL database. This is required (and should be stored in a directory with the appropriate permissions to prevent outside read access).</p>
<p>If you&#8217;d like to simply list the number (amount) of tickets (open, closed, on-hold) for <em>all</em> departments, you might want to <a title="Try RSJoomla!'s RSTicket Module for a quick count of all tickets." href="http://www.rsjoomla.com/customer-support/forum/38-rstickets/7805-joomla-module-for-rstickets.html" target="_blank">check the unreleased version of RSJoomla!&#8217;s RSTicket Module.</a></p>
<pre class="brush: php; title: ; notranslate">
{source}
&lt;?php

include (&quot;includes/connect_custom.php&quot;);

$result2 = mysql_query(&quot;SELECT * FROM jos_rstickets_tickets WHERE DepartmentId=3 AND (TicketStatus='open' OR TicketStatus='on-hold') ORDER BY TicketTime ASC&quot;) or die(mysql_error());

echo '&lt;br /&gt;';

echo '&lt;tr&gt;&lt;td style=&quot;padding-bottom: 10px;&quot; colspan=&quot;6&quot;&gt;Please check the open, pending, or on-hold tickets listed below before submitting a support ticket. The list below can be utilized as an informal gauge for IT response times. If a duplicate support ticket is submitted, you may cancel it yourself or it will be deleted by the IT Department upon review. Thank you for your cooperation.&lt;/td&gt;&lt;/tr&gt;';

echo '&lt;tr&gt;&lt;td style=&quot;font-size: 16px;font-weight: bold;padding-bottom: 10px;&quot; colspan=&quot;6&quot;&gt;SUBMITTED SUPPORT TICKETS:&lt;/td&gt;&lt;/tr&gt;';

echo '&lt;tr&gt;&lt;td style=&quot;text-align:left; padding-bottom:7px;&quot;&gt;&lt;strong&gt;Submitted:&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;padding-bottom:7px;&quot;&gt;&lt;strong&gt;Username:&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;padding-bottom:7px;&quot;&gt;&lt;strong&gt;Ticket Code:&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;padding-bottom:7px;&quot;&gt;&lt;strong&gt;Subject:&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;padding-bottom:7px;&quot;&gt;&lt;strong&gt;Status:&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;padding-bottom:7px;&quot;&gt;&lt;strong&gt;Priority:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;';

while($row = mysql_fetch_array($result2))

{

$custid =  $row['CustomerId'];
$userquery= mysql_query(&quot;SELECT name FROM jos_users WHERE id=$custid&quot;) or die(mysql_error());

$username = mysql_fetch_array($userquery);

echo '&lt;tr style=&quot;font-size: 10px;vertical-align:top;&quot;&gt;&lt;td style=&quot;width: 102px; overflow: hidden;padding: 3px -10px 3px 3px;&quot;&gt;' . date(&quot;Y-m-d H:m&quot;, $row['TicketTime']) .  '&lt;/td&gt;&lt;td&gt;' . $username['name'] . '&lt;/td&gt;&lt;td&gt;' . $row['TicketCode'] . '&lt;/td&gt;&lt;td style=&quot;width: 235px; overflow: hidden;&quot;&gt;' . $row['TicketSubject'] . '&lt;/td&gt;&lt;td&gt;' . strtoupper($row['TicketStatus']) . '&lt;/td&gt;';

if ($row['TicketPriority']=='high'){

echo '&lt;td style=&quot;background-color: red; color: white; font-weight: bold;padding-left: 5px;&quot;&gt;';

} else if ($row['TicketPriority']=='normal'){

echo '&lt;td style=&quot;background-color: blue; color: white; font-weight: bold;padding-left: 5px;&quot;&gt;';

} else if ($row['TicketPriority']=='low'){

echo '&lt;td style=&quot;background-color: yellow; font-color: black; font-weight: bold;padding-left: 5px;&quot;&gt;';}

echo strtoupper($row['TicketPriority']) . '&lt;/td&gt;&lt;/tr&gt;';

}

echo '&lt;tr&gt;&lt;td style=&quot;font-size:16px; padding-top: 20px; padding-bottom: 20px&quot; colspan=&quot;6&quot;&gt;&lt;strong&gt;&lt;a href=&quot;index.php?option=com_rstickets&amp;Itemid=59&quot;&gt;&lt;img src=&quot;images/M_images/onsite_support1.jpg&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;index.php?option=com_rstickets&amp;Itemid=59&quot;&gt;SUBMIT A NEW SUPPORT TICKET&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;';

echo '&lt;br /&gt;';

?&gt;
{/source}
</pre>
<p><strong>connect_custom.php :</strong></p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

// Script:	connect_custom.php
// Author:	JR
// Date:	20080218
// Use:	    Utilized for custom DB connections to our current database for Fabrik Forms + Joomla 1.5

$hostname=&quot;localhost&quot;;
$mysql_login=&quot;thedude&quot;;
$mysql_password=&quot;sumpasswordhere&quot;;
$database=&quot;datablah&quot;;

if (!($db = mysql_pconnect($hostname, $mysql_login , $mysql_password))){
die(&quot;Can't connect to database server.&quot;);
}else{
if (!(mysql_select_db(&quot;$database&quot;,$db))){
die(&quot;Can't connect to database.&quot;);
}
}
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://liveaverage.com/features/coding/add-submitted-tickets-listing-page-for-joomla-rstickets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New fun with old toys: Adtran Atlas 550 + Free 411</title>
		<link>http://liveaverage.com/features/infrastructure-management/new-fun-with-old-toys-adtran-atlas-550-free-411/</link>
		<comments>http://liveaverage.com/features/infrastructure-management/new-fun-with-old-toys-adtran-atlas-550-free-411/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 21:10:26 +0000</pubDate>
		<dc:creator>JR</dc:creator>
				<category><![CDATA[Infrastructure Management]]></category>

		<guid isPermaLink="false">http://liveaverage.com/?p=174</guid>
		<description><![CDATA[<p></p> <p>As a result of my frugality, I got my hands on an Adtran Atlas 550 to be used for partitioning a single PRI into two PRIs at my workplace. In addition to the partitioning, this system provides the added bonus of dynamic number substitution. What&#8217;s this mean for me? Substituting costly 411 directory service [...]]]></description>
			<content:encoded><![CDATA[<p><img src="file:///C:/DOCUME~1/ADMIN~1.IT0/LOCALS~1/Temp/moz-screenshot-11.jpg" alt="" /><img class="alignleft" style="margin: 10px;" title="Goog-411" src="http://www.google.com/images/logos/goog-411_logo.png" alt="Goog-411 is a spectacular, free alternative to traditional directory svc." width="209" height="40" /></p>
<p>As a result of my frugality, I got my hands on an Adtran Atlas 550 to be used for partitioning a single PRI into two PRIs at my workplace. In addition to the partitioning, this system provides the added bonus of dynamic number substitution. What&#8217;s this mean for me? Substituting costly 411 directory service for free Goog-411 service (which I prefer over traditional 411). I&#8217;m also able to create a number rejection list to block those NSFW 900* calls [or variation thereof], but the number substitution templates seem much more interesting&#8230;</p>
<p>How to do it:</p>
<blockquote>
<ul>
<li>Telnet to <strong>yohost.yodomain </strong>and log-in</li>
<li><em>Dial Plan</em> &gt; <em>Network Term</em> &gt; <em>Interface # </em>(1 in my case) &gt; Enter</li>
<li>Select <em>Substitution Template</em></li>
<li>Enter the Original DNIS number (the phone number originally dialed)</li>
<li>Enter the Substitution DNIS number (the phone number you&#8217;d like to dial)</li>
<li>Go back to the main menu and log-out</li>
</ul>
</blockquote>
<p>Remember, this change is transparent (and instant &#8212; no need to write/commit the config to startup), so the next time callers decide to hit up the 411 directory service, their call should be automagically routed to 1-800-goog411 (1-800-4664411). Since we&#8217;re a fairly small office I don&#8217;t think this number substituion presents a problem with Googles Terms of Service, but if you&#8217;re considering this change on a massive scale  I&#8217;d consider reading over <a title="Review Google's Terms of Service" href="http://www.google.com/accounts/TOS" target="_blank">Google&#8217;s TOS agreement</a> (particularly section 5.3).</p>
]]></content:encoded>
			<wfw:commentRss>http://liveaverage.com/features/infrastructure-management/new-fun-with-old-toys-adtran-atlas-550-free-411/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Altermime, Postfix/Zimbra, and Headaches</title>
		<link>http://liveaverage.com/features/coding/altermime-postfixzimbra-and-headaches/</link>
		<comments>http://liveaverage.com/features/coding/altermime-postfixzimbra-and-headaches/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 19:43:11 +0000</pubDate>
		<dc:creator>JR</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://liveaverage.com/?p=109</guid>
		<description><![CDATA[<p>EDIT: I have since removed altermime after installing a MailScanner spam relay for our Zimbra server to use. Because, by default, MailScanner appends a default signature to all outbound email, it was very simple to modify the signature rules to accomodate our mandatory disclaimers for different domains.</p> <p>I had the pleasure of applying mandatory disclaimers [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em>EDIT: I have since removed altermime after installing a MailScanner spam relay for our Zimbra server to use. Because, by default, MailScanner appends a default signature to all outbound email, it was very simple to modify the signature rules to accomodate our mandatory disclaimers for different domains.</em></p></blockquote>
<p>I had the pleasure of applying mandatory disclaimers to all [outbound] emails at my workplace today&#8230; ~Joy~ &#8230; I had the assumption it&#8217;d be rather easy, but Altermime and Postfix were a bit finicky to work with. After editing the <strong>master.cf</strong> I ended up customizing my own &#8216;disclaimer&#8217; shell script.</p>
<p><span id="more-109"></span></p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/sh
INSPECT_DIR=/var/spool/filter
SENDMAIL=/opt/zimbra/postfix/sbin/sendmail

# Exit codes from
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

# Clean up when done or when aborting.
trap &quot;rm -f in.$$&quot; 0 1 2 3 15

# Start processing.
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }

cat &gt; in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }

# Verify this mail is not incoming or internal-only
# We don't need disclaimers for either one of these cases.

# Debug:
#echo &quot;output: $from_address&quot; &gt;&gt; /tmp/tempoutput.txt

#Grab the from address:

from_address=`grep -m 1 &quot;From:&quot; in.$$ | cut -d &quot;&lt;&quot; -f 2 | cut -d &quot;&gt;&quot; -f 1`

#Verify whether your domain is in the from address.
#If it is, proceed to distinguish WHICH domain is sending outgoing mail and tag it appropriately:
#If not, then that would be incoming mail, so leave it alone:

#Additional (else if) conditional checks will be added to determine if the email is inner-office comm:
# to_address= `grep -m 1 &quot;To:&quot; in.$$ | cut -d &quot;&lt;&quot; -f 2 | cut -d &quot;&gt;&quot; -f 1`
# if [[ $from_address == *domain* &amp;&amp; to_address == *domain* ]]; then ....
#
# This additional condition requires more debugging...

if [[ $from_address == *domain* ]]; then

# Debug:
#echo
#echo &quot;FROM: $from_address&quot; &gt;&gt; /tmp/tempoutput.txt
#echo &quot;THIS GETS ALTERMIMED&quot; &gt;&gt; /tmp/tempoutput.txt
#echo

#Check to see which domain is sending outgoing email,
#then tag it with the appropriate disclaimer:

if [[ $from_address == *subdomain.domain* ]]; then

# Debug		echo &quot;THIS GETS APDD&quot; &gt;&gt; /tmp/tempoutput.txt
/usr/bin/altermime --input=in.$$ \
--disclaimer=/opt/zimbra/postfix/conf/disclaimers/apd-disclaimer.txt \
--disclaimer-html=/opt/zimbra/postfix/conf/disclaimers/apd-disclaimer.txt \
--xheader=&quot;X-Public-Record:&quot; || { echo Message content rejected; exit $EX_UNAVAILABLE; }
else
# Debug		echo &quot;THIS GETS COAD&quot; &gt;&gt; /tmp/tempoutput.txt
/usr/bin/altermime --input=in.$$ \
--disclaimer=/opt/zimbra/postfix/conf/disclaimers/coa-disclaimer.txt \
--disclaimer-html=/opt/zimbra/postfix/conf/disclaimers/coa-disclaimer.txt \
--xheader=&quot;X-Public-Record:&quot; || { echo Message content rejected; exit $EX_UNAVAILABLE; }

fi
fi

# Might need to remove -i switch for truncation problems depending on your MTA version...

$SENDMAIL -i &quot;$@&quot; &lt; in.$$

exit $?
</pre>
]]></content:encoded>
			<wfw:commentRss>http://liveaverage.com/features/coding/altermime-postfixzimbra-and-headaches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How-to: GSX650F Chop-shop Job (Cutting down the fender)</title>
		<link>http://liveaverage.com/features/living/how-to-gsx650f-chop-shop-job-cutting-down-the-fender/</link>
		<comments>http://liveaverage.com/features/living/how-to-gsx650f-chop-shop-job-cutting-down-the-fender/#comments</comments>
		<pubDate>Tue, 12 May 2009 16:12:02 +0000</pubDate>
		<dc:creator>JR</dc:creator>
				<category><![CDATA[Living]]></category>

		<guid isPermaLink="false">http://liveaverage.com/?p=104</guid>
		<description><![CDATA[<p>Per another owner&#8217;s request, here are some up-close shots of the chop-job for the 2008 GSX650F &#8230; Notice the black bolts (attached to the protruding box shapes beneath the fender) in the second image. These are holding the bracket to the bike &#8216;trunk.&#8217; There&#8217;s a lock washer and nut on the inside of the trunk [...]]]></description>
			<content:encoded><![CDATA[<p><span class="postbody">Per another owner&#8217;s request, here are some up-close shots of the chop-job for the 2008 </span><span class="postbody">GSX650F </span><span class="postbody">&#8230; Notice </span><span class="postbody">the black bolts </span><span class="postbody">(attached to the protruding box shapes beneath the fender) </span><span class="postbody">in the second image. These are holding the bracket to the bike &#8216;trunk.&#8217; There&#8217;s a lock washer and nut on the inside of the trunk securing the bracket to the bike.<br />
</span></p>
<p><span class="postbody">I did not remove the tail before cutting. I used only a razor knife (with new, clean blades) following a hand-drawn [penciled] line. I did have to change the blade out about half-way through, and I did slice the crap out of a finger, but it was still worth the end-result.</span></p>
<p>My plate is not actually at an angle, but if you purchased the same tail light w/ the integrated signals and plate light, you don&#8217;t need it at an angle. It&#8217;s clearly visible at night without bending or angled mounting. Also, you may need some additional hardware (2 X bolts, 2 X nuts, 2 X lock-washers) to re-mount the OEM plate bracket to what&#8217;s left of the tail after the chop. Depending on how small your hands are, you might have to remove the tail piece (not the rear fender, just the painted tail) to attach lock-washers and nuts on the inside of the &#8216;trunk&#8217;.<br />
<span id="more-104"></span></p>
<p><span class="postbody"> <img src="http://farm4.static.flickr.com/3603/3513737951_deb1a2d44c.jpg" border="0" alt="" /><br />
Figure 1) Profile view of the chop-shop job and license bracket</span></p>
<p><img src="http://farm4.static.flickr.com/3362/3513737605_cb52d3b6a7.jpg" border="0" alt="" /><br />
Figure 2) These black bolts secure the bracket to the bike trunk.</p>
<p><img src="http://farm4.static.flickr.com/3660/3513737675_c3473c91d2.jpg" border="0" alt="" /><br />
Figure 3) No need to bend your license plate. The LEDs from the aftermarket tail-light project perfectly.</p>
<p><img src="http://farm4.static.flickr.com/3545/3513737747_99ce71fd23.jpg" border="0" alt="" /><br />
Figure 4) Again, view the bracket mounted to the protruding trunk.<br />
<span class="postbody"> <img src="http://farm4.static.flickr.com/3385/3513737785_7332e1eb7d.jpg" border="0" alt="" /><br />
Figure 5) Using a razor knife gave a perfect, clean edge. No need to sand or grind.</span></p>
<p><img src="http://farm4.static.flickr.com/3399/3513737883_1f06285b28.jpg" border="0" alt="" /><br />
Figure 6) You can still see my pencil marks :S</p>
]]></content:encoded>
			<wfw:commentRss>http://liveaverage.com/features/living/how-to-gsx650f-chop-shop-job-cutting-down-the-fender/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shuttle PC MyKover Template</title>
		<link>http://liveaverage.com/features/infrastructure-management/shuttle-pc-mykover-template/</link>
		<comments>http://liveaverage.com/features/infrastructure-management/shuttle-pc-mykover-template/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 16:34:16 +0000</pubDate>
		<dc:creator>JR</dc:creator>
				<category><![CDATA[Infrastructure Management]]></category>

		<guid isPermaLink="false">http://liveaverage.com/?p=25</guid>
		<description><![CDATA[<p>After deploying a few <a title="Looking for Shuttle KPC K45 Systems? Look no further than Newegg." href="http://www.newegg.com/Product/Product.aspx?Item=N82E16856101069" target="_blank">Shuttle KPC K45 systems</a> for UTM (Unified Threat Management) appliances using Untangle 5.42 and 6.00 I got tired of fussing with Shuttle&#8217;s MyKover JPEG template(s) and opted to create my own to-scale Word Document template. Feel free to [...]]]></description>
			<content:encoded><![CDATA[<p>After deploying a few <a title="Looking for Shuttle KPC K45 Systems? Look no further than Newegg." href="http://www.newegg.com/Product/Product.aspx?Item=N82E16856101069" target="_blank">Shuttle KPC K45 systems</a> for UTM (Unified Threat Management) appliances using Untangle 5.42 and 6.00 I got tired of fussing with Shuttle&#8217;s MyKover JPEG template(s) and opted to create my own to-scale Word Document template. Feel free to change the included background image and text, I just left that on there for reference. And yes, the screw hole markings are correctly (or nearly correctly) placed.</p>
<p>I enjoyed the coffee cover included with the barebone system, but opted for something customized that would allow remote clients to phone in service-calls with all the important information (Local/WAN IP, MAC, FQDN, etc.) required for troubleshooting. Hope this helps someone out who might be looking for a better template than the one provided by Shuttle&#8217;s site.</p>
<p><a title="Click Here to start downloading the MyKover Shuttle Word Template" href="http://www.averageanalogs.com/v2/images/mykover_shuttle_template_public.doc" target="_self">DOWNLOAD MyKover Word Document Template</a> (.DOC &#8211; Created w/ Microsoft Office 2003)</p>
]]></content:encoded>
			<wfw:commentRss>http://liveaverage.com/features/infrastructure-management/shuttle-pc-mykover-template/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zimbra flows on the iPhone</title>
		<link>http://liveaverage.com/features/zimbra-flows-on-the-iphone/</link>
		<comments>http://liveaverage.com/features/zimbra-flows-on-the-iphone/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 18:34:46 +0000</pubDate>
		<dc:creator>JR</dc:creator>
				<category><![CDATA[Features]]></category>

		<guid isPermaLink="false">http://liveaverage.com/?p=15</guid>
		<description><![CDATA[<p></p> <p>Zimbra (FOSS) provides one hellaciously clean, organized web client on Apple&#8217;s iPhone Safari Browser, nearly resembling a native application.</p>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft alignnone size-full wp-image-18" title="Zimbra Pwns the iPhone" src="http://liveaverage.com/wp-content/themes/mimbo2.2/images/zimbra_iphone.jpg" alt="Zimbra Interface on the Apple iPhone" width="255" height="88" /></p>
<p>Zimbra (FOSS) provides one hellaciously clean, organized web client on Apple&#8217;s iPhone Safari Browser, nearly resembling a native application.</p>
]]></content:encoded>
			<wfw:commentRss>http://liveaverage.com/features/zimbra-flows-on-the-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

