<?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>The life and times of Jeffrey Forman.</title>
	<atom:link href="http://blog.jeffreyforman.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jeffreyforman.net</link>
	<description>That&#039;s my story, and I&#039;m sticking to it.</description>
	<lastBuildDate>Sat, 09 Feb 2013 01:57:05 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Wireless, now with more 802.11&#8242;s&#8230;</title>
		<link>http://blog.jeffreyforman.net/2013/02/08/wireless-now-with-more-802-11s/</link>
		<comments>http://blog.jeffreyforman.net/2013/02/08/wireless-now-with-more-802-11s/#comments</comments>
		<pubDate>Sat, 09 Feb 2013 01:57:05 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[Open Source/Internet]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=3117</guid>
		<description><![CDATA[With nothing else to do around here tonight while the whole state is shut down thanks to a blizzard, I should catch up on some blog posts. On my list of home network upgrades for the past several months was the wireless. As my wife and I add to our collection of smart phones, laptops, [...]]]></description>
				<content:encoded><![CDATA[<p>With nothing else to do around here tonight while the whole state is shut down thanks to a blizzard, I should catch up on some blog posts.</p>
<p>On my list of home network upgrades for the past several months was the wireless. As my wife and I add to our collection of smart phones, laptops, tablets, and wireless streaming devices (I am looking at you EOL <a href="http://www.amazon.com/Logitech-Companion-Google-Keyboard-Controller/dp/B0040QE98O">Logitech Revue with Google TV</a>) the amount of latency and available bandwidth started to show signs of strain. I had been running the wireless for several years on an Asus <a href="http://www.asus.com/Networking/WL500gP_V2">WL-500G Premium v2</a> router/wap, which only ran 802.11b/g over 2.4Ghz. It was time for an upgrade.</p>
<p>Welcome our new <a href="http://www.asus.com/Networking/RTN66U">Asus RT-N66U</a> 802.11b/g/n router/wap that handles dual channel 2.4Ghz and 5Ghz wifi.</p>
<p>I did some very unscientific comparisons before and after I performed the hardware upgrade. I pushed and pulled a ~763MB Ubuntu ISO across the wireless, through a 10/100Mb switch, via rsync over SSH from a server on the LAN. The following table shows rsync&#8217;s average speed and transfer duration from the point of view of a 15&#8243; Macbook Pro connected via the wifi.</p>
<table>
<tbody>
<tr>
<th></th>
<th>Old Wifi</th>
<th>New Wifi 2.4Ghz</th>
<th>New Wifi 5Ghz</th>
</tr>
<tr>
<td>Upload</td>
<td> 1.87MB/s (6:46)</td>
<td> 7.69MB/s (1:39)</td>
<td> 5.57MB/s (2:17)</td>
</tr>
<tr>
<td>Download</td>
<td> 2.61MB/s (4:51)</td>
<td> 10.81MB/s (1:10)</td>
<td> 10.39MB/s (1:13)</td>
</tr>
</tbody>
</table>
<p>Needless to say, I am keeping the new router.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2013/02/08/wireless-now-with-more-802-11s/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>California 2012, thricely.</title>
		<link>http://blog.jeffreyforman.net/2012/12/29/california-2012-thricely/</link>
		<comments>http://blog.jeffreyforman.net/2012/12/29/california-2012-thricely/#comments</comments>
		<pubDate>Sat, 29 Dec 2012 19:01:22 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[Food]]></category>
		<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=3069</guid>
		<description><![CDATA[Condensed version of trip #3 to California. San Diego Sushi Ota: Sake and sushi with Mozilla folks. For the quality of the sushi (incredible), the price (reasonable) blew me away. Tajima: Ramen! The spicy miso ramen here lives up to its name, be prepared. Fish Market Cucina Urbana: Serious Italian, and a wine list to [...]]]></description>
				<content:encoded><![CDATA[<p>Condensed version of trip #3 to California.</p>
<h2>San Diego</h2>
<ul>
<li>Sushi Ota: Sake and sushi with Mozilla folks. For the quality of the sushi (incredible), the price (reasonable) blew me away.</li>
<li>Tajima: Ramen! The spicy miso ramen here lives up to its name, be prepared.</li>
<li>Fish Market</li>
<li>Cucina Urbana: Serious Italian, and a wine list to match. Funky interior too.</li>
<li>Davanti Enoteca: Good tripe dish</li>
</ul>
<h2>San Francisco</h2>
<ul>
<li>State Bird Provisions: Dim sum delivery, California style.</li>
<li>Black Point Cafe: Coffee refuel near the Golden Gate Bridge. Killer latte. Gary Danko</li>
<li>Spruce: The duck. Yes, get the duck.</li>
<li>Philz Coffee: No justification needed. Had to restock the East Coast supply.</li>
<li>Acqurello</li>
<li>Izakaya Roku: More ramen! Sake!</li>
<li>Humphry Slocombe: Blue Bottle Vietnamese Coffee Ice Cream. Good lord. I can now die a happy man.</li>
<li>Incanto: Charcuterie zen master.</li>
</ul>
<h2>Napa/St Helena</h2>
<ul>
<li>White Rock Winery: We happened upon this one as they were dumping out the lower quality wine. So sad.</li>
<li>Oakville Grocery Co: Mid-Napa refuel. Bread, cheese, meats.</li>
<li>Saddleback Cellars</li>
<li>Gott&#8217;s Roadside: The juxtaposition of this in Napa is pretty jarring. Their milkshakes are a nice divider between all the wine.</li>
<li>Stag&#8217;s Leap Wine Cellars: This is where I cemented the fact that I like the smaller wineries, rather than the commercial behemoths.</li>
<li>Cliff Lede Winery</li>
<li>Morimoto Napa</li>
</ul>
<h2>Central California Coast</h2>
<ul>
<li>La Bicyclette (Carmel): Pizza, charcuterie, cheese. Take out. To be returned.</li>
<li>Sierra Mar at Post Ranch Inn (Big Sur): One of the most spectacular sunset views on the Pacific Coast. Food is damn tasty too.</li>
<li>Big Sur Bakery: Brunch doesn&#8217;t start until 1030am, but the fruit strudel and latte&#8217;s are killer.</li>
<li>Dover Canyon Winery: Our first foray into Paso Robles wines. Unexpectedly awesome. Along with their 185 lb. St Bernard named Thunder.</li>
<li>Turley Winery</li>
<li>Whalebone: Free chili with every tasting. Clutch with all the damn rain.</li>
<li>Adelaide Winery</li>
<li>Olavino: Olive oil and salt, one made with ghost chili. Holy crap. and holy good.</li>
<li>L&#8217;Adventure Winery</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2012/12/29/california-2012-thricely/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nagios and Git hooks, a redux</title>
		<link>http://blog.jeffreyforman.net/2012/10/06/nagios-and-git-hooks-a-redux/</link>
		<comments>http://blog.jeffreyforman.net/2012/10/06/nagios-and-git-hooks-a-redux/#comments</comments>
		<pubDate>Sat, 06 Oct 2012 22:29:03 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[Open Source/Internet]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=721</guid>
		<description><![CDATA[A while back I blogged about how I hooked up Nagios and Git to run the Nagios preflight checks before restarting with a new checkin&#8217;s worth of configs. But the more I looked at how it all fit together, the more I knew it could be improved. A sed hack, expecting a certain pattern in [...]]]></description>
				<content:encoded><![CDATA[<p>A while back <a title="Howto: Git, hooks, Nagios, oh my." href="http://blog.jeffreyforman.net/2010/11/16/howto-git-hooks-nagios-oh-my/" target="_blank">I blogged about how I hooked up Nagios and Git</a> to run the Nagios preflight checks before restarting with a new checkin&#8217;s worth of configs. But the more I looked at how it all fit together, the more I knew it could be improved. A sed hack, expecting a certain pattern in the nagios.cfg? Bad bad bad. Most of the improvement revolves around Nagios&#8217;s ability to reference relative paths for its config files. Given the path of the &#8216;main&#8217; nagios.cfg file, you can then reference directories that contain your services, hosts, and other custom commands, in relation to that main file. With this functionality I significantly improved the Git->Nagios pipeline.</p>
<p>First, the pre-receive hook</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash
umask 022

while read OLD_SHA1 NEW_SHA1 REFNAME; do
  export GIT_WORK_TREE=/tmp/nagiostest-$NEW_SHA1
  mkdir -p $GIT_WORK_TREE
  /usr/bin/git checkout -f $NEW_SHA1
  sudo /usr/sbin/nagios3 -v $GIT_WORK_TREE/nagios.cfg
  if [ &quot;$?&quot; -ne &quot;0&quot; ]
  then
    echo &quot;Nagios Preflight Failed&quot;
    echo &quot;See the above error, fix your config, and re-push to attempt to update Nagios.&quot;
    exit 1
  else
    echo &quot;Nagios Preflight Passed&quot;
    echo &quot;Clearing temporary work directory.&quot;
    rm -rf $GIT_WORK_TREE
    exit 0
  fi
done
</pre>
<p>Using the <a href="http://git-scm.com/2010/04/11/environment.html" target="_blank">GIT_WORK_TREE environment variable</a>, which specifies Git&#8217;s working directory, I check out the new set of potential configs to a temporary directory. This provides a temporary &#8216;waiting room&#8217; for the proposed configuration to be tested, before before being put into production. Imagine never (intentionally) breaking Nagios again because of a broken host or service specification. The main thing remember is that all references in the nagios.cfg to other config files (hosts, commands, etc) must be relative paths. I.E., I have lines that look like &#8220;cfg_dir=configs&#8221; in the nagios.cfg. Note the lack of absolute paths. We now run the Nagios pre-flight check (nagios -v) on the nagios.cfg in the Git work tree. Depending upon the exit value of &#8216;nagios -v&#8217;, 0 for success and 1 for failure, we either proceed or die immediately. If success, clean up our temporary run directory.</p>
<p>Now the post-receive hook:</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/sh

echo &quot;Updating repo /etc/nagios3&quot;
sudo /usr/bin/update-gitrepo /etc/nagios3
</pre>
<p>The post-receive hook merely runs a script, noted below, on the Nagios configuration directory.</p>
<p>Update-gitrepo:</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/sh
umask 022

REPO_DIR=$1
cd ${REPO_DIR}

/usr/bin/git pull origin master
</pre>
<p>Given the Git checkout&#8217;s directory, we fetch the most recent push to the repository.</p>
<p>For the final step we have to fix some permissions (given that my setup runs the repository through Gitolite as the git user). This hook is located in the actual checkout itself, /etc/nagios3, in the post-merge hook.</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/sh

sudo chown -R nagios:admin /etc/nagios3
sudo /etc/init.d/nagios3 restart
</pre>
<p>A full commit and restart looks like this:</p>
<pre class="brush: bash; title: ; notranslate">
jforman@merlot:/mnt/raid1/personal/git/monitor/nagios/configs$ git push
Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 414 bytes, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: Previous HEAD position was c80fa03... turn off test notifications with notifications_enabled 0
remote: HEAD is now at f088dbc... Example: Add boilerplate header that file is managed by Git.
remote: 
remote: Nagios Core 3.2.3
remote: Copyright (c) 2009-2010 Nagios Core Development Team and Community Contributors
remote: Copyright (c) 1999-2009 Ethan Galstad
remote: Last Modified: 10-03-2010
remote: License: GPL
remote: 
remote: Website: <a href="http://www.nagios.org" rel="nofollow">http://www.nagios.org</a>
remote: Reading configuration data...
remote:    Read main config file okay...
remote: Processing object config file '/tmp/nagiostest-f088dbcebf194edbce78068b6004cbbfca703432/commands.cfg'...
remote: Processing object config directory '/etc/nagios-plugins/config'...
remote: Processing object config file '/etc/nagios-plugins/config/ftp.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/mail.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/snmp_int.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/nt.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/http.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/real.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/check_nrpe.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/snmp_storage.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/disk.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/mysql.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/snmp_load.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/fping.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/dhcp.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/ssh.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/rpc-nfs.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/mailq.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/breeze.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/dummy.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/netware.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/hppjd.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/load.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/mrtg.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/apt.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/snmp_cpfw.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/snmp.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/snmp_process.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/snmp_env.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/news.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/ntp.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/telnet.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/users.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/snmp_mem.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/procs.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/ifstatus.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/games.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/disk-smb.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/tcp_udp.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/snmp_win.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/ping.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/pgsql.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/ldap.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/flexlm.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/dns.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/radius.cfg'...
remote: Processing object config file '/etc/nagios-plugins/config/snmp_vrrp.cfg'...
remote: Processing object config directory '/tmp/nagiostest-f088dbcebf194edbce78068b6004cbbfca703432/configs'...
remote: Processing object config file '/tmp/nagiostest-f088dbcebf194edbce78068b6004cbbfca703432/configs/timeperiods.cfg'...
remote: Processing object config file '/tmp/nagiostest-f088dbcebf194edbce78068b6004cbbfca703432/configs/services.cfg'...
remote: Processing object config file '/tmp/nagiostest-f088dbcebf194edbce78068b6004cbbfca703432/configs/commands.cfg'...
remote: Processing object config file '/tmp/nagiostest-f088dbcebf194edbce78068b6004cbbfca703432/configs/hosts.cfg'...
remote: Processing object config file '/tmp/nagiostest-f088dbcebf194edbce78068b6004cbbfca703432/configs/abstracts.cfg'...
remote: Processing object config file '/tmp/nagiostest-f088dbcebf194edbce78068b6004cbbfca703432/configs/contacts.cfg'...
remote:    Read object config files okay...
remote: 
remote: Running pre-flight check on configuration data...
remote: 
remote: Checking services...
remote: 	Checked 95 services.
remote: Checking hosts...
remote: 	Checked 10 hosts.
remote: Checking host groups...
remote: 	Checked 7 host groups.
remote: Checking service groups...
remote: 	Checked 0 service groups.
remote: Checking contacts...
remote: 	Checked 3 contacts.
remote: Checking contact groups...
remote: 	Checked 2 contact groups.
remote: Checking service escalations...
remote: 	Checked 0 service escalations.
remote: Checking service dependencies...
remote: 	Checked 56 service dependencies.
remote: Checking host escalations...
remote: 	Checked 0 host escalations.
remote: Checking host dependencies...
remote: 	Checked 0 host dependencies.
remote: Checking commands...
remote: 	Checked 181 commands.
remote: Checking time periods...
remote: 	Checked 4 time periods.
remote: Checking for circular paths between hosts...
remote: Checking for circular host and service dependencies...
remote: Checking global event handlers...
remote: Checking obsessive compulsive processor commands...
remote: Checking misc settings...
remote: 
remote: Total Warnings: 0
remote: Total Errors:   0
remote: 
remote: Things look okay - No serious problems were detected during the pre-flight check
remote: Nagios Preflight Passed
remote: Clearing temporary work directory.
remote: Updating repo /etc/nagios3
remote: From monitor:nagios
remote:  * branch            master     -&gt; FETCH_HEAD
remote: Updating c80fa03..f088dbc
remote: Fast-forward
remote:  configs/commands.cfg |    2 ++
remote:  1 file changed, 2 insertions(+)
remote:  * Restarting nagios3 monitoring daemon nagios3
remote: Waiting for nagios3 daemon to die..
remote:    ...done.
To git@monitor:nagios.git
   c80fa03..f088dbc  master -&gt; master
</pre>
<p>Note that I do keep the Nagios package bundled commands in the /etc/nagios-plugins directory and have purposely not put those in the Git tree. This allows for updated Nagios packages from Ubuntu to update those commands accordingly without interfering with the Git repo.</p>
<p>Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2012/10/06/nagios-and-git-hooks-a-redux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remind Me: Damage done in San Francisco in six days</title>
		<link>http://blog.jeffreyforman.net/2012/03/24/remind-me-damage-done-in-san-francisco-in-six-days/</link>
		<comments>http://blog.jeffreyforman.net/2012/03/24/remind-me-damage-done-in-san-francisco-in-six-days/#comments</comments>
		<pubDate>Sat, 24 Mar 2012 17:52:49 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[Food]]></category>
		<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=707</guid>
		<description><![CDATA[I am lucky enough to have a sister living out in San Francisco, and to be able to work out of our offices there. Below is a hit list of the places I ate at and visited in the span of six days. My stomach has finally recovered. Wineries (Sonoma County): Preston Vineyards: https://www.prestonvineyards.com/com Unti [...]]]></description>
				<content:encoded><![CDATA[<p>I am lucky enough to have a sister living out in San Francisco, and to be able to work out of our offices there. Below is a hit list of the places I ate at and visited in the span of six days. My stomach has finally recovered.</p>
<p>Wineries (Sonoma County):</p>
<ul>
<li>Preston Vineyards: <a href="https://www.prestonvineyards.com/com" rel="nofollow">https://www.prestonvineyards.com/com</a></li>
<li>Unti Vineyards: <a href="http://www.untivineyards.com/" rel="nofollow">http://www.untivineyards.com/</a></li>
<li>Bella Vineyards and Wine Caves: <a href="http://www.bellawinery.com/" rel="nofollow">http://www.bellawinery.com/</a></li>
<li>Truett Hurst Vineyards: <a href="http://www.truetthurst.com/" rel="nofollow">http://www.truetthurst.com/</a></li>
<li>Dry Creek General Store: <a href="http://drycreekgeneralstore1881.com/" rel="nofollow">http://drycreekgeneralstore1881.com/</a></li>
</ul>
<p>Both of us are lucky enough to have been through Napa several times, so we decided to venture into Sonoma County. The last item in that list is an unsuspecting general store off of Dry Creek Road in Heldsburg which has an incredible sandwich list. This area turns Napa on its head, with a much more family-run low-key atmosphere. There is none of the pretense of visiting a large production winery such as Mondavi or the herds of people who visit Duckhorn.</p>
<p>To Eat:</p>
<ul>
<li>Izakaya Sozai: <a href="http://www.izakayasozai.com/" rel="nofollow">http://www.izakayasozai.com/</a></li>
<li>Burma Superstar: <a href="http://www.burmasuperstar.com/" rel="nofollow">http://www.burmasuperstar.com/</a></li>
<li>Bar Bambino: <a href="http://barbambino.com/" rel="nofollow">http://barbambino.com/</a></li>
<li>Yank Sing: <a href="http://www.yanksing.com/" rel="nofollow">http://www.yanksing.com/</a></li>
<li>La Folie: <a href="http://www.lafolie.com/" rel="nofollow">http://www.lafolie.com/</a></li>
<li>Hog Island Oysters (Marshall, CA): <a href="http://www.hogislandoysters.com/" rel="nofollow">http://www.hogislandoysters.com/</a></li>
<li>Mission Chinese: <a href="http://www.missionchinesefood.com/" rel="nofollow">http://www.missionchinesefood.com/</a></li>
<li>Foreign Cinema: <a href="http://www.foreigncinema.com/" rel="nofollow">http://www.foreigncinema.com/</a></li>
</ul>
<p>I cannot recommend every one of these places enough. Izakaya Sozai serves killer ramen. Yank Sing serves dim sum on weekend mornings that melt in your mouth. Shuck your own oysters at Hog Island (we learned in about 30 seconds) at the farm while sitting on benches along Tomales Bay. Mission Chinese blasts gangster rap while you gorge yourself on craveable Chinese food.</p>
<p>Go, eat, recover later.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2012/03/24/remind-me-damage-done-in-san-francisco-in-six-days/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Internet is slow. Is the Internet down?</title>
		<link>http://blog.jeffreyforman.net/2012/03/11/the-internet-is-slow-is-the-internet-down/</link>
		<comments>http://blog.jeffreyforman.net/2012/03/11/the-internet-is-slow-is-the-internet-down/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 19:44:47 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[Open Source/Internet]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[smokeping]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=668</guid>
		<description><![CDATA[We have all heard the same questions at one point in our careers, &#8220;Is the Internet down?&#8221; or &#8220;Getting to X site is slow.&#8221; You scramble to a browser to see if Google, ESPN or the NY Times websites are up. Then you fire up traceroute. In some cases, the pages might load slowly, in [...]]]></description>
				<content:encoded><![CDATA[<p>We have all heard the same questions at one point in our careers, &#8220;Is the Internet down?&#8221; or &#8220;Getting to X site is slow.&#8221; You scramble to a browser to see if Google, ESPN or the NY Times websites are up. Then you fire up traceroute. In some cases, the pages might load slowly, in other cases not at all. These two situations are often downstream fallout of two connectivity issues: latency and packet loss. Latency is the time it takes for a packet to get from source to destination. The speed of light says the latency for one packet to get across the USA from New York to San Francisco is normally between 70-90ms [1]. Packet loss occurs when packets do not make it from their source to destination, being lost along the way. Many factors can contribute to packet loss, including overloaded routers and switches, service interruptions, and human error.</p>
<p>When diagnosing network issues between source and destination, it is helpful to have data to backup your suspicions of slow and inconsistent network performance. Insert <a href="http://oss.oetiker.ch/smokeping/">Smokeping</a>.</p>
<p><span id="more-668"></span></p>
<p>As part of a network and system monitoring arsenal, you might have Nagios configured for host and service monitoring, and Munin for graphing system metrics. But for monitoring network performance, I feel Smokeping fills that gap. Below are some notes I took getting Smokeping installed and running on a Ubuntu Linux VM at home.</p>
<p>I installed Smokeping from source, since the version in the Ubuntu repository (2.3.6 for Ubuntu Oneiric) is quite old compared to the latest release, 2.6.8, at the time of this post. After installing the various dependencies from the Ubuntu repo, I was able to build and install Smokeping under /opt/smokeping. One thing I do appreciate about Smokeping is that you can run it as any arbitrary user. No root needed!</p>
<p>First we need to configure Smokeping and verify it starts up.</p>
<p>Part of my <a href="http://oss.oetiker.ch/smokeping/doc/smokeping_config.en.html" target="_blank">Smokeping config</a>:</p>
<pre class="brush: plain; title: ; notranslate">
 imgcache = /opt/smokeping/htdocs/cache
 imgurl   = <a href="http://yourserver/smokeping/cache" rel="nofollow">http://yourserver/smokeping/cache</a>

+ random
 menu = random
 title = Random Hosts

++ utexas
 host = <a href="http://www.utexas.edu" rel="nofollow">http://www.utexas.edu</a>

++ stanford
 host = <a href="http://www.stanford.edu" rel="nofollow">http://www.stanford.edu</a>

++ mit
 host = media.mit.edu

++ multihost
 title = edu comparison
 host = /random/utexas /random/stanford /random/mit
 menu = EDU Host Comparison
 </pre>
<p>imgcache must be the absolute path on your webserver where Smokeping&#8217;s cgi process writes out png files. imgurl is the absolute URL where your httpd presents the imgcache directory.</p>
<p>What follows is a sample stanza under the &#8216;charts&#8217; category in the config. It contains three discrete Smokeping graphs to webservers found at the MIT&#8217;s Media Lab, University of Texas, and Stanford University. I picked these three hosts because they represent a variety of near, far, and trans-continental servers from my home in the Northeastern US. The last entry, multihost, creates one single graph with the three data points combined. The &#8216;host&#8217; parameter in this case contains three path-like references to the graphs we want consolidated into one graph.</p>
<p>To test that Smokeping starts up, execute the following:</p>
<pre class="brush: plain; title: ; notranslate">
jforman@testserver1 /opt/smokeping % ./bin/smokeping --config /opt/smokeping/etc/config --nodaemon
Smokeping version 2.006008 successfully launched.
Not entering multiprocess mode for just a single probe.
FPing: probing 3 targets with step 300 s and offset 161 s.
</pre>
<p>When you are ready to take the training wheels off, remove the &#8216;&#8211;nodaemon&#8217; argument, and put this command in your distribution&#8217;s rc.local file to be started at boot time.</p>
<p>To actually view the generated data in graphs, you will need CGI support configured in your httpd of choice. For the most part, I run Apache.</p>
<p>Snippets of required Apache configuration:</p>
<pre class="brush: xml; title: ; notranslate">
LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so
AddHandler cgi-script .cgi

Alias /smokeping &quot;/opt/smokeping/htdocs&quot;
&lt;Directory &quot;/opt/smokeping/htdocs&quot;&gt;
  Options Indexes MultiViews
  AllowOverride None
  Order deny,allow
  Allow from all
  Options ExecCGI
  DirectoryIndex smokeping.cgi
&lt;/Directory&gt;
</pre>
<p>I am not presenting my Smokeping install as a virtual host, so I have left that part out. Also take note that the httpd&#8217;s user needs to have permissions on the imgcache directory in your Smokeping config file. In my case, /opt/smokeping/htdocs/cache is 775 with www-data as the group.</p>
<p>Once things have been running for even a short as 30 minutes, you will begin to see data. An example of the the last three hours performance graph to MIT&#8217;s media lab:<br />
<img src="http://blog.jeffreyforman.net/wp-content/uploads/2012/03/mit_last_108001.png" alt="" title="mit_last_10800" width="697" height="315" class="aligncenter size-full wp-image-690" /></p>
<p>Here we see roughly a 10ms trip time from my host to MIT. The &#8216;smoke&#8217; around the green line indicates variance in the ping times. If more smoke is above the line, there was more occurances of longer ping times, if more smoke is underneath the colored line, there were ping times that came quicker than the average At around 1040am, we see ping times from 9ms to 16ms, the average being where the green line is drawn. Green indicating there was 0% packet loss.</p>
<p>An example of the multigraph is:<br />
<img src="http://blog.jeffreyforman.net/wp-content/uploads/2012/03/multihost_last_108001.png" alt="" title="multihost_last_10800" width="697" height="315" class="aligncenter size-full wp-image-701" /></p>
<p>What we see here is fairly stable latency to MIT and Stanford, but fluctuating latency to Univ of Texas. Latencies range from about 10ms to MIT (5 miles), 75-140ms to Univ of Texas (2000 miles), and 115ms to Stanford (3100 miles). Packet loss is minimal on all traces, as we see &#8220;0.0% av ls&#8221; on all three data points.</p>
<p>Hopefully this has been helpful for those who find this post, and a reminder for me on how I got things working for further installations (and re-installations) of Smokeping.</p>
<p>[1] AT&amp;T Network Latency: <a href="http://ipnetwork.bgtmo.ip.att.net/pws/network_delay.html">http://ipnetwork.bgtmo.ip.att.net/pws/network_delay.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2012/03/11/the-internet-is-slow-is-the-internet-down/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A home network overengineered: dhcpd, tsig keys, ddns</title>
		<link>http://blog.jeffreyforman.net/2012/02/18/a-home-network-overengineered-dhcpd-tsig-keys-ddns/</link>
		<comments>http://blog.jeffreyforman.net/2012/02/18/a-home-network-overengineered-dhcpd-tsig-keys-ddns/#comments</comments>
		<pubDate>Sat, 18 Feb 2012 12:39:08 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[Open Source/Internet]]></category>
		<category><![CDATA[sregonewild]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=664</guid>
		<description><![CDATA[I started to write this post, explaining how I upgraded my home network setup with a dhcpd server, multiple dns servers communicating securely via tsig keys along with dynamic dns, but the post became unwieldy and would have been thousands of words. Instead, I&#8217;ll post some links and gotcha&#8217;s and hints on how to make [...]]]></description>
				<content:encoded><![CDATA[<p>I started to write this post, explaining how I upgraded my home network setup with a dhcpd server, multiple dns servers communicating securely via tsig keys along with dynamic dns, but the post became unwieldy and would have been thousands of words. Instead, I&#8217;ll post some links and gotcha&#8217;s and hints on how to make it work a lot easier.</p>
<p>Links scoured and re-read in the process:</p>
<ul>
<li><a href="http://www.netlinxinc.com/index.php?view=article&amp;catid=14%3Aipam&amp;id=42%3Asecuring-zone-transfers-with-tsig&amp;option=com_content&amp;Itemid=2">Securing zone tranfers with TSIG</a></li>
<li><a href="http://www.cyberciti.biz/faq/unix-linux-bind-named-configuring-tsig/">Bind Security: Transaction Signatures (TSIG) Configuration</a></li>
<li><a href="http://www.grok.org.uk/docs/tsig.html">Security Zone Transfers With Bind 9</a></li>
</ul>
<p>Hints:</p>
<p>Manage the key files distributed to each of your DNS servers with some sort of config management system (I use Puppet). That way if you ever need to change a key or add a new one, it makes things a heck of a lot easier.</p>
<p>Don&#8217;t stick the TSIG key files inside your named.conf. This posses a security risk because anyone who can read your named.conf, now has access to your TSIG keys and can potentially update your zones. Instead, put them in their own files inside your bind etc directory, mark their perms as 640 (bind:bind, or the like) and use an include statement to get them into your named.conf</p>
<p>Following on that last point, use dns&#8217;s allow-update statement inside zone definitions on the master. You can either lock things down via IP (less secure) or via Key (more secure) so that only authorized processes or people can update your zones.</p>
<p>Gotcha&#8217;s:</p>
<p>If you have FreeBSD clients, don&#8217;t forget the &#8216;hostname&#8217; parameter in /etc/rc.conf. Otherwise you&#8217;ll request a lease from the dhcp server, but never tell your hostname, and therefore won&#8217;t get a record added to the ddns zone.</p>
<p>Notes:</p>
<p>Yes, this is a completely over-engineered solution on how to run a home network. It came to be because I play around with lots of VM&#8217;s at home, and to pique my curiosity bug, wanted to try to get things working end to end. Being able to ssh into the various Linux/OpenBSD/FreeBSD VMs by name made it a lot easier.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2012/02/18/a-home-network-overengineered-dhcpd-tsig-keys-ddns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remind Me: Initial Data in a Django class-based Form</title>
		<link>http://blog.jeffreyforman.net/2011/04/23/remind-me-initial-data-in-a-django-class-based-form/</link>
		<comments>http://blog.jeffreyforman.net/2011/04/23/remind-me-initial-data-in-a-django-class-based-form/#comments</comments>
		<pubDate>Sat, 23 Apr 2011 20:11:22 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[Open Source/Internet]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=643</guid>
		<description><![CDATA[I love Django&#8216;s class-based way of handling forms. You name the class, articulate each field (data point of your form), and attach it to a view. Voila. But what happens when you want some initial data in the form? Initial to the rescue! What your class might look like: If you now wanted to initialize [...]]]></description>
				<content:encoded><![CDATA[<p>I love <a href="http://www.djangoproject.com">Django</a>&#8216;s class-based way of handling <a href="http://docs.djangoproject.com/en/dev/ref/forms/fields/">forms</a>. You name the class, articulate each field (data point of your form), and attach it to a view. Voila. But what happens when you want some initial data in the form?</p>
<p>Initial to the rescue!</p>
<p>What your class might look like:</p>
<pre class="brush: python; title: ; notranslate">
class PersonForm(forms.Form):
    first_name = forms.CharField(max_length=100)
    last_name = forms.CharField(max_length=100)
    gender = forms.CharField(max_length=1)
    hair_color = forms.CharField(max_length=256)
</pre>
<p>If you now wanted to initialize your form for males with blonde hair, include this snippet in your view:</p>
<pre class="brush: python; title: ; notranslate">
form = PersonForm(initial = { 'gender' : &quot;M&quot;, 'hair_color' : &quot;blonde&quot; } )
</pre>
<p>Then pass that form as part of your render return:</p>
<pre class="brush: python; title: ; notranslate">
return render_to_response('add_person.htm', { 'form' : form })
</pre>
<p>This post is brought to you by #neverwantingtosearchtheinternetforthisagain, and StackOverflow for <a href="http://stackoverflow.com/questions/1882616/pass-an-initial-value-to-a-django-form-field">inspiration.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2011/04/23/remind-me-initial-data-in-a-django-class-based-form/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Boston Barcamp 6, Day Two</title>
		<link>http://blog.jeffreyforman.net/2011/04/17/boston-barcamp-6-day-two/</link>
		<comments>http://blog.jeffreyforman.net/2011/04/17/boston-barcamp-6-day-two/#comments</comments>
		<pubDate>Sun, 17 Apr 2011 22:37:49 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[Boston]]></category>
		<category><![CDATA[Open Source/Internet]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=640</guid>
		<description><![CDATA[Finally got this post out after having a bit of a busy week. &#160; Location based networking, anurag wakhlu (coloci inc) http://goo.gl/mxAtd location based apps: where are you now? or where will you be? where are you now: foursquare, gowalla, loopt, etc where will you be: coloci, fyesa, tripit, plancast interest based networking: the reason [...]]]></description>
				<content:encoded><![CDATA[<h4>Finally got this post out after having <a href="http://googleblog.blogspot.com/2011/04/ita-software-acquisition-cleared-for.html">a bit of a busy week</a>.<br />
&nbsp;</p>
<p><strong>Location based networking, anurag wakhlu (coloci inc)</strong><br />
<a href="http://goo.gl/mxAtd"><strong><a href="http://goo.gl/mxAtd" rel="nofollow">http://goo.gl/mxAtd</a></strong></a></p>
<ul>
<li>location based apps: where are you now? or where will you be?</li>
<li>where are you now: foursquare, gowalla, loopt, etc</li>
<li>where will you be: coloci, fyesa, tripit, plancast</li>
<li>interest based networking: the reason to talk to someone who is near you. tie an interest: sending someone a coupon when they are near starbucks. if they arent near starbucks, what good is a coupon?</li>
<li>proactive coupons: dont wait for a check-in. if someone is 2 blocks from starbucks, send them a notification for coupon. ex// minority report. walk by a billboard, recognizes you, tailors ad specifically to you.</li>
</ul>
<p>52% of US consumers willing to share location for retail perks.</p>
<ul>
<li>foursquare background checkin? automatically check you in when you are in a close enough vicinity to a location</li>
<li>Do privacy concerns have a potential impact on services becoming more popular? ex// European privacy laws about broadcasting who you are, where you are, etc.</li>
<li>Have to trust your device that when you disallow authority to know your location, it actually does not broadcast where you are.</li>
<li>Trade off of convenience versus privacy. Debit card is a lot more convenient than cash, people are more than likely to give up privacy.</li>
<li>If you really want to not be tracked, you really need to disconnect yourself from the computer. Go cash only. Re-education might help. &#8220;You might already be sharing this info somewhere else, so what difference is it now that you do it via your phone?&#8221;</li>
<li>Tracking someone&#8217;s history via CSS visited tag. Firefox supposedly has fixed this issue where websites cannot do this anymore.</li>
<li>Using EZpass, who is responsible for giving a ticket if you did 60 miles in faster than 60 minutes? Using your location to know your broke the law.</li>
</ul>
<p><em>At the start, Anurag gave a wonderfully succint history of location based networking, highighting the current giants like Foursquare and Facebook Places. We talked about how the potential is there to enable your phone to alert you about consumer deals in your vicinity, having more of a &#8216;push&#8217; aspect to networking, or your phone could alert you to friends being near as well. Eventually though, the attendants turned the talk into a big privacy discussion. Not necessarily as flame-worthy as it could have been, but still talking about how much of our information we want to broadcast and allow to advertisers. Broadcasting location and private information. Could the situation eventually get to the point like Minority Report where your phone is overtly/covertly broadcasting who you are to potential advertisers or other potentially nefarious people.</em></p>
<p><strong>Economics of open source</strong></p>
<ul>
<li>reputation is a kind of currency. ancillary benefits of &#8216;being known.&#8217; ex// popular github repo, can get you a book deal, flown to conferences, etc.</li>
<li>are we cheapening what we do by giving it away? software produces so much cash for people. not everything is oss. still need people to customize it and apply.</li>
<li>discussion: can donations kill a project? the comptroller decides who gets money, and those who donate time but dont get paid feel slighted, and the project can take a nose dive.</li>
</ul>
<p><em>Content of presentation was a bit bland/dry, but the discussion was involved. War story: giving training away for free when a company charges for it. you are hurting the ecosystem by giving it away rather than someone paying for it. This was fairly interesting, delving past the common topic of software being &#8216;free as in beer.&#8217; </em></p>
<p><strong>Interviewing well as a coder round table</strong></p>
<ul>
<li>feel okay sitting there for a couple minutes thinking. Dont feel stressed to start writing code right away.</li>
<li>some questions to ask you to regurgitate syntax. what happens if you get confused between languages.</li>
<li>design issues &#8220;show us where you would add X feature.&#8221; stylistics versus code syntax.</li>
<li>code portfolios: employers look at your github profile. see the code you&#8217;ve written. if your code is &#8216;too good&#8217;, employer wants you to find bugs in their code.</li>
<li>how to practice your whiteboarding skills? codekata: short programming problems.</li>
<li>asking questions that there is no solution to. can you be an asshole interviewing?</li>
<li>be prepared for personal questions because employers will google you and find your personal interests</li>
<li>spin negative questions as positive: what do you see improving in your work environment?</li>
<li>questions back to employee: what do you hope to improve for our company?</li>
<li>if you list a skill in your skills list, be ready to whiteboard the code.</li>
</ul>
<p><strong>Can the internet make you healthier? jason jacobs, runkeeper founder</strong></p>
<ul>
<li>convergence of health/athletic data and IT</li>
<li>virtual coaching: ahead/behind pace, in-app reminders to go faster or slower on their iOS app.</li>
</ul>
<p><em>The more data you have over what you&#8217;re doing physically, can help you react. How am I doing against my peers? This was interesting, since Jason sees his company&#8217;s first product &#8216;Run Keeper&#8217; as the jumping off point to more athletic-body sensing applications. The point was raised about what point does the app which suggests a certain pace while running, dance the line of being medical advice. I think it is a good point, that the app needs more information about your health before suggesting a certain distance or pace for exercise. I&#8217;ll be curious myself as I use the app more, how I am improving athletically. </em></p>
<p>Overall, I found the signal-to-noise ratio of the unconference to be very high. For my first Barcamp, I would suggest it to all technically-inclined folks who just want to let their interests and imaginations plot the course of which talks they attend. I know I will be a repeat attendee.</h4>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2011/04/17/boston-barcamp-6-day-two/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Barcamp Boston 6, Day One</title>
		<link>http://blog.jeffreyforman.net/2011/04/10/barcamp-boston-6-day-one/</link>
		<comments>http://blog.jeffreyforman.net/2011/04/10/barcamp-boston-6-day-one/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 12:13:22 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[Boston]]></category>
		<category><![CDATA[Open Source/Internet]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ops]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=633</guid>
		<description><![CDATA[Having never been to a Barcamp before, I knew the overall structure of the conference, but was curious if I would actually like it. Truth be told, I found it full of content, without a lot of fluff, even for the talks I sat in on where I had no prior knowledge. My notes follow, [...]]]></description>
				<content:encoded><![CDATA[<p>Having never been to a Barcamp before, I knew the overall structure of the conference, but was curious if I would actually like it. Truth be told, I found it full of content, without a lot of fluff, even for the talks I sat in on where I had no prior knowledge. My notes follow, thanks to the great OSX app <a href="http://notational.net/">Notational Velocity</a> hooked up to <a href="http://simplenoteapp.com/">Simplenote</a>. My overall thoughts in italic after each post.:</p>
<p><strong>how to give a presentation people love and learn from</strong><br />
break presentation into 7-10 minute chunks<br />
then transition 7 minutes into the talk to another topic, to keep people&#8217;s attention<br />
insert emotion, a story. rather than just X happened.<br />
<em>(For a talk to be this meta, a presentation about giving presentations, I was not hooked. There weren&#8217;t any real nuggets of information here that made me sit up and say &#8220;Wow, I haven&#8217;t been doing this in the presentation I make.&#8221;)</em></p>
<p><strong>how to run a startup like genghis khan</strong>,<strong> by @wufoo</strong></p>
<ul>
<li>work like a nomad</li>
<li>build an audience first. protect your audience. make the audience part of the show.</li>
<li>make developers handle support requests. once devs get same question two or three times, they go in and fix the code so they dont get the question again.</li>
</ul>
<p><em>(Presenter absolutely killed it. Engaging, fast talking (without mumbling), great slides that presented the information in clear and sometimes humorous ways. Made me think more about engaging the people I am trying to convince to my way of thinking)</em></p>
<p><strong>android developer: war stories and antipatterns</strong><br />
<strong>yoni, lead android dev at scavngr</strong></p>
<ul>
<li>dont code splashscreens. more of an iOS thing. if you have to preload data, show a progress bar in the app already open</li>
<li>dont force orientation (landscape/portrait). support both</li>
<li>dont assume their screen size. use relative layouts</li>
</ul>
<p><em>(I went into this talk curious and with no prior experience or knowledge of writing an Android app. I don&#8217;t even own an Android phone. This was much more a round table, with those devs in the room very willing to share their experiences and war stories. I found they really had good experiential tips, rather than &#8220;This is the best practice&#8221; and moving on.)</em></p>
<p><strong>ask a plasma physics grad student anything</strong><br />
<em>(I must say this was completely over my head. The student at the front of the room, from <a href="http://www.psfc.mit.edu/">MIT&#8217;s Plasma Science and Fusion Center</a>, seemed to know his stuff and was genuienly interested in challenging the audience. What blew me away was the knowledge of the audience, asking very pointed questions with what sounded like real science to back it up.)</em></p>
<p><em></em><strong>building fast websites, making users happy (@jonathanklein)</strong></p>
<ul>
<li>google injected 400ms delay into search page, dropped 0.76% searches/users over time.</li>
<li>phpied.com/the-performance-business-pitch</li>
<li>faster sites rank better in google. site speed is part of search ranking.</li>
<li>what&#8217;s load time? server side generation time, client side render time. 80-90% of load time takes place on the client.</li>
<li>best practices:</li>
<li>reduce http requests: combine css/js, use image sprites (one download and cut up into multiple images).</li>
<li>minify css/jss: strip comments out and white space. (yuy, java library). will rename variables into shortest name possible</li>
<li>gzip all text: html, css, js</li>
<li>for graphics, use png8 (restricts you to 256 different colors in the image)</li>
<li>jpegs can be saved at 75% quality</li>
<li>image compressor: smush.it (from yahoo dev network), lossless compression.</li>
<li>measuring performance</li>
<li>google webmaster tools, <a href="http://www.webpagetest.org" rel="nofollow">http://www.webpagetest.org</a></li>
<li>yotta, firebug, yslow, page speed, dynatrace ajax edition</li>
</ul>
<p><em>(For an ops guy, I was really interested in this talk. Jonathan blew through his material at break-neck speed, but covered the topics and answered questions without feeling like the talk was broken up. Some really good information through his experiences, and things I would like to dig into more myself.) </em><br />
<strong></strong></p>
<p><strong>nosql round table</strong></p>
<ul>
<li>some are relational, others are key value</li>
<li>redis, redis + resque</li>
<li>cassandra</li>
<li>mongodb</li>
<li>why nosql over mysql? no schema, lack of migrations from version to version. being able to store different things. replication (single threaded)</li>
<li>keeping mysql in sync with nosql layer about: broadcast updates from mysql over rapidmq(?).  nosql service grabs update from mysql.</li>
<li>solutions that they discarded:</li>
<li>cassandra: v0.6, latency spikes between nodes. node would get flagged as awol. cascading failure because data gets rebalanced. use &#8220;hinted handoff&#8221; to prefer the direction of the failover. supposedly better in v0.7. documentation is messy.</li>
<li>in the cloud or in a dc? mostly EC2. local storage with evs slave.</li>
<li>search via solr</li>
</ul>
<p><em>(Another one where I went in having nothing but curiosity, since noSQL is one of the popular buzz words these days. Very engaged audience who shared war stories, both good and bad, implementing noSQL solutions in their workplaces. Left me with a stalk of websites to dig into.)</em></p>
<p><strong>agile development war stories</strong></p>
<ul>
<li>problems it tries to solve: waste. business approach.</li>
<li>more collab between business and engineering. dont just throw the &#8216;stories&#8217; from biz over the wall.</li>
<li>focus on testable behavior. how can we test each iteration? should be part of the original story.</li>
<li>be smaller, quicker, more iterative. ex// dont go off for 18 months planning your solution. business might change underneath you</li>
<li>people do &#8220;agile but..&#8221; and tend to modify the methodology.</li>
<li>burn down?</li>
<li>should tasks stay &lt;1 day? sounds a bit unreasonable, since &#8220;speeding up the server by 20%&#8221; is unable to be done in one day. task size should have a reason.</li>
<li>average sprint time: 2 weeks</li>
<li>do a code review before the planning meeting. so estimations on a piece of work can be completed in the meeting. ex// dont trace the code for the 1st time in a meeting.</li>
<li>software to track scrums/managing stories: soft2, scrum ninja, team foundations studio (windows), white boards, index cards on a wall, ibm rational, pivotal tracker (good for distributed teams), mingle from softworks.</li>
</ul>
<p><em>(Another highly-concentrated buzzword round table where I was more curious than anything. Some real good information about what works and what doesn&#8217;t when it comes to managing time and projects. Lots to read up on here, and see if I can apply it to my daily work life.)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2011/04/10/barcamp-boston-6-day-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Boston Pillow Fight 2011</title>
		<link>http://blog.jeffreyforman.net/2011/04/03/boston-pillow-fight-2011/</link>
		<comments>http://blog.jeffreyforman.net/2011/04/03/boston-pillow-fight-2011/#comments</comments>
		<pubDate>Sun, 03 Apr 2011 13:57:05 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[Boston]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=611</guid>
		<description><![CDATA[The wife was off doing some graduate school work for the afternoon, so I took the camera and headed down to the Boston/Cambridge Pillow Fight in Cambridge Common to see exactly what all the hoopla was all about. Apparently this is an international event. I was not dissapointed. The Facebook Group for the event had [...]]]></description>
				<content:encoded><![CDATA[<p>The wife was off doing some graduate school work for the afternoon, so I took the camera and headed down to the <a href="http://www.misteriosos.org/">Boston/Cambridge Pillow</a> <a href="http://www.pillowfightday.com/2011/boston">Fight in Cambridge Common</a> to see exactly what all the hoopla was all about. Apparently this is an <a href="http://www.pillowfightday.com">international event.</a> I was not dissapointed. The Facebook Group for the event had over 3700 RSVP&#8217;s, and there were half as many photographers and on-lookers as actual participants.</p>
<p>One of my favorite pictures from the event:</p>
<div class="wp-caption aligncenter" style="width: 510px"><a title="DSC_0102.JPG" rel="lightbox" href="http://lh4.ggpht.com/_cnbEe_a1GyE/TZedQcl3i1I/AAAAAAAAALE/11Ad2ApoBQM/w1024/DSC_0102.JPG"><img class="" title="Pillow Fight Warrior" src="http://lh4.ggpht.com/_cnbEe_a1GyE/TZedQcl3i1I/AAAAAAAAALE/11Ad2ApoBQM/s500-c/DSC_0102.JPG" alt="" width="500" height="500" /></a><p class="wp-caption-text">Pillow Fight Warrior</p></div>
<p>Album for the event on <a href="https://picasaweb.google.com/jeffatjeffreyformannet/BostonCambridgePillowFight2011">my Picasa Web Album.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2011/04/03/boston-pillow-fight-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
