<?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>morgan::blog</title>
	<atom:link href="http://morganjones.org/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://morganjones.org/blog</link>
	<description></description>
	<lastBuildDate>Thu, 26 Aug 2010 18:18:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Determine Zimbra distribution list membership from Zimbra ldap or ldap backup</title>
		<link>http://morganjones.org/blog/?p=230</link>
		<comments>http://morganjones.org/blog/?p=230#comments</comments>
		<pubDate>Mon, 16 Aug 2010 21:22:15 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
				<category><![CDATA[Directory/LDAP]]></category>
		<category><![CDATA[Messaging]]></category>
		<category><![CDATA[Zimbra]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://morganjones.org/blog/?p=230</guid>
		<description><![CDATA[(all as the zimbra user)
Want to know a user&#8217;s distribution list membership?

$ ldapsearch -xh ldap1.domain.com -D uid=zimbra,cn=admins,cn=zimbra -w pass
-Lb dc=domain,dc=com zimbramailforwardingaddress=morgan@domain.com mail&#124;egrep -i '^mail'&#124;
awk '{print $2}'


(to get your ldap password: $ zmlocalconfig -s&#124;grep ldap_password)
Deleted or re-created a user but forgot to note which lists to which they belonged?
You can get it from an ldap backup:

$ [...]]]></description>
			<content:encoded><![CDATA[<p>(all as the zimbra user)</p>
<p>Want to know a user&#8217;s distribution list membership?</p>
<pre><code>
$ ldapsearch -xh ldap1.domain.com -D uid=zimbra,cn=admins,cn=zimbra -w pass
-Lb dc=domain,dc=com zimbramailforwardingaddress=morgan@domain.com mail|egrep -i '^mail'|
awk '{print $2}'
</pre>
<p></code></p>
<p>(to get your ldap password: <code>$ zmlocalconfig -s|grep ldap_password</code>)</p>
<p>Deleted or re-created a user but forgot to note which lists to which they belonged?<br />
You can get it from an ldap backup:</p>
<pre><code>
$ cd /opt/zimbra/backup/sessions/full-date.xxx.xxx/ldap
$ export i=morgan; egrep "^dn:|$i" ldap.bak | grep -B1 -i "zimbraMailForwardingAddress:
${i}@domain.com"|grep uid| cut -d '=' -f2|cut -d ',' -f 1
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://morganjones.org/blog/?feed=rss2&amp;p=230</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zimbra/Postfix behind an AS/AV appliance</title>
		<link>http://morganjones.org/blog/?p=213</link>
		<comments>http://morganjones.org/blog/?p=213#comments</comments>
		<pubDate>Fri, 06 Aug 2010 19:30:02 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[Zimbra]]></category>

		<guid isPermaLink="false">http://morganjones.org/blog/?p=213</guid>
		<description><![CDATA[I&#8217;m working with an anti-virus/anti-spam (av/as) appliance that receives and sends all mail too/from the Internet but end users send directly through the Zimbra mtas.  The latter requirement is actually because the av/as vendor does not support end users sending directly though it.
We chose to configure the Zimbra mtas to only accept mail from [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working with an anti-virus/anti-spam (av/as) appliance that receives and sends all mail too/from the Internet but end users send directly through the Zimbra mtas.  The latter requirement is actually because the av/as vendor does not support end users sending directly though it.</p>
<p>We chose to configure the Zimbra mtas to only accept mail from certain networks (the av/as appliance and a few servers) and authenticated users.</p>
<p>The base postfix smtpd_recipient_restrictions configuration looks like this:</p>
<pre><code>
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject
</code></pre>
<p>Note that Postfix will no longer receive mail destined for the domain(s) for which it is authoritative unless it comes from an authenticated session or a host on $mynetworks.  The downside is if mail comes from one of those sources there are no restrictions.</p>
<p>We added some &#8220;rejects&#8221; to provide better error messages to users and cut down on junk:</p>
<pre><code>
smtpd_recipient_restrictions = reject_non_fqdn_recipient, reject_unlisted_recipient,
reject_invalid_hostname,  reject_non_fqdn_sender, reject_unknown_sender_domain,
permit_sasl_authenticated, permit_mynetworks, reject
</code></pre>
<p>Here&#8217;s how we configured it within Zimbra: not particularly complex in retrospect but it&#8217;s helpful to see all the pieces in one place.</p>
<p>Set smtpd_recipient_restrictions:</p>
<pre><code>
$ zmprov mcf zimbraMtaRestriction reject_invalid_hostname zimbraMtaRestriction reject_non_fqdn_sender zimbraMtaRestriction reject_unknown_sender_domain
$ vi /opt/zimbra/conf/postfix_recipient_restrictions.cf
reject_non_fqdn_recipient
permit_sasl_authenticated
permit_mynetworks
reject_unlisted_recipient
[%%contains VAR: ...]
reject
</code></pre>
<p>Set mynetworks globally (rather than per mta):</p>
<pre><code>
$ zmprov mcf zimbraMtaMyNetworks 127.0.0.1/32,192.168.2.0/24
$ zmprov ms mta01.domain.com zimbramtamynetworks ""
$ zmprov ms mta02.domain.com zimbramtamynetworks ""
$ zmprov ms mta03.domain.com zimbramtamynetworks ""
...
</code></pre>
<p>Force users who auth to also use TLS:</p>
<pre><code>
$ zmprov mcf zimbraMtaTlsAuthOnly TRUE
$ zmprov ms mta01.domain.com zimbraMtaTlsAuthOnly ""
$ zmprov ms mta02.domain.com zimbraMtaTlsAuthOnly ""
$ zmprov ms mta03.domain.com zimbraMtaTlsAuthOnly ""
...
$ zmprov mcf zimbraMtaSaslAuthEnable TRUE
$ zmprov ms mta01.domain.com zimbraMtaSaslAuthEnable ""
$ zmprov ms mta02.domain.com zimbraMtaSaslAuthEnable ""
$ zmprov ms mta03.domain.com zimbraMtaSaslAuthEnable ""
...
</code></pre>
<p>rebuild the configuration and restart the mta:</p>
<pre><code>
$ zmmtactl restart
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://morganjones.org/blog/?feed=rss2&amp;p=213</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>zimbra settings disambiguation</title>
		<link>http://morganjones.org/blog/?p=207</link>
		<comments>http://morganjones.org/blog/?p=207#comments</comments>
		<pubDate>Wed, 04 Aug 2010 17:16:33 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[Zimbra]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://morganjones.org/blog/?p=207</guid>
		<description><![CDATA[I&#8217;ve been hunting down various mta settings in Zimbra and noticed something interesting: there are multiple places to set at least mta settings.
For example: I&#8217;m looking to set smtpd_sasl_auth_enable = yes.  This setting is controlled by zimbraMtaSaslAuthEnable in zimbra.
However, there are two places to set it:

$ zmprov gs mta01.morganjones.org &#124;grep -i zimbraMtaSaslAuthEnable
zimbraMtaSaslAuthEnable: FALSE
$ zmprov [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been hunting down various mta settings in Zimbra and noticed something interesting: there are multiple places to set at least mta settings.</p>
<p>For example: I&#8217;m looking to set smtpd_sasl_auth_enable = yes.  This setting is controlled by zimbraMtaSaslAuthEnable in zimbra.</p>
<p>However, there are two places to set it:</p>
<pre><code>
$ zmprov gs mta01.morganjones.org |grep -i zimbraMtaSaslAuthEnable
zimbraMtaSaslAuthEnable: FALSE
$ zmprov gacf |grep -i zimbraMtaSaslAuthEnable
zimbraMtaSaslAuthEnable: TRUE
</pre>
<p></code></p>
<p>If it is FALSE in 'gs' but TRUE in gacf smtpd_sasl_auth_enable will be set to 'no' on mta01 in this example.</p>
<p>So, if you want all your mtas to use auth you simply need to unset zimbraMtaSaslAuthEnable for each mta and set it globally:</p>
<pre><code>
$ zmprov ms mta01.morganjones.org zimbraMtaSaslAuthEnable ""
$ zmprov ms mta02.morganjones.org zimbraMtaSaslAuthEnable ""
...
$ zmprov mcf zimbraMtaSaslAuthEnable TRUE
</code></pre>
<p>and then restart the mta on each mta host:</p>
<pre><code>
$ zmmtactl restart
Rewriting configuration files...done.
Stopping zmmtaconfig...done.
Starting zmmtaconfig...done.
postfix/postfix-script: refreshing the Postfix mail system
Stopping saslauthd...done.
Starting saslauthd...done.
$
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://morganjones.org/blog/?feed=rss2&amp;p=207</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Country based packet filtering in RHEL 5.x</title>
		<link>http://morganjones.org/blog/?p=198</link>
		<comments>http://morganjones.org/blog/?p=198#comments</comments>
		<pubDate>Tue, 15 Jun 2010 04:51:33 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[Redhat/Fedora]]></category>
		<category><![CDATA[Zimbra]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://morganjones.org/blog/?p=198</guid>
		<description><![CDATA[This is adapted from the Debian instructions found here:
http://www.debian-administration.org/articles/518
install redhat source repository and yum-utils
http://www.cyberciti.biz/faq/yum-download-source-packages-from-rhn


# vi /etc/yum.repos.d/srpm.repo
[rhel-src]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/$releasever/en/os/SRPMS/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
# yum install yum-utils
# mkdir /usr/src/redhat


get kernel source.


# yumdownloader --source kernel-2.6.18
# tar xfj /usr/src/redhat/SOURCES/linux-2.6.18.tar.bz2 -C /usr/src


get iptables source


# yumdownloader --source iptables
# tar xfj /usr/src/redhat/SOURCES/iptables-1.3.5.tar.bz2 -C /usr/src


get patch-o-matic—we will use it to patch [...]]]></description>
			<content:encoded><![CDATA[<p>This is adapted from the Debian instructions found here:<br />
<a href="http://www.debian-administration.org/articles/518">http://www.debian-administration.org/articles/518</a></p>
<p>install redhat source repository and yum-utils<br />
<a href="http://www.cyberciti.biz/faq/yum-download-source-packages-from-rhn">http://www.cyberciti.biz/faq/yum-download-source-packages-from-rhn</a><br />
<code>
<pre>
# vi /etc/yum.repos.d/srpm.repo
[rhel-src]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/$releasever/en/os/SRPMS/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
# yum install yum-utils
# mkdir /usr/src/redhat
</pre>
<p></code></p>
<p>get kernel source.<br />
<code>
<pre>
# yumdownloader --source kernel-2.6.18
# tar xfj /usr/src/redhat/SOURCES/linux-2.6.18.tar.bz2 -C /usr/src
</pre>
<p></code></p>
<p>get iptables source<br />
<code>
<pre>
# yumdownloader --source iptables
# tar xfj /usr/src/redhat/SOURCES/iptables-1.3.5.tar.bz2 -C /usr/src
</pre>
<p></code></p>
<p>get patch-o-matic—we will use it to patch iptables and the kernel.<br />
<code>
<pre>
# wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20070414.tar.bz2
# tar xjf patch-o-matic-ng-20070414.tar.bz2
</pre>
<p></code></p>
<p>get the geoip patchlet:<br />
<code>
<pre>
# wget http://people.netfilter.org/peejix/patchlets/geoip.tar.gz
# tar xfz geoip.tar.gz -C patch-o-matic-ng-20070414/patchlets
</pre>
<p></code></p>
<p>Apply the geoip patchlet<br />
<code>
<pre>
# cd patch-o-matic-ng-20070414
# KERNEL_DIR=/usr/src/linux-2.6.18/ IPTABLES_DIR=/usr/src/iptables-1.3.5/ ./runme geoip

Loading patchlet definitions.................. done

Welcome to Patch-o-matic ($Revision: 6736 $)!

Kernel:   2.6.18, /usr/src/linux-2.6.18/

Iptables: 1.3.5, /usr/src/iptables-1.3.5
Each patch is a new feature: many have minimal impact, some do not.
Almost every one has bugs, so don't apply what you don't need!
-------------------------------------------------------
Already applied:
Testing geoip... not applied
The geoip patch:
   Author: Samuel Jean <jix@bugmachine.ca>; Nicolas Bouliane <nib@bugmachine.ca>
   Status: Stable

This patch makes possible to match a packet
by its source or destination country.

GeoIP options:
        [!]   --src-cc, --source-country country[,country,country,...]

                        Match packet coming from (one of)
                        the specified country(ies)

        [!]   --dst-cc, --destination-country country[,country,country,...]

                        Match packet going to (one of)
                        the specified country(ies)

           NOTE: The country is inputed by its ISO3166 code.

The only extra files you need is a binary db (geoipdb.bin) &#038; its index file (geoipdb.idx).
Take a look at http://people.netfilter.org/peejix/geoip/howto/geoip-HOWTO.html
for a quick HOWTO.
-----------------------------------------------------------------
Do you want to apply this patch [N/y/t/f/a/r/b/w/q/?] ?
Answer one of the following:
  T to test that the patch will apply cleanly
  Y to apply patch
  N to skip this patch
  F to apply patch even if test fails
  A to restart patch-o-matic in apply mode
  R to restart patch-o-matic in REVERSE mode
  B to walk back one patch in the list
  W to walk forward one patch in the list
  Q to quit immediately
  ? for help
-----------------------------------------------------------------
Do you want to apply this patch [N/y/t/f/a/r/b/w/q/?] T
Patch geoip applies cleanly
-----------------------------------------------------------------
Do you want to apply this patch [N/y/t/f/a/r/b/w/q/?] y

Excellent! Source trees are ready for compilation.

Recompile the kernel image (if there are non-modular netfilter modules).
Recompile the netfilter kernel modules.
Recompile the iptables binaries.
#
</pre>
<p></code></p>
<p>Build the kernel module<br />
<code>
<pre>
# cd /usr/src/linux-2.6.18
# make oldconfig
…
    geoip match support (IP_NF_MATCH_GEOIP) [N/m/?] (NEW) m
…
# make modules_prepare
</pre>
<p></code><br />
Compile just the netfilter modules<br />
<code>
<pre>
# make -C $(pwd) M=net/ipv4/netfilter/ modules
# cp -i net/ipv4/netfilter/ipt_geoip.ko /lib/modules/2.6.18-128.1.10.el5/kernel/net/ipv4/netfilter/
</pre>
<p></code></p>
<p>Build the iptables libipt_geoip.so library<br />
<code>
<pre>
# cd /usr/src/iptables-1.3.5
# make KERNEL_DIR=/usr/src/linux-2.6.18/ extensions/libipt_geoip.so
Making dependencies: please wait...
cc -O2 -Wall -Wunused -I/usr/src/linux-2.6.18//include -Iinclude/ -DIPTABLES_VERSION=\"1.3.5\"  -fPIC -o extensions/libipt_geoip_sh.o -c extensions/libipt_geoip.c
ld -shared  -o extensions/libipt_geoip.so extensions/libipt_geoip_sh.o
# cp extensions/libipt_geoip.so /lib64/iptables
</pre>
<p></code></p>
<p>Insert the module into the kernel<br />
<code>
<pre>
# depmod
# modprobe ipt_geoip
</pre>
<p></code><br />
Todo: load the module on boot?</p>
<p>Create the IP-country mapping<br />
<code>
<pre>
# wget http://www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
# unzip  GeoIPCountryCSV.zip
# wget http://people.netfilter.org/peejix/geoip/tools/csv2bin-20041103.tar.gz
# tar tzf csv2bin-20041103.tar.gz
# cd csv2bin
# make
# ./csv2bin ../GeoIPCountryWhois.csv
# mkdir /var/geoip
# mv geoipdb* /var/geoip
</pre>
<p></code></p>
<p>Test<br />
World Cup mania means we happened to have a colleague in South Africa so we blocked the whole country on a test server and had him attempt to connect to https:<br />
<code>
<pre>
# /sbin/iptables -A INPUT -p tcp --dport 443 -m geoip --src-cc ZA -j REJECT
</pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://morganjones.org/blog/?feed=rss2&amp;p=198</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;no such account&#8230;&#8221; during zimbra restores</title>
		<link>http://morganjones.org/blog/?p=191</link>
		<comments>http://morganjones.org/blog/?p=191#comments</comments>
		<pubDate>Thu, 27 May 2010 15:59:31 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[Zimbra]]></category>

		<guid isPermaLink="false">http://morganjones.org/blog/?p=191</guid>
		<description><![CDATA[I&#8217;m working on a migration where we&#8217;re moving users one by one from a production environment to a dev environment.  To oversimplify, the process is:
- backup in production,
- zmbackupquery -lb  to make sure the backup has finished,
- copy the files from /opt/zimbra/backup to the dev environment and
- restore there.
So:
zmbackup -f -z -a user@domain.com
then

$ [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on a migration where we&#8217;re moving users one by one from a production environment to a dev environment.  To oversimplify, the process is:<br />
- backup in production,<br />
- zmbackupquery -lb <label> to make sure the backup has finished,<br />
- copy the files from /opt/zimbra/backup to the dev environment and<br />
- restore there.</p>
<p>So:<br />
<code>zmbackup -f -z -a user@domain.com</code><br />
then</p>
<pre><code>
$ zmrestore -c -lb full-20100527.153703.317 -a user@domain.com
Error occurred during restore. Check logs for more details.
The following accounts have not been restored:
  user@domain.com
</code></pre>
<p>A look at mailbox.log reveals:</p>
<pre><code>
com.zimbra.cs.account.AccountServiceException: no such account: ef423485-424b-4fec-a064-f797ffc4ae29
ExceptionId:btpool0-116://localhost:7071/service/admin/soap/RestoreRequest:1274974984703:209afa27e2965ffa
Code:account.NO_SUCH_ACCOUNT
	at com.zimbra.cs.account.AccountServiceException.NO_SUCH_ACCOUNT(AccountServiceException.java:177)
	at com.zimbra.cs.mailbox.Mailbox.getAccount(Mailbox.java:515)
...
</code></pre>
<p>&#8220;ef423485-424b-4fec-a064-f797ffc4ae29&#8243; is presumably a zimbraid.  I can&#8217;t for the life of me figure out where it originates&#8211;I can&#8217;t find it anywhere in either environment.</p>
<p>The workaround is surprisingly straightforward.  Instead of the zmrestore above, restore to a restored_ account and rename the account:</p>
<pre><code>
$ zmrestore -c -ca -pre restored_ -lb full-20100527.153703.317 -a user@domain.com
$ zmprov ra restored_user@domain.com user@domain.com
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://morganjones.org/blog/?feed=rss2&amp;p=191</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Turn on recipient verify in Zimbra</title>
		<link>http://morganjones.org/blog/?p=186</link>
		<comments>http://morganjones.org/blog/?p=186#comments</comments>
		<pubDate>Fri, 14 May 2010 21:05:27 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[Zimbra]]></category>

		<guid isPermaLink="false">http://morganjones.org/blog/?p=186</guid>
		<description><![CDATA[I&#8217;d love to know why Zimbra does not ship with recipient verify turned on.  Here&#8217;s the use case: a user sends a message from the web interface with an invalid recipient.  He/she does not get an error when the message is sent but instead receives an immediate bounce.  Sure the info is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d love to know why Zimbra does not ship with recipient verify turned on.  Here&#8217;s the use case: a user sends a message from the web interface with an invalid recipient.  He/she does not get an error when the message is sent but instead receives an immediate bounce.  Sure the info is in the bounce but it&#8217;s easy to miss in a cluttered inbox and it&#8217;s a hassle to parse.</p>
<p>The solution is very simple.  On each host running postfix:</p>
<p>As zimbra:<br />
<code><br />
$ <b>vi /opt/zimbra/postfix/conf/main.cf<br />
relay_recipient_maps = ldap:/opt/zimbra/conf/ldap-vam.cf</b><br />
$ <b>vi /opt/zimbra/conf/zmmta.cf<br />
POSTCONF smtpd_reject_unlisted_recipient yes</b><br />
$ <b>zmmtactl restart</b><br />
</code><br />
This works in zcs 5.0.x and 6.0.6.  It will likely work in other versions as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://morganjones.org/blog/?feed=rss2&amp;p=186</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Belated thoughts on Hawaii</title>
		<link>http://morganjones.org/blog/?p=177</link>
		<comments>http://morganjones.org/blog/?p=177#comments</comments>
		<pubDate>Thu, 15 Apr 2010 21:55:38 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
				<category><![CDATA[motorcycles]]></category>
		<category><![CDATA[travelogue]]></category>

		<guid isPermaLink="false">http://morganjones.org/blog/?p=177</guid>
		<description><![CDATA[(Photos are here.)
In February B attended a burn &#8220;conference&#8221; held on Maui, Hawaii.  I am not much of a beach person but it seemed silly to turn down a week of free lodging in Hawaii as I&#8217;d never been.
She was busy from 8-12 each day at the conference so I rented a motorcycle and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://morganjones.org/photos/main.php?g2_itemId=12650">(Photos are here.)</a></p>
<p>In February B attended a burn &#8220;conference&#8221; held on Maui, Hawaii.  I am not much of a beach person but it seemed silly to turn down a week of free lodging in Hawaii as I&#8217;d never been.</p>
<p>She was busy from 8-12 each day at the conference so I rented a motorcycle and had a look around the island.  I rented a Harly Fat Bob the first day which I&#8217;m a little embarrassed to admit is a pretty nice motorcycle.  Cost and image aside I could consider owning one.  The position is leaned way back with your feet and arms stretched far forward.. The forward controls are surprisingly comfortable, the only real disadvantage is that your heels drag in even moderate turns.  The passenger accommodations are horrendous.. I suspect some quality time with Sargents would fix the problem but B still complains about how uncomfortable the seat was.</p>
<p>The Harley motor is not unlike the Guzzi motor in that it&#8217;s a laid back, torquey twin.  It makes it&#8217;s max torque very low making in comfortable for just, well, cruising around.  It&#8217;s plenty fast by real-world standards.</p>
<p>I switched to a Heritage Softtail which I would give about a 7 out 10 for rider position, comfort and style.  B really liked the passenger accomodations and it had bags so ultimately was a better choice for us.  The riding position was neither laid back nor leaned forward&#8211;really just a little further back than a &#8220;standard&#8221; motorcycle and equally awkward..  The style is just too &#8220;classic&#8221; for my tastes.. between the huge white fenders and the studs I just felt like a fool riding it around.</p>
<p>The island is surprisingly small, there couldn&#8217;t be more than a few hundred miles of paved road and a lot of them are highway that just connect one place to another.  A lot of the island is a state park which means there are no shortcuts&#8211;if you go down many a road a distance you either have to follow it all the way around the island which can be a multi-hour ride and, as in the case with the road to Hana a washed out dirt road.</p>
<p>We skipped the road to Hana in favor of seeing the rest of the island.. A combination of lack of time and anxiety about piloting a huge Harley though roads that the rental company is apparently not insured for..  So we rode around West Maui and much of central Maui. The stretch from Kahului to Kahakuloa is beautiful on the scale of the Pacific Coast Highway along the Northern California Coast.  The surface is pretty bad in spots but it&#8217;s very passable.</p>
<p>Another day we took the road to Haleakala which is supremely frustrating with it&#8217;s seemingly endless switchbacks, generally cold and dreary demeanor for the first half.  The ride pays off however as you break the cloud cover somewhere around 15 miles into the ride and it is clear and sunny with a view of the top of the clouds you just passed through.  I remember the revelation of breaking through the clouds and upon arriving at checkpoint to pay the entry fee I enthusiastically asked if breaking out of the clouds so dramatically was common.. The ranger gave me a bored look and simply said, &#8220;oh, yes..&#8221;  </p>
<p>The top of Haleakala is almost exclusively volcanic rock, post of it red.  It truly looks like the surface of Mars.  It is populated by Nene, which appear to be a strange mix of a goose and a pigeon.  They make chirping noises are are relatively tame, likely because people feed them.</p>
<p>We stayed at The Makena Golf and Beach resort, formerly the Maui Prince&#8211;an aging independent resort that was in the hands of a slightly neglectful investment group.. It was either for sale or in the process of being sold.  The downside is the overpriced restaurants closed early and pretty mediocre menus.. just enough to be considered a restaurant really.  The up side was the staff didn&#8217;t seem terribly concerned about late night hot tub use.. B and I spent quality time tempting fate with a few beers in the hot tub.  We did go up to the Four Seasons one night for dinner but by and large you had to make the 20 minute drive to Kihei for dinner.</p>
<p>Makena is a perfect example of place at the end of a road with no alternate routes&#8211;it&#8217;s 20 minutes from access to anything else on the island.  Not far below the resort was a public beach (Big Beach) which was clearly populated by locals and had an attached seemingly unofficial but far from secret nude beach (Little Beach).. Little Beach also had much better waves.</p>
<p>I can&#8217;t stress enough how beautiful Maui&#8217;s beaches really are.. the water is a clear blue-green, you can stand neck deep it water and see your feet.  The water has got to be 80 degrees in February.  It&#8217;s really amazing.  I don&#8217;t like the beach and I found it pleasant.</p>
]]></content:encoded>
			<wfw:commentRss>http://morganjones.org/blog/?feed=rss2&amp;p=177</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sprint EVDO multiple connections fix</title>
		<link>http://morganjones.org/blog/?p=173</link>
		<comments>http://morganjones.org/blog/?p=173#comments</comments>
		<pubDate>Sat, 30 Jan 2010 17:47:53 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Why you should own a mac]]></category>

		<guid isPermaLink="false">http://morganjones.org/blog/?p=173</guid>
		<description><![CDATA[After too many hours fighting with poor quality free wireless I am trying out mobile broadband.  A friend loaned me his Sierra Wireless 597 3g.  After installing the Snow Leopard drivers from Sprint it works fine.
However if I attempt to connect a pptp or ipsec vpn the connection drops with the error: &#8220;Disconnected. [...]]]></description>
			<content:encoded><![CDATA[<p>After too many hours fighting with poor quality free wireless I am trying out mobile broadband.  A friend loaned me his Sierra Wireless 597 3g.  After installing the Snow Leopard drivers from Sprint it works fine.</p>
<p>However if I attempt to connect a pptp or ipsec vpn the connection drops with the error: &#8220;Disconnected.  Multiple connections are not allowed.  Your CDMA connection was terminated.&#8221;  It behaves the same way if you attempt to connect to a wireless network.</p>
<p>The fix turns out to be simple.  In SmartView:<br />
Tools->Settings<br />
click Hardware<br />
select &#8216;Allow Simultaneous Connections.&#8217;</p>
<p>Here&#8217;s the link that got me on the right track:<br />
<a href="http://forums.juniper.net/t5/SSL-VPN/Sprint-SmartView-disconnects-when-NC-launches/td-p/9579;jsessionid=C56E06204F45FFF85712812235447301">http://forums.juniper.net/t5/SSL-VPN/Sprint-SmartView-disconnects-when-NC-launches/td-p/9579;jsessionid=C56E06204F45FFF85712812235447301</a></p>
]]></content:encoded>
			<wfw:commentRss>http://morganjones.org/blog/?feed=rss2&amp;p=173</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Clever Art/Tech Project</title>
		<link>http://morganjones.org/blog/?p=167</link>
		<comments>http://morganjones.org/blog/?p=167#comments</comments>
		<pubDate>Mon, 11 Jan 2010 20:43:40 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://morganjones.org/blog/?p=167</guid>
		<description><![CDATA[http://vimeo.com/8201309
I generally don&#8217;t post web links but it&#8217;s been slow here on the blog and this is a clever project.
They built a series of simple, nicely designed chairs, left them on the streets of NYC, monitored them via video and GPS to see who took them.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://vimeo.com/8201309">http://vimeo.com/8201309</a></p>
<p>I generally don&#8217;t post web links but it&#8217;s been slow here on the blog and this is a clever project.</p>
<p>They built a series of simple, nicely designed chairs, left them on the streets of NYC, monitored them via video and GPS to see who took them.</p>
]]></content:encoded>
			<wfw:commentRss>http://morganjones.org/blog/?feed=rss2&amp;p=167</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transparently handle first argument to Perl Package subroutines</title>
		<link>http://morganjones.org/blog/?p=160</link>
		<comments>http://morganjones.org/blog/?p=160#comments</comments>
		<pubDate>Thu, 19 Nov 2009 21:11:58 +0000</pubDate>
		<dc:creator>morgan</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://morganjones.org/blog/?p=160</guid>
		<description><![CDATA[It&#8217;s always baffled me that Perl subroutines behave differently when called from inside the Package vs. outside.
The use case may be obvious but I&#8217;ll say it: you write a small utility routine that you want to call as $pack->func(1); and from within the Package as func(1);;
The problem of course is that when called as $pack->func(1); [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s always baffled me that Perl subroutines behave differently when called from inside the Package vs. outside.</p>
<p>The use case may be obvious but I&#8217;ll say it: you write a small utility routine that you want to call as <code>$pack->func(1);</code> and from within the Package as <code>func(1);</code>;</p>
<p>The problem of course is that when called as <code>$pack->func(1);</code> the first arg will the object itself and when called as <code>func(1);</code> from within the package the first arg will be &#8220;1.&#8221;</p>
<p>There&#8217;s a very simple solution:<br />
<code>shift if ((ref $_[0]) eq __PACKAGE__);</code></p>
<p>Here&#8217;s a simple example:</p>
<pre><code>
#!/usr/bin/perl -w
#
package Pack;

sub new {
    my $c = shift;

    my $self = {};
    bless $self, $c;
    return $self;
}

sub func {
    shift if ((ref $_[0]) eq __PACKAGE__);
    my $a = shift;

    print "passed in: $a\n";
}

sub call_func {
    print "calling func from inside ", __PACKAGE__, ":\n";
    func(2);
}
1;

my $p = new Pack;

print "calling func from main:\n";
$p->func(1);

$p->call_func();
</code></pre>
<p>Try commenting the &#8220;shift&#8221; line in sub func() and see how it behaves differently.</p>
]]></content:encoded>
			<wfw:commentRss>http://morganjones.org/blog/?feed=rss2&amp;p=160</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
