<?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. &#187; linux</title>
	<atom:link href="http://blog.jeffreyforman.net/tag/linux/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, 23 Apr 2011 20:13:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<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: &#8230; <a href="http://blog.jeffreyforman.net/2011/04/17/boston-barcamp-6-day-two/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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>http://goo.gl/mxAtd</strong></a><br />
* location based apps: where are you now? or where will you be?<br />
* where are you now: foursquare, gowalla, loopt, etc<br />
* where will you be: coloci, fyesa, tripit, plancast<br />
* 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?<br />
* 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.<br />
52% of US consumers willing to share location for retail perks.<br />
* foursquare background checkin? automatically check you in when you are in a close enough vicinity to a location<br />
* 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.<br />
* Have to trust your device that when you disallow authority to know your location, it actually does not broadcast where you are.<br />
* Trade off of convenience versus privacy. Debit card is a lot more convenient than cash, people are more than likely to give up privacy.<br />
* 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;<br />
* Tracking someone&#8217;s history via CSS visited tag. Firefox supposedly has fixed this issue where websites cannot do this anymore.<br />
* 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.<br />
<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><br />
* 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.<br />
* 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.<br />
* 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.<br />
<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><br />
* feel okay sitting there for a couple minutes thinking. Dont feel stressed to start writing code right away.<br />
* some questions to ask you to regurgitate syntax. what happens if you get confused between languages.<br />
* design issues &#8220;show us where you would add X feature.&#8221; stylistics versus code syntax.<br />
* 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.<br />
* how to practice your whiteboarding skills? codekata: short programming problems.<br />
* asking questions that there is no solution to. can you be an asshole interviewing?<br />
* be prepared for personal questions because employers will google you and find your personal interests<br />
* spin negative questions as positive: what do you see improving in your work environment?<br />
* questions back to employee: what do you hope to improve for our company?<br />
* if you list a skill in your skills list, be ready to whiteboard the code.</p>
<p><strong>Can the internet make you healthier? jason jacobs, runkeeper founder</strong><br />
* convergence of health/athletic data and IT<br />
* virtual coaching: ahead/behind pace, in-app reminders to go faster or slower on their iOS app.<br />
<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 &#8230; <a href="http://blog.jeffreyforman.net/2011/04/10/barcamp-boston-6-day-one/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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><br />
* work like a nomad<br />
* build an audience first. protect your audience. make the audience part of the show.<br />
* 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.<br />
<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><br />
* dont code splashscreens. more of an iOS thing. if you have to preload data, show a progress bar in the app already open<br />
* dont force orientation (landscape/portrait). support both<br />
* dont assume their screen size. use relative layouts<br />
<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><br />
* google injected 400ms delay into search page, dropped 0.76% searches/users over time.<br />
* phpied.com/the-performance-business-pitch<br />
* faster sites rank better in google. site speed is part of search ranking.<br />
* what&#8217;s load time? server side generation time, client side render time. 80-90% of load time takes place on the client.<br />
* best practices:<br />
* reduce http requests: combine css/js, use image sprites (one download and cut up into multiple images).<br />
* minify css/jss: strip comments out and white space. (yuy, java library). will rename variables into shortest name possible<br />
* gzip all text: html, css, js<br />
* for graphics, use png8 (restricts you to 256 different colors in the image)<br />
* jpegs can be saved at 75% quality<br />
* image compressor: smush.it (from yahoo dev network), lossless compression.<br />
* measuring performance<br />
* google webmaster tools, www.webpagetest.org<br />
* yotta, firebug, yslow, page speed, dynatrace ajax edition<br />
<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><br />
* some are relational, others are key value<br />
* redis, redis + resque<br />
* cassandra<br />
* mongodb<br />
* why nosql over mysql? no schema, lack of migrations from version to version. being able to store different things. replication (single threaded)<br />
* keeping mysql in sync with nosql layer about: broadcast updates from mysql over rapidmq(?).  nosql service grabs update from mysql.<br />
* solutions that they discarded:<br />
* 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.<br />
* in the cloud or in a dc? mostly EC2. local storage with evs slave.<br />
* search via solr<br />
<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><br />
* problems it tries to solve: waste. business approach.<br />
* more collab between business and engineering. dont just throw the &#8216;stories&#8217; from biz over the wall.<br />
* focus on testable behavior. how can we test each iteration? should be part of the original story.<br />
* be smaller, quicker, more iterative. ex// dont go off for 18 months planning your solution. business might change underneath you<br />
* people do &#8220;agile but..&#8221; and tend to modify the methodology.<br />
* burn down?<br />
* 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.<br />
* average sprint time: 2 weeks<br />
* 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.<br />
* 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.<br />
<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>Remind Me: Adding SNMP mibs for querying</title>
		<link>http://blog.jeffreyforman.net/2011/03/06/remind-me-adding-snmp-mibs-for-querying/</link>
		<comments>http://blog.jeffreyforman.net/2011/03/06/remind-me-adding-snmp-mibs-for-querying/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 18:18:20 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[apc]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[snmp]]></category>
		<category><![CDATA[ups]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=570</guid>
		<description><![CDATA[I was having issues trying to get Nagios to more easily query my APC UPS with the APC-provided MIB. It took me a while to figure out the right bits both on the file system and in my query to &#8230; <a href="http://blog.jeffreyforman.net/2011/03/06/remind-me-adding-snmp-mibs-for-querying/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I was having issues trying to get Nagios to more easily query my APC UPS with the APC-provided MIB. It took me a while to figure out the right bits both on the file system and in my query to have the MIB &#8216;processed.&#8217; I still don&#8217;t know how to add that MIB to the &#8220;automatically process me too if snmpwalk is run&#8221; piece of the puzzle.</p>
<p>But for what I have running a home, some notes for myself and others who ripped out enough hair already.</p>
<pre class="brush: bash; title: ; notranslate">
jforman@monitor:/usr/share/snmp/mibs$ ls
powernet401.mib

jforman@monitor:~$ cat /etc/snmp/snmp.conf
mibs +PowerNet-MIB

jforman@monitor:/usr/share/snmp/mibs$ snmpwalk -v1 -c snmpcommunity ups1 apc
PowerNet-MIB::upsBasicIdentModel.0 = STRING: &quot;SMART-UPS 700&quot;
PowerNet-MIB::upsBasicIdentName.0 = STRING: &quot;ups1&quot;
PowerNet-MIB::upsAdvIdentFirmwareRevision.0 = STRING: &quot;50.14.D&quot;
.....
</pre>
<p>Relevant Nagios configs:</p>
<pre class="brush: plain; title: ; notranslate">
define service {
       use                              generic-service
       check_command                    snmp_apcups_batterystatus!snmpcommunity
       service_description              UPS Battery Status
       host_name                        ups1
}

define command {
       # OID corresponds to: PowerNet-MIB::upsBasicBatteryStatus.0
       command_name      snmp_apcups_batterystatus
       command_line      /usr/lib/nagios/plugins/check_snmp -H '$HOSTADDRESS$' -C '$ARG1$' -o upsBasicBatteryStatus.0 -s &quot;batteryNormal(2)&quot;
}
</pre>
<p>Help and inspiration courtesy of <a href="http://www.cuddletech.com/articles/snmp/node13.html">http://www.cuddletech.com/articles/snmp/node13.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2011/03/06/remind-me-adding-snmp-mibs-for-querying/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Find, you are a dirty mistress</title>
		<link>http://blog.jeffreyforman.net/2010/05/14/find-you-are-a-dirty-mistress/</link>
		<comments>http://blog.jeffreyforman.net/2010/05/14/find-you-are-a-dirty-mistress/#comments</comments>
		<pubDate>Fri, 14 May 2010 17:42:30 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/2010/05/14/find-you-are-a-dirty-mistress/</guid>
		<description><![CDATA[In my latest task at work, I have to write a script to take the most recent file from a particular directory changed within the last 240 minutes and copy it to a particular dated directory, in YYYYMMDDHHMM style. After &#8230; <a href="http://blog.jeffreyforman.net/2010/05/14/find-you-are-a-dirty-mistress/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In my latest task at work, I have to write a script to take the most recent file from a particular directory changed within the last 240 minutes and copy it to a particular dated directory, in YYYYMMDDHHMM style.</p>
<p>After some digging in the &#8216;find&#8217; manual page and bothering a co-worker I present:</p>
<p>find $directory -mmin -240 -name &#8216;foobarstring&#8217; -printf &#8220;%p\n%CY%Cm%Cd%CH%CM\n&#8221;</p>
<p>This prints out on two successive lines:<br />
$(filename)<br />
$(dated string in the date format above)</p>
<p>The hardest part was getting the printf syntax right. When it works, it just works.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2010/05/14/find-you-are-a-dirty-mistress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do or do not&#8230;the use of Try, with Python and sqlite</title>
		<link>http://blog.jeffreyforman.net/2009/10/21/do-or-do-not-the-use-of-try-with-python-and-sqlite/</link>
		<comments>http://blog.jeffreyforman.net/2009/10/21/do-or-do-not-the-use-of-try-with-python-and-sqlite/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 00:13:03 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sqlite]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=245</guid>
		<description><![CDATA[I&#8217;ve been hacking around writing random Django apps and scripts lately and came across something I had been meaning to look into over the past couple weeks. What happens when you select a row of data from a database (mysql, &#8230; <a href="http://blog.jeffreyforman.net/2009/10/21/do-or-do-not-the-use-of-try-with-python-and-sqlite/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been hacking around writing random Django apps and scripts lately and came across something I had been meaning to look into over the past couple weeks. What happens when you select a row of data from a database (mysql, sqlite, whatever), that comes back empty and you try to iterate over it? Example: select * from authinfo where username = &#8220;foo&#8221;, and the user &#8216;foo&#8217; does not exist.</p>
<p>At first I thought:</p>
<pre class="brush: plain; title: ; notranslate">
if db_query.fetchone()[0]:
</pre>
<p>would work, but this only gives an error &#8220;TypeError: &#8216;NoneType&#8217; object is unsubscriptable.&#8221;</p>
<p>Then I remembered the try/except syntax, which worked great in this instance.</p>
<pre class="brush: plain; title: ; notranslate">
#!/usr/bin/env python
import sqlite3

username = &quot;testuser1&quot;
password = &quot;foobar&quot;

conn = sqlite3.connect(&quot;/home/jforman/testsqlite.db&quot;)
c = conn.cursor()
db_query = c.execute(&quot;select username from authinfo where username = '%s'&quot; % username)

try:
 db_output = db_query.fetchone()[0].strip()
 print &quot;output: %s&quot; % db_output
except TypeError:
 print &quot;no user found&quot;

c.close()
conn.close()
</pre>
<p>Am I expecting too much that Python can handle iterating over an empty line (and just skip the whole thing) ? Or is this just how it&#8217;s done, where every database query-related line is done in a try stanza?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2009/10/21/do-or-do-not-the-use-of-try-with-python-and-sqlite/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Configuring Gitweb on Ubuntu</title>
		<link>http://blog.jeffreyforman.net/2009/07/21/configuring-gitweb-on-ubuntu/</link>
		<comments>http://blog.jeffreyforman.net/2009/07/21/configuring-gitweb-on-ubuntu/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 17:48:52 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[Open Source/Internet]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=216</guid>
		<description><![CDATA[I&#8217;ve been digging into Git more lately as a revision control system for my personal stuff, and wanted a nice GUI way to visualize diffs in a browser. Enter Gitweb. I poked around and found bits and pieces of tutorials, &#8230; <a href="http://blog.jeffreyforman.net/2009/07/21/configuring-gitweb-on-ubuntu/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been digging into <a href="http://git-scm.com/">Git</a> more lately as a revision control system for my personal stuff, and wanted a nice GUI way to visualize diffs in a browser. Enter Gitweb. I poked around and found bits and pieces of tutorials, but nothing specific for Ubuntu. So I present to you my step-by-step on how I got it working viewing repos.</p>
<ul>
<li>Ensure you have a working Apache setup first.</li>
<li>Install the package: aptitude install gitweb</li>
<li>Edit your /etc/gitweb.conf. The most important setting in there is <em><strong>$projectroot</strong></em>, which is the parent directory of the Git repos you want to share.</li>
<li>Since I am not using a specific name-based virtual host for this, I just added the gitweb directory setup to the base Apache config. Since Ubuntu includes the entire /etc/apache2/conf.d dir, I just stuck the below in /etc/apache2/conf.d/gitweb:</li>
</ul>
<blockquote><p>RewriteEngine on<br />
RewriteRule ^/gitweb/([a-zA-Z0-9_\-]+\.git)/?(\?.*)?$ /cgi-bin/gitweb.cgi/$1 [L,PT]</p>
<p>Alias /gitweb /scratch<br />
&lt;Directory /scratch&gt;<br />
Options Indexes FollowSymlinks ExecCGI<br />
DirectoryIndex /cgi-bin/gitweb.cgi<br />
AllowOverride None<br />
&lt;/Directory&gt;</p></blockquote>
<p>/scratch, used above, is the parent directory of my Git repositories.</p>
<ul>
<li>The only gotcha I found in the installation, is that the gitweb.cgi by default expects its media related files, CSS, gifs, etc in the root directory of the URL. For simplicities sake, I just copied these files, found in  /usr/share/gitweb to /var/www. If you wish to change this, like most people will, just edit your gitweb.conf, which is found under /etc, and change the path to a place you expect the files to live.</li>
</ul>
<p>Hopefully this helps someone else setting up Gitweb. I am sure there are some security enhancements I could make surrounding Gitweb, but since this is a simple home installation, I did not go down that route.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2009/07/21/configuring-gitweb-on-ubuntu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Router, Asus WL-500gP2 and Tomato</title>
		<link>http://blog.jeffreyforman.net/2009/03/25/new-router-asus-wl-500gp2-and-tomato/</link>
		<comments>http://blog.jeffreyforman.net/2009/03/25/new-router-asus-wl-500gp2-and-tomato/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 00:30:40 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[Open Source/Internet]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[router]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=186</guid>
		<description><![CDATA[Last Sunday, I woke up to a dead Internet connection. Gmail, Cnn, ESPN, all wouldn&#8217;t load. Great. Checked the laptop wireless, no connection. Even better. Power cycled the cable modem and connected the laptop directly to it, and voila, I &#8230; <a href="http://blog.jeffreyforman.net/2009/03/25/new-router-asus-wl-500gp2-and-tomato/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last Sunday, I woke up to a dead Internet connection. Gmail, Cnn, ESPN, all wouldn&#8217;t load. Great. Checked the laptop wireless, no connection. Even better. Power cycled the cable modem and connected the laptop directly to it, and voila, I was back on the Internet. A dead Linksys WRT54G on my hands. It had served me well, but being a couple years old and not having the specs to run any of the newer versions of DD-WRT or Tomato.  I went to Newegg and checked out a new one to buy.</p>
<p>I settled on the Asus WL-500g Premium V2. While it was one of the more expensive ones (around $90), it had a serious amount of RAM and flash space. This allows for the bigger distributions of Linux to be installed which have more functionality. Being in Boston, normal Newegg shipping takes two days to get here.</p>
<p>It came in, I logged into the router, and tried to load the Tomato firmware via the &#8216;Firmware Upgrade&#8217; in the router&#8217;s web UI. The firmware file I tried was tomato.trx of the Tomato Linux firmware. The router complained about the firmware, saying the file was invalid. This is when I dreaded, did I download the wrong one? Will it not work?</p>
<p>I jumped back on the Tomato page and noticed that there was another download, a tomato-ND.trx that was for another Asus model, the WL-520. I tried this one via the same method above, and didn&#8217;t work. Further down I saw the tftp explanation, where you reset the router with a combination of holding in certain buttons and then send the file in. Running Linux,  I sent the file via:</p>
<p><code>atftp --verbose --trace -p -l tomato-ND.trx 192.168.1.1</code></p>
<p>This worked, file completed sending. I waited a couple minutes and didn&#8217;t see anything happen. With a great deal of trepidation, I hit the reset button, waited a minute or two, and I was greeted with the Tomato admin UI when I tried to browse to http://192.168.1.1.</p>
<p>So far I am pretty happy with it. I&#8217;ve been taking advantadge of the static DHCP and the dnsmasq functionality to be able refernece all my machines on the internal network by DNS name. The graphs of bandwidth usage are nice to see, but I don&#8217;t particularly use them much. Otherwise I use port forwarding to forward a single port to an internal machine for remote access.</p>
<p>Hopefully this helps others who use this combination of hardware and software.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2009/03/25/new-router-asus-wl-500gp2-and-tomato/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RAID array monitoring at home</title>
		<link>http://blog.jeffreyforman.net/2009/02/10/raid-array-monitoring-at-home/</link>
		<comments>http://blog.jeffreyforman.net/2009/02/10/raid-array-monitoring-at-home/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 12:12:43 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[Open Source/Internet]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[raid]]></category>

		<guid isPermaLink="false">http://blog.jeffreyforman.net/?p=148</guid>
		<description><![CDATA[Ever since I started using a simple RAID-1 setup at home, the only verification I had done to check on the status of the array was issuing some commands by hand on the command line.  I finally got around to &#8230; <a href="http://blog.jeffreyforman.net/2009/02/10/raid-array-monitoring-at-home/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ever since I started using a simple RAID-1 setup at home, the only verification I had done to check on the status of the array was issuing some commands by hand on the command line.  I finally got around to implementing something a bit more proactive using Nagios, its NRPE plugin tool, and a simple bash script that queries dmraid.</p>
<p>To cut to the chase, for those who understand Nagios syntax, the below two sections are added to my server&#8217;s Nagios configs.</p>
<pre class="brush: plain; title: ; notranslate">
define command {
command_name    check_nrpe
command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

define service {
use  generic-service
name check-raid
host_name $yourhosts
service_description Software Raid
check_command check_nrpe!check_raid
}
</pre>
<p>Servers who wish to have their RAID status checked, are added to the <em>host_name</em> parameter here, or can get the <em>services</em> tag added in the hostname definition.</p>
<p>The below code is added client-side to the nrpe.cfg, where the NRPE daemon is installed and listening. The command section assigns the <em>check_raid</em> command a simple script to run when the test is executed.</p>
<pre class="brush: plain; title: ; notranslate">
pinotnoir:/etc/nagios$ cat nrpe_local.cfg
command[check_raid]=/usr/lib/nagios/plugins/monitor_raid.sh
</pre>
<p>The script:</p>
<pre class="brush: plain; title: ; notranslate">
pinotnoir:/usr/lib/nagios/plugins$: cat monitor_raid.sh
#-----------------
#!/bin/sh
raid_status=`dmraid -s | grep status | awk '{print $3}'`
if [ &quot;$raid_status&quot; = &quot;ok&quot; ] ; then
echo &quot;RAID Status OK&quot;
exit 0
else
echo &quot;RAID Status NOT OKAY&quot;
exit 1
fi
</pre>
<p>This is the actual source of the script. As of the writing of this blog post, it only supports checking one RAID array using the <strong>dmraid</strong> utility.</p>
<p>Example output of dmraid is pasted below, where my script simple pulls out the status line.</p>
<pre class="brush: plain; title: ; notranslate">
pinotnoir:/usr/lib/nagios/plugins$ sudo dmraid -s
*** Active Set
name   : nvidia_bfecfffb
size   : 976773120
stride : 128
type   : mirror
status : ok
subsets: 0
devs   : 2
spares : 0
</pre>
<p>Understandably it is quite short and basic at this point, where I hope to have more scripts forth coming that provide more exposure into the status of the RAID array, and potentially support multiple arrays.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2009/02/10/raid-array-monitoring-at-home/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dual Head Nvidia in Ubuntu Linux 8.10</title>
		<link>http://blog.jeffreyforman.net/2008/11/01/dual-head-nvidia-in-ubuntu-linux-810/</link>
		<comments>http://blog.jeffreyforman.net/2008/11/01/dual-head-nvidia-in-ubuntu-linux-810/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 13:30:01 +0000</pubDate>
		<dc:creator>Jeff Forman</dc:creator>
				<category><![CDATA[Open Source/Internet]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">https://blog.jeffreyforman.net/?p=29</guid>
		<description><![CDATA[I recently blew away my desktop machine and installed the new Ubuntu Linux 8.10 Intepid Ibex released today. Since I have two monitors at home (2 x 21&#8243; Samsung 213T LCD&#8217;s), I normally use a dual-head setup. Easily enough there &#8230; <a href="http://blog.jeffreyforman.net/2008/11/01/dual-head-nvidia-in-ubuntu-linux-810/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I recently blew away my desktop machine and installed the new Ubuntu Linux 8.10 Intepid Ibex released today. Since I have two monitors at home (2 x 21&#8243; Samsung 213T LCD&#8217;s), I normally use a dual-head setup. Easily enough there is an application, nvidia-settings, that makes this stupid proof.</p>
<p>After doing the base install and firing up nvidia-settings, when saving the Xorg conf, the app crashed, Seg fault, wonderful. I ran it through strace which didn&#8217;t seem too helpful, complaining about a bunch of files not found. I thought if I &#8216;touched&#8217; the files, nvidia-settings would be happy. No love.</p>
<p>Running to Google I came across <a href="https://bugs.launchpad.net/ubuntu/+source/nvidia-settings/+bug/286424">this bug in Ubuntu&#8217;s Launchpad</a> bug tracker. I scanned the posts in there and found one that helped.</p>
<pre>rm /etc/X11/xorg.conf*</pre>
<p>and re-run nvidia-settings. When you go to save the Xorg conf, just give it the true path of the file you want to write, /etc/X11/xorg.conf. It seems that nvidia-settings does not like an incomplete xorg.conf, possibly unhappy about a missing ServerLayout section.</p>
<p>Quit the program, reboot, voila. Now dual head Ubuntu persists across reboots. I must imagine this bug is going to hit a lot of people, hope this helps!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeffreyforman.net/2008/11/01/dual-head-nvidia-in-ubuntu-linux-810/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

