<?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>intuitive engineering</title>
	<atom:link href="http://dougmunsinger.com/feed" rel="self" type="application/rss+xml" />
	<link>http://dougmunsinger.com</link>
	<description>doug munsinger</description>
	<lastBuildDate>Wed, 24 Feb 2010 19:42:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>home to Boston, daughter in remission</title>
		<link>http://dougmunsinger.com/2010/02/home-to-boston-daughter-in-remission.html</link>
		<comments>http://dougmunsinger.com/2010/02/home-to-boston-daughter-in-remission.html#comments</comments>
		<pubDate>Wed, 24 Feb 2010 19:42:54 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[daughter]]></category>
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://dougmunsinger.com/?p=792</guid>
		<description><![CDATA[My daughter is in remission from AML type M4.&#160;&#160; She is coming off a ventilator she&#39;s been on for 38 days now, in an ICU in California.&#160;

	I&#39;m leaving tomorrow after six weeks out with her.&#160; That&#39;s good &#8211; I miss being home, I miss my family in MA.&#160; I am so glad my daughter is [...]]]></description>
			<content:encoded><![CDATA[<p>My daughter is in remission from AML type M4.&nbsp;&nbsp; She is coming off a ventilator she&#39;s been on for 38 days now, in an ICU in California.&nbsp;</p>
<p>
	I&#39;m leaving tomorrow after six weeks out with her.&nbsp; That&#39;s good &#8211; I miss being home, I miss my family in MA.&nbsp; I am so glad my daughter is better enough that I can see leaving.</p>
<p>But leaving isn&#39;t easy, either.&nbsp;</p>
<p>&#8211;doug</p>
]]></content:encoded>
			<wfw:commentRss>http://dougmunsinger.com/2010/02/home-to-boston-daughter-in-remission.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>visually healthy bone marrow&#8230;</title>
		<link>http://dougmunsinger.com/2010/02/visually-healthy-bone-marrow.html</link>
		<comments>http://dougmunsinger.com/2010/02/visually-healthy-bone-marrow.html#comments</comments>
		<pubDate>Fri, 19 Feb 2010 00:12:04 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[news]]></category>
		<category><![CDATA[daughter]]></category>

		<guid isPermaLink="false">http://dougmunsinger.com/?p=788</guid>
		<description><![CDATA[Not something you hope to have to hope for&#8230;
&#160;
My daughter has visually more healthy bone marrow than she had 36 days ago when she came into the hospital in crisis.&#160;&#160; She has at least managed to knock the cancer back and rebuild a bone marrow that is not diseased.&#160; More detailed tests will look for [...]]]></description>
			<content:encoded><![CDATA[<p>Not something you hope to have to hope for&#8230;</p>
<p>&nbsp;</p>
<p>My daughter has visually more healthy bone marrow than she had 36 days ago when she came into the hospital in crisis.&nbsp;&nbsp; She has at least managed to knock the cancer back and rebuild a bone marrow that is not diseased.&nbsp; More detailed tests will look for any trace at all of cancerous marrow.&nbsp; I&#39;m hoping there will be none to find at all.&nbsp; That would be remission, the first step toward a life outside of a hospital room.</p>
<p>&nbsp;</p>
<p>&#8211;doug</p>
]]></content:encoded>
			<wfw:commentRss>http://dougmunsinger.com/2010/02/visually-healthy-bone-marrow.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>matter of the lungs</title>
		<link>http://dougmunsinger.com/2010/02/matter-of-the-lungs.html</link>
		<comments>http://dougmunsinger.com/2010/02/matter-of-the-lungs.html#comments</comments>
		<pubDate>Sun, 07 Feb 2010 18:02:01 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[entropy]]></category>
		<category><![CDATA[writers]]></category>
		<category><![CDATA[doughter]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://dougmunsinger.com/?p=783</guid>
		<description><![CDATA[I&#39;ve been willing my daughter to breathe for the last 24 days.&#160;
She came down with leukemia.&#160;&#160; Acute, dangerous and sudden leukemia that tried very hard to kill her.&#160; Right now she is on an oscillating ventilator, with two chest tubes, daily dialysis, and a wall of IVs you would have to see to believe.&#160; And [...]]]></description>
			<content:encoded><![CDATA[<p>I&#39;ve been willing my daughter to breathe for the last 24 days.&nbsp;</p>
<p>She came down with leukemia.&nbsp;&nbsp; Acute, dangerous and sudden leukemia that tried very hard to kill her.&nbsp; Right now she is on an oscillating ventilator, with two chest tubes, daily dialysis, and a wall of IVs you would have to see to believe.&nbsp; And she is still breathing.&nbsp;</p>
<p>I have a log rotation script I put together that works for my new employer, Constant Contact.&nbsp; I&#39;ll put that up soon enough.&nbsp;</p>
<p>
	As soon as she is out the other side of all of this.</p>
<p>&#8211;doug</p>
]]></content:encoded>
			<wfw:commentRss>http://dougmunsinger.com/2010/02/matter-of-the-lungs.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fall through code to a success&#8230;</title>
		<link>http://dougmunsinger.com/2009/12/fall-through-code-to-a-success.html</link>
		<comments>http://dougmunsinger.com/2009/12/fall-through-code-to-a-success.html#comments</comments>
		<pubDate>Thu, 10 Dec 2009 15:58:10 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[shell]]></category>
		<category><![CDATA[bash shell]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[nagios]]></category>

		<guid isPermaLink="false">http://dougmunsinger.com/2009/12/fall-through-code-to-a-success.html</guid>
		<description><![CDATA[I found a piece of code in a nagios alerting script that returns &#8220;success&#8221; matter what is happening with the jboss application it is checking.  
This script had been perpetuated as a service alerting script for years in the environs I work in, edited and passed on as working.  It reads:
if [failure code [...]]]></description>
			<content:encoded><![CDATA[<p>I found a piece of code in a nagios alerting script that returns &#8220;success&#8221; matter what is happening with the jboss application it is checking.  </p>
<p>This script had been perpetuated as a service alerting script for years in the environs I work in, edited and passed on as working.  It reads:</p>
<p>if [failure code here]; then<br />
    # return failure to nagios nrpe daemon<br />
else<br />
   # return success to nrpe<br />
fi</p>
<p>The test for a failure failed to match, even when the test was looking for a jboss instance not present on the server.  Because the code falls through to success, everything looks just fine, all of the time.  </p>
<p>The test for failure being incorrect struck me first when I looked through the script.  The more basic flaw in logic hit me after.  I think it would be true in an alerting script you would NEVER drop through a loop to a final success.   The test would be for success, the fall-through to failure.  This would have prevented a false sense of security, and the failure to detect success would have been dealt with immediately.</p>
<p>Something like: </p>
<p>if [success code here]; then<br />
    # return success to nagios nrpe daemon<br />
else<br />
   # return failure nrpe<br />
fi</p>
<p>Obvious.  But an epiphany anyway.</p>
<p>&#8211;doug</p>
]]></content:encoded>
			<wfw:commentRss>http://dougmunsinger.com/2009/12/fall-through-code-to-a-success.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>another tool for SVN &#8211; list_repositories.pl</title>
		<link>http://dougmunsinger.com/2009/05/subversion-cg-tool-list-repositories.html</link>
		<comments>http://dougmunsinger.com/2009/05/subversion-cg-tool-list-repositories.html#comments</comments>
		<pubDate>Mon, 11 May 2009 15:28:14 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[Solaris]]></category>
		<category><![CDATA[apache2]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[websphere]]></category>
		<category><![CDATA[CGI.pm]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://dougmunsinger.com/?p=762</guid>
		<description><![CDATA[&#160;
&#160;
One of the features of subversion + apache2 is the ability to list repositories &#8211; natively.&#160;
SVNParentPath /apps/repos
SVNListParentPath on
Unfortunately, once you restrict the httpd.conf to individual repositories and start handling permissions separately you lose that.&#160; Both of these permissions, set at the top level, at the parent path to the repositories, have to be commented out [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>&nbsp;</p>
<p>One of the features of subversion + apache2 is the ability to list repositories &#8211; natively.&nbsp;</p>
<p>SVNParentPath /apps/repos<br />
SVNListParentPath on</p>
<p>Unfortunately, once you restrict the httpd.conf to individual repositories and start handling permissions separately you lose that.&nbsp; Both of these permissions, set at the top level, at the parent path to the repositories, have to be commented out to have the individual permissions on the directories below take effect.</p>
<p>And listing just the repositories wasn&#8217;t enough for what I had in mind &#8211; I wanted a read-only table showing an individual developer or a team lead for a project who has what permissions for the subversion repositories. All the users, all the repositories.</p>
<p>Just your basic cgi.</p>
<p>&nbsp;</p>
<p><a href="http://dougmunsinger.com/images/posts/2009/repos_1.png" rel="shadowbox[post-762];player=img;" title="repository listing cgi"><img src="http://dougmunsinger.com/images/posts/2009/repos_1_420.png" title="repos" alt="repos" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;and the script:</p>
<p><a href="http://dougmunsinger.com/images/posts/2009/list_repositories.pl.txt" title="list_repositories.pl"><br />
</a><code>#! /bin/perl -w</p>
<p>
# script to parse and display users and repositories and rights (R, RW)</p>
<p>use strict;<br />
use CGI qw(:standard);<br />
use CGI::Carp qw(fatalsToBrowser);</p>
<p>
##----------------------------<br />
## Variables<br />
##----------------------------</p>
<p>
#debug<br />
my $debug = 0; #set to 0 to turn off, 1 (true) to turn on </p>
<p># title for page<br />
my $PageTitle = &quot;List of SVN Repositories&quot;;</p>
<p>## repository directory<br />
my $SVN = &quot;/apps/repos&quot;;<br />
## location for htpasswd files<br />
my $HTDIR = &quot;/apps/apache2/conf/htpasswd&quot;;<br />
## Set untainted path<br />
$ENV{PATH} = '/apps/apache2/bin:/bin:/usr/bin:/usr/local/bin';<br />
$ENV{IFS} = &quot;&quot; if $ENV{IFS} ne &quot;&quot;;</p>
<p># css <br />
my $css = &quot;http://&lt;your server name&gt;/css/main.css&quot;;<br />
my $headerimg = &quot;http://&lt;your server name&gt;/css/roger_rabbit_120.jpg&quot;;</p>
<p>
##------------------------------<br />
## MAIN<br />
##------------------------------</p>
<p>&amp;standard_header;<br />
my ($ref_repos, $ref_tabledata, $ref_users) = &amp;CreateTableSpace;<br />
&amp;DisplayTable ($ref_repos, $ref_tabledata, $ref_users);<br />
&amp;standard_footer;<br />
exit;</p>
<p>##------------------------------<br />
## subs<br />
##------------------------------</p>
<p>sub standard_header {<br />
&nbsp;&nbsp;&nbsp; print header();<br />
&nbsp;&nbsp;&nbsp; print start_html(-Title =&gt; &quot;$PageTitle&quot;, -BGCOLOR=&gt;&quot;White&quot;, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -style =&gt; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -src =&gt; &quot;${css}&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; );<br />
&nbsp;&nbsp;&nbsp; print (&quot;&lt;div id=\&quot;header\&quot;&gt;\n&quot;);<br />
&nbsp;&nbsp;&nbsp; print p(&quot;&lt;img src=\&quot;${headerimg}\&quot; title=\&quot;Wells logo\&quot; alt=\&quot;wells logo\&quot;/&gt;\n&quot;);<br />
&nbsp;&nbsp;&nbsp; print (&quot;&lt;/div&gt;\n&quot;);<br />
&nbsp;&nbsp;&nbsp; print (&quot;&lt;div id=\&quot;headertitle\&quot;&gt;\n&quot;);<br />
&nbsp;&nbsp;&nbsp; print h3(&quot;Repositories&lt;br/&gt;\nusers | read (R) | read &amp; write (RW)\n&quot;); # start_multipart_form() if file upload<br />
}</p>
<p>
sub standard_footer { <br />
&nbsp;&nbsp;&nbsp; print end_html(); <br />
}</p>
<p>
sub CreateTableSpace {<br />
&nbsp;&nbsp;&nbsp; my $ref_repos = &amp;GetBlankRepos;<br />
&nbsp;&nbsp;&nbsp; my @repos = @$ref_repos; # dereference<br />
&nbsp;&nbsp;&nbsp; my %tabledata = (); # hash to hold table data<br />
&nbsp;&nbsp;&nbsp; my @users = (); # list of users<br />
&nbsp;&nbsp;&nbsp; my %seen = (); <br />
&nbsp;&nbsp;&nbsp; foreach my $rep (@repos) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; open(FILE, &quot;$HTDIR/${rep}_read&quot;) || croak &quot;Failed to open $HTDIR/${rep}_read for reading...&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my @filelines = &lt;FILE&gt;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close FILE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach my $line (@filelines) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # lines are user:passwd<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my ($user, $pass) = split (&quot;:&quot;, $line);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unless ($seen{$user}) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $seen{$user} = 1; # save as seen<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push (@users, $user); # save the user to a list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $tabledata{$rep}{$user} = &quot;read&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; open (FILE, &quot;$HTDIR/${rep}_write&quot;) || croak &quot;Failed to open $HTDIR/${rep}_write for reading&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my @file_lines = &lt;FILE&gt;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close FILE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach my $line (@file_lines) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # lines are user:passwd<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my ($user, $pass) = split (&quot;:&quot;, $line);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unless ($seen{$user}) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $seen{$user} = 1; # save as seen<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push (@users, $user); # save the user to a list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $tabledata{$rep}{$user} = &quot;readwrite&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return (\@repos, \%tabledata, \@users);<br />
}</p>
<p>
sub GetBlankRepos {<br />
&nbsp;&nbsp;&nbsp; my @repos = ();<br />
&nbsp;&nbsp;&nbsp; # list $SVN<br />
&nbsp;&nbsp;&nbsp; opendir (DIR, $SVN) || croak &quot;Failed to open directory $SVN for reading...&quot;;<br />
&nbsp;&nbsp;&nbsp; while (defined(my $file = readdir(DIR))) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # skip &quot;.&quot;, &quot;..&quot; and .&lt;hidden&gt; files...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($file =~ /^\./) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push(@repos, $file);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return (\@repos);<br />
}</p>
<p>sub DisplayTable {<br />
&nbsp;&nbsp;&nbsp; my $ref_repos = shift;&nbsp; #@repos<br />
&nbsp;&nbsp;&nbsp; my $ref_tabledata = shift; # %tabledata<br />
&nbsp;&nbsp;&nbsp; my $ref_users = shift; # @users<br />
&nbsp;&nbsp;&nbsp; # dereference<br />
&nbsp;&nbsp;&nbsp; my @repos = @$ref_repos;<br />
&nbsp;&nbsp;&nbsp; my %tabledata = %$ref_tabledata;<br />
&nbsp;&nbsp;&nbsp; my @users = @$ref_users;<br />
&nbsp;&nbsp;&nbsp; # repos across the top, users down, R or RW for permissions<br />
&nbsp;&nbsp;&nbsp; # $tabledata{$rep}{$user} = &quot;readwrite&quot;;<br />
&nbsp;&nbsp;&nbsp; # start table<br />
&nbsp;&nbsp;&nbsp; print (&quot;&lt;table&gt;\n&lt;tbody&gt;\n&quot;);<br />
&nbsp;&nbsp;&nbsp; # table header<br />
&nbsp;&nbsp;&nbsp; my $cols = ($#repos + 1);<br />
&nbsp;&nbsp;&nbsp; print (&quot;&lt;tr&gt;&lt;td&gt;Users&lt;/td&gt;&lt;td colspan=\&quot;$cols\&quot;&gt;Repositories&lt;/td&gt;&lt;/tr&gt;\n&quot;);<br />
&nbsp;&nbsp;&nbsp; print (&quot;&lt;div id=\&quot;repotitles\&quot;&gt;&lt;tr&gt;\n&lt;td&gt;&amp;nbsp;&lt;/td&gt;&quot;);<br />
&nbsp;&nbsp;&nbsp; foreach my $rep (@repos) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print (&quot;&lt;td&gt;$rep&lt;/td&gt;&quot;);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; print (&quot;\n&lt;/tr&gt;\n&lt;/div&gt;\n&quot;);<br />
&nbsp;&nbsp;&nbsp; foreach my $user (@users) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print (&quot;&lt;tr&gt;\n&lt;td&gt;$user&lt;/td&gt;&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach my $repo (@repos) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($tabledata{$repo}{$user}) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($tabledata{$repo}{$user} eq &quot;read&quot;) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print (&quot;&lt;td&gt;R&lt;/td&gt;&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } elsif ($tabledata{$repo}{$user} eq &quot;readwrite&quot;) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print (&quot;&lt;td&gt;RW&lt;/td&gt;&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print (&quot;&lt;td&gt;&amp;nbsp; - &amp;nbsp;&lt;/td&gt;&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print (&quot;\n&lt;/tr&gt;\n&quot;);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; # finish table<br />
&nbsp;&nbsp;&nbsp; print (&quot;&lt;/tbody&gt;\n&lt;/table&gt;\n&quot;);<br />
}</code></p>
]]></content:encoded>
			<wfw:commentRss>http://dougmunsinger.com/2009/05/subversion-cg-tool-list-repositories.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>svnadmin.pl &#8211; perl cgi script to manage svn over apache</title>
		<link>http://dougmunsinger.com/2009/05/svnadmin.html</link>
		<comments>http://dougmunsinger.com/2009/05/svnadmin.html#comments</comments>
		<pubDate>Fri, 08 May 2009 15:29:58 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[apache2]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://dougmunsinger.com/?p=738</guid>
		<description><![CDATA[One of the tedious tasks in repository administration is managing users over repositories.  Who has access to what repository and to what degree (read-only, or write).  Subversion over apache2 allows a tremendous amount of control, down to individual directories within the repository. (see &#34;Per Directory Access Control&#34; in the subversion book).
So far I [...]]]></description>
			<content:encoded><![CDATA[<p>One of the tedious tasks in repository administration is managing users over repositories.  Who has access to what repository and to what degree (read-only, or write).  Subversion over apache2 allows a tremendous amount of control, down to individual directories within the repository. (see <a title="per directory access control" href="http://svnbook.red-bean.com/en/1.4/svn-book.html#svn.serverconfig.httpd.authz.perdir">&quot;Per Directory Access Control&quot; in the subversion book</a>).</p>
<p>So far I haven&#8217;t placed that but I have set up a default deny and then separate htpasswd files for read, or write access permission. This does at times cause TWO passwords to need to be used to first read and then again write to a repository.  However, these are cached, so we&#8217;ll see how much developers find to complain about in that.</p>
<p>The script svnadmin.pl assumes that a naming convention for the relationship bewtween htpasswd access files and subversion repositories is set so that the htpasswd file is named &lt;repository_name&gt;_read and &lt;repository_name&gt;_write.  You need to setthe path to htpasswd, the path to the htpasswd files, and a location for the top level directory of subversion &#8211; the parent directory for all repositories. Within the script you&#8217;ll also need to set the paths for the css file ($css) and for the header image ($headerimg).  This image should be roughly 420 px wide x 200 px high.  I used my corporate logo.</p>
<p>The script also uses a username-as-corporate-ID assumption (begins with &quot;a&quot; or &quot;d&quot; or &quot;x&quot;, contains up to eight characters), and a reasonable password assumption (at least 8 charcaters, nor more than 12, must contain at least one capital letter and one digit).  This is for internal use, not to be exposed, so if you are going to do something like this on ethe internet, you would want to revisit that and lock it down further.</p>
<h3><a title="svnadmin.pl" target="blank" href="http://dougmunsinger.com/images/posts/2009/svnadmin_pl.txt">svnadmin.pl</a></h3>
<h3><a title="main.css" target="blank" href="http://dougmunsinger.com/images/posts/2009/main.css.txt">main.css</a></h3>
<p>To run the script &#8211; save-file-as and then change the first line to &quot;#! /usr/bin/perl&quot; (or the appropriate path for the perl you want to use).  This is basically removing the extra &quot;#&quot; mark.   Rename the script to &quot;svnadmin.pl&quot;, put in your cgi-bin location, and put the main.css file in an appropriate location.  Edit the variables as above.</p>
<p>Screenshots:</p>
<table>
<tbody>
<tr>
<td><a title="screenshot 1" href="http://dougmunsinger.com/images/posts/2009/svnadmin_1.png" rel="shadowbox[post-738];player=img;"><img rel="lightbox[svn]" alt="screenshot" title="screenshot" src="http://dougmunsinger.com/images/posts/2009/svnadmin_1_220.png" /></a></td>
<td><a title="screenshot 1" href="http://dougmunsinger.com/images/posts/2009/svnadmin_2.png" rel="shadowbox[post-738];player=img;"><img rel="lightbox[svn]" alt="screenshot" title="screenshot" src="http://dougmunsinger.com/images/posts/2009/svnadmin_2_220.png" /></a></td>
</tr>
<tr>
<td><a title="screenshot 1" href="http://dougmunsinger.com/images/posts/2009/svnadmin_3.png" rel="shadowbox[post-738];player=img;"><img rel="lightbox[svn]" alt="screenshot" title="screenshot" src="http://dougmunsinger.com/images/posts/2009/svnadmin_3_220.png" /></a></td>
<td><a title="screenshot 1" href="http://dougmunsinger.com/images/posts/2009/svnadmin_4.png" rel="shadowbox[post-738];player=img;"><img rel="lightbox[svn]" alt="screenshot" title="screenshot" src="http://dougmunsinger.com/images/posts/2009/svnadmin_4_220.png" /></a></td>
</tr>
</tbody>
</table>
<p>Really fairly simple. This started with a script called &quot;htpasswd.pl&quot; which I downloaded and reworked, then adapted to use CGI.pm for multi-screen form presentation.  That framework alone was work rediscovering.  I used a similar framework with perl DBI and mysql to do fluid reporting on large system installations 9 years ago.  It recurs.</p>
<p>&mdash; doug</p>
]]></content:encoded>
			<wfw:commentRss>http://dougmunsinger.com/2009/05/svnadmin.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>testing Crosspress (plugin)&#8230;</title>
		<link>http://dougmunsinger.com/2009/04/testing-crosspress-plugin.html</link>
		<comments>http://dougmunsinger.com/2009/04/testing-crosspress-plugin.html#comments</comments>
		<pubDate>Thu, 16 Apr 2009 22:54:02 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[website]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tweet]]></category>

		<guid isPermaLink="false">http://dougmunsinger.com/?p=733</guid>
		<description><![CDATA[One of the issues with social sites, networking and the co-mingling of work and life &#8211; I can have several different “sites”, but I will never have the time to work with all of them. I will update this blog. I won’t necessarily ever get around to its copy on blogger.
IF I can update here, [...]]]></description>
			<content:encoded><![CDATA[<p>One of the issues with social sites, networking and the co-mingling of work and life &#8211; I can have several different “sites”, but I will never have the time to work with all of them. I will update this blog. I won’t necessarily ever get around to its copy on blogger.</p>
<p>IF I can update here, in one place, and as much as possible have that flow through any other sites, at least to keep them showing current links, I haven’t left them dead on the vine, and I haven’t turned my life over to them either.</p>
<p>This post is testing:</p>
<ul>
<li>CrossPress</li>
<li>LiveJournal Crossposter Remix</li>
<li>TwitterTools</li>
<li>LinkedIn &#8211; which actually runs a feed slurp from LinkedIn’s end…</li>
<li>WordBook &#8211; Facebook plug in.</li>
</ul>
<p>Ready, computer?</p>
<p><img src="http://dougmunsinger.com/images/posts/2009/1950s-computer.jpg" title="1950s computer" alt="1950s computer"/></p>
]]></content:encoded>
			<wfw:commentRss>http://dougmunsinger.com/2009/04/testing-crosspress-plugin.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>subversion compile and install as non-privileged user&#8230;</title>
		<link>http://dougmunsinger.com/2009/04/subversion-compile-and-install-as-non-privileged-user.html</link>
		<comments>http://dougmunsinger.com/2009/04/subversion-compile-and-install-as-non-privileged-user.html#comments</comments>
		<pubDate>Wed, 01 Apr 2009 17:32:11 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[apache2]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://dougmunsinger.com/?p=656</guid>
		<description><![CDATA[&#160;
Most Open Source software projects invite persons using their product to experience the joys of compiling the product.  Subversion does not.  
&#160;
from INSTALL in the 1.5.6 subversion source code: 

This document is written for people who intend to build Subversion from source code.  Normally, the only people who do this are Subversion [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Most Open Source software projects invite persons using their product to experience the joys of compiling the product.  Subversion does not.  </p>
<p>&nbsp;</p>
<p>from INSTALL in the 1.5.6 subversion source code: </p>
<blockquote>
<p>This document is written for people who intend to build Subversion from source code.  Normally, the only people who do this are Subversion developers and package maintainers.  </p>
<p>If neither of these labels fits you, we recommend you find an appropriate binary package of Subversion and install that.</p>
</blockquote>
<p>&nbsp;</p>
<h2>why non-privileged?</h2>
<p>I work on Solaris 10,  in a large financial environment, with separation of responsibilities and a restricted availability of &#8220;root&#8221;.  Most software packages assume that you will be installing as root and they use common and accessible directory locations like &#8220;/usr/local&#8221;.  Most software will build easily or with slight difficulty on linux, and can be much more difficult on Solaris.  You will be missing tools and libraries common to Linux. </p>
<p>I currently use CVS, and that&#8217;s got some shortcomings &#8211; it doesn&#8217;t handle binaries easily or consistently, you can&#8217;t move a directory without losing history, and it is no longer under development.  I have a new container, a Solaris 10 sparse container, in which I wanted to compile and install apache2 and subversion as a non-privileged user.  No root.  No access to install extra needed packages on /usr/local.  On the other hand, complete control over the application without having to consult with the group responsible for root on the container&#8230;</p>
<h2>what worked</h2>
<p>Here&#8217;s what worked.  Not the dead ends, but what actually resulted in apache and subversion installed, along with apr, apr-util and serf, in a filesystem /apps.  This compilation uses serf and FSFS in subversion &#8211; it blocks out Berkeley DB and neon.  </p>
<p>Berkeley was installed in /usr/local, but I couldn&#8217;t get the configure script to find it &#8211; and in reading further FSFS is the default in subversion, and has stabilized and become a better solution than Berkeley DB.  If you reboot in an unstable state, FSFS will simply recover, where Berkeley DB can require a DBA to recover the database before the system returns to useful. </p>
<p>neon seemed from some errors I encountered to have filesystem access issues (I got a long dump at one point of memory addresses during the make process, all locations for neon libraries and files).  Once I eliminated neon, I also got an svnadmin binary that could create a repository without causing &#8220;BUS ERROR:  segmentation fault&#8221;.  Of course, I also dropped back from subversion 1.6.0 code to 1.5.6, and compiled and pointed to apr and apr-util from subversion-deps for 1.5.6, and serf from google. It could be any one of those changes.  </p>
<p>This was not as simple as compile and go &#8211; this was running &#8220;configure&#8221; and resolving errors, then &#8220;make&#8221; and resolve yet more errors, and finally, building mod_dav_svn in subversion successfully, installing and finding a &#8220;BUS Error: segmentation fault&#8221; on running &#8220;./svnadmin create /apps/repos/testme&#8221;.  </p>
<p>I compiled subversion fairly quickly to use svnserver.  That compile and install worked, and didn&#8217;t create a core file, didn&#8217;t seg fault.  But it left some problems. </p>
<h2>svn + apache2</h2>
<p>Many of my developers work from windows.  Creating secure access over ssh and svn (svn+ssh://<repository>) using eclipse SDK and subclipse (subversion plugin for eclipse) was the initial idea, from a quick pass over subversion, but once svnserver was up and running and I tried it, this wasn&#8217;t as simple.  There are several articles on integrating subversion, ssh and windows.  None of the solutions looked simple or elegant.  And wide open unsecured traffic was not acceptable. </p>
<p>I determined best practice pointed us to subversion access through web_dav_svn -> web_dav -> apache2 (https://<repository>).  This brought authentication away from centralized auth and allowed fine grained control over the access granted via htpasswd and .htaccess files.  It allowed us to restrict unsecured access and redirect http to https, and encrypt using SSL.  It kept us from having to work ssh onto windows for each developer, instead we could have a simple eclipse/subclipse plugin access demonstrated and from that point they were able to customize on their own. </p>
<p> What I wanted was:</p>
<ul>
<li> untar subversion-1.5.6 and subversion-deps-1.5.6 in /apps/src (they layer over each other)</li>
<li> first build and install the -deps apr and apr-util into /apps/local</li>
<li>then build apache2 against /apps/local/apr and /apps/local/apr-util</li>
<li>install apache2</li>
<li> build and install serf</li>
<li> remove serf, apr, and apr-util subdirectories and source code from within subversion-1.5.6</li>
<li> build 1.5.6 against apxs in apache, without Berkeley DB, without neon, and specifying /apps/local/apr, /apps/local/apr-util, and /apps/local/serf</li>
<li> install and test</li>
</ul>
<h2>process</h2>
<ul>
<li>create subdirectory /apps/src, place all tarballs in this directory</li>
<li>untar subversion &#038; subversion-deps version 1.5.6 (these tar onto each other)</li>
<li>cd subversion-1.5.6/apr</li>
<li>./configure &#8211;prefix=/apps/local/apr</li>
<li>make &#038;&#038; make install</li>
<li>cd ../apr-util</li>
<li>./configure &#8211;prefix=/apps/local/apr-util &#8211;with-apr=/apps/local/apr</li>
<li>make &#038;&#038; make install</li>
<li>apache2:  untar httpd-2.2.11</li>
<li>./configure &#8211;enable-dav &#8211;enable-so &#8211;prefix=/apps/apache2_2.2.11   &#8211;enable-ssl &#8211;with-ssl=/usr/local/ssl &#8211;with-apr=/apps/local/apr &#8211;with-apr-util=/apps/local/apr-util &#8211;enable-modules &#8211;enable-mods-shared=&#8221;most ssl dav&#8221;</li>
<li>make &#038;&#038; make install
<p>This way apache2 builds against apr and apr-util compatible with subversion 1.5.6<br />
and then build subversion against it as well.. </p>
</li>
<li>ln -s /apps/apache2_2.2.11 /apps/apache2</li>
<li>compile and install <a href="http://code.google.com/p/serf/" title="serf source">serf</a></li>
<li>./configure &#8211;prefix=/apps/local/serf &#8211;with-openssl=/usr/local/ssl</li>
<li>make &#038;&#038; make install</li>
<li>remove serf, pr and apr-util from subversion</li>
</ul>
<h2>compile subversion</h2>
<p> ./configure &#8211;prefix=/apps/svn &#8211;with-ssl &#8211;with-libs=/usr/local/ssl &#8211;without-berkeley-db &#8211;with-apxs=/apps/apache2/bin/apxs &#8211;with-openssl=/usr/local/ssl &#8211;without-neon &#8211;with-serf=/apps/local/serf &#8211;with-apr=/apps/local/apr &#8211;with-apr-util=/apps/local/apr-util</p>
<p>make &#038;&#038; make install</p>
<p>test:<br/><br />
<code><br />
[appadmin@sccvsapp01p bin] $ ./svnadmin create /apps/repos/testtoo<br/><br />
[appadmin@sccvsapp01p bin] $ </p>
<p></code></p>
<p>no core dump&#8230;<br/><br />
ONWARD to configure and test apache2 and subversion&#8230;</p>
<h2>httpd.conf:</h2>
<ul>
<li>change all references to apache2_2.2.11 to apache2 (makes the httpd.conf generic rather than subject to needing a migration after a point release upgrade&#8230;)</li>
<li>change port 80 to a non-priveliged port (8080)</li>
<li>check for
<ul>
<li>LoadModule dav_module modules/mod_dav.so</li>
<li>LoadModule dav_module modules/mod_dav.so</li>
<li>LoadModule ssl_module modules/mod_ssl.so</li>
</ul>
</li>
<li>add in ServerName hostname.domain.com:8443  Some of the apache level sanity validation requires a statement of the local host.  </li>
<li>add in SSL stuff (this IS httpd from source &#8211; the default httpd.conf had the ssl-module load statement, but no explicit SSL configuration<br />
<code><br />
&#35;<br />
&#35; Note: The following must must be present to support<br />
&#35;       starting without SSL on platforms with no /dev/random equivalent<br />
&#35;       but a statically compiled-in mod_ssl.<br />
&#35;<br />
</code><br />
<code><br />
&lt;IfModule ssl_module&gt;<br />
SSLRandomSeed startup builtin<br />
SSLRandomSeed connect builtin<br />
&lt;/IfModule&gt;<br />
</code><br />
<code><br />
&#35; =================================================<br />
&#35; SSL/TLS settings<br />
&#35; =================================================<br />
</code><br />
<code><br />
Listen 0.0.0.0:8080<br />
Listen 0.0.0.0:8443<br />
</code><br />
<code><br />
SSLEngine on<br />
&#35;SSLOptions +StrictRequire<br />
</code><br />
<code><br />
#&lt;Directory /&gt;<br />
    &#35; SSLRequireSSL<br />
#&lt;/Directory&gt;<br />
</code><br />
<code><br />
SSLProtocol -all +TLSv1 +SSLv3<br />
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM<br />
</code><br />
<code><br />
SSLMutex file:/apps/apache2/logs/ssl_mutex<br />
</code><br />
<code><br />
SSLRandomSeed startup file:/dev/urandom 1024<br />
SSLRandomSeed connect file:/dev/urandom 1024<br />
</code><br />
<code><br />
SSLSessionCache shm:/apps/apache2/logs/ssl_cache_shm<br />
SSLSessionCacheTimeout 600<br />
</code><br />
<code><br />
SSLPassPhraseDialog builtin<br />
SSLCertificateFile /apps/apache2/conf/ssl.crt/server.crt<br />
SSLCertificateKeyFile /apps/apache2/conf/ssl.key/server.key<br />
</code><br />
<code><br />
SSLVerifyClient none<br />
SSLProxyEngine off<br />
</code><br />
<code><br />
&lt;IfModule mime.c&gt;<br />
    AddType application/x-x509-ca-cert      .crt<br />
    AddType application/x-pkcs7-crl         .crl<br />
&lt;/IfModule&gt;<br />
</code><br />
<br/>
</li>
<li>create ssl certificate (self-signed).  I installed in /apps/apache2/conf/ssl.crt and ssl.key, naming the .crt and ,key files for the server hostname and then symbolically linking them to the generic &#8220;server.crt&#8221; and &#8220;server.key&#8221;. </li>
<li>restart apache2 and test https://host:8443/ &#8211; you should get the &#8220;It works!&#8221; apache test page, thus validating the SSL certificate and setup from a browser level</li>
<li>
<li>parent directory for svn<br/><br />
<code><br />
&lt;Location /svn&gt;<br />
    DAV svn<br />
    SVNParentPath /apps/repos<br />
&lt;/Location&gt;<br />
</code><br />
<br/>
</li>
</ul>
<p>Restart apache2, and go look at the log &#8211; should now show the svn component:</p>
<p><code><br />
[Tue Mar 31 11:01:52 2009] [notice] Digest: generating secret for digest authentication ...<br />
[Tue Mar 31 11:01:52 2009] [notice] Digest: done<br />
[Tue Mar 31 11:01:52 2009] [notice] Apache/2.2.11 (Unix) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8d configured -- resuming normal ope<br />
rations<br />
[Tue Mar 31 15:15:44 2009] [notice] caught SIGTERM, shutting down<br />
[Tue Mar 31 15:15:48 2009] [warn] Init: Session Cache is not configured [hint: SSLSessionCache]<br />
[Tue Mar 31 15:15:51 2009] [notice] Digest: generating secret for digest authentication ...<br />
[Tue Mar 31 15:15:51 2009] [notice] Digest: done<br />
[Tue Mar 31 15:15:51 2009] [notice] Apache/2.2.11 (Unix) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8d SVN/1.5.6 configured -- resuming<br />
normal operations<br />
</code></p>
<h2>validate</h2>
<p>I used eclipe with subclipse installed in it &#8211; the url for the repository was https://host:8443/svn/testme</p>
<p>On the command line<br />
<code>
<pre>
[dsm@dali ~] $ svn checkout https://hostname:8443/svn/testme
Error validating server certificate for 'https://hostname:8443':
 - The certificate is not issued by a trusted authority. Use the
   fingerprint to validate the certificate manually!
Certificate information:
 - Hostname: hostname.domain.com
 - Valid: from Wed, 01 Apr 2009 14:44:42 GMT until Thu, 01 Apr 2010 14:44:42 GMT
 - Issuer: issuer, Massachusetts, US
 - Fingerprint: ec:74:42:f4:98:0b:5c:62:14:34:85:14:60:38:73:1b:bc:8d:18:27
(R)eject, accept (t)emporarily or accept (p)ermanently? p
Checked out revision 0.
[dsm@dali ~] $
</pre>
<p></code></p>
<h2>more&#8230;</h2>
<p>From here, I need security, and then to import existing cvs repositories into subversion one by one, in liaison with the developers. I also need to restrict access to SSL only, install a third-party certificate, and work further to validate subclipse and eclipse, to where I can roll up a development environs they can just unzip and use. </p>
<p>&nbsp;</p>
<p>&mdash; doug</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://dougmunsinger.com/2009/04/subversion-compile-and-install-as-non-privileged-user.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>eclipsed</title>
		<link>http://dougmunsinger.com/2009/03/eclipsed.html</link>
		<comments>http://dougmunsinger.com/2009/03/eclipsed.html#comments</comments>
		<pubDate>Sun, 29 Mar 2009 15:37:31 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[Solaris]]></category>
		<category><![CDATA[UNIX & Windows]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[RSE]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://dougmunsinger.com/?p=634</guid>
		<description><![CDATA[&#160;
&#160;

&#160;
I&#8217;ve been working with Remote System Explorer (RSE), a terminal and ssh session manager that runs in the Eclipse SDK.  This is very cool &#8211; the thing is, eclipse runs on Solaris, Linux, Windows, MAC OSX, IBM AIX (of course &#8211; IBM created the eclipse framework).   It as close to an OS-agnostic [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="../../../images/posts/2009/eclipse.png" title="eclipse splash" alt="eclipse splash"/></p>
<p>&nbsp;</p>
<p>I&#8217;ve been working with <a href="http://www.eclipse.org/dsdp/tm" title="RSE">Remote System Explorer (RSE)</a>, a terminal and ssh session manager that runs in the <a href="http://download.eclipse.org/eclipse/downloads/drops/R-3.4.2-200902111700/index.php" title="Eclipse SDK">Eclipse SDK</a>.  This is very cool &#8211; the thing is, eclipse runs on Solaris, Linux, Windows, MAC OSX, IBM AIX (of course &#8211; IBM created the eclipse framework).   It as close to an OS-agnostic framework as anything I&#8217;ve ever experienced. </p>
<p>I had primarily intended to use it on windows to add ssh terminal capacity &#8211; replacing console2 and cygwin &#8211; to connect to UNIX servers.  But the interface is so good, I find I&#8217;m using it on both UNIX and windows &#8211; the konsole terminal is better in some ways at history and at cut-and-paste using mouse buttons directly.  So far the context menu from a right-click is the only cut-and-paste that functions within the terminal windows themselves. </p>
<p>On the other hand &#8211; in konsole each separate terminal window is a separate authentication &#8211; password-response &#8211; whereas in eclipse RSE, one authentication can be kept and spawn as many terminal sessions as needed.  The organization is better.  You can close the terminal sessions down, and leave a connection still intact.  Then bring back terminal sessions as needed.  That ability alone makes it worth losing the double-click select and middle-button paste from konsole sessions.  I&#8217;m not yet convinced I can&#8217;t find a way to get that working either, that and an unlimited history or at least 10000 lines&#8230;</p>
<p>&nbsp;</p>
<p><a href="../../../images/posts/2009/eclipse_4.png" title=eclipse window" rel="lightbox"><img src="../../../images/posts/2009/eclipse_4_300.png" title=eclipse window" alt="eclipse window"/></a></p>
<p>&nbsp;</p>
<p>If I can get that back somehow in the terminal sessions it will be not just slightly better, but a huge amount better than any other session management I&#8217;ve used. </p>
<h2>Install</h2>
<p>You need <a href="http://java.sun.com/javaee/downloads/index.jsp" title="java">java</a>.  On windows that can be an issue.  On UNIX, not so much, pretty much there by default.</p>
<p>Download <a href="http://www.eclipse.org/downloads/download.php?file=/dsdp/tm/downloads/drops/R-3.0.3-200902181300/RSE-SDK-3.0.3.zip" title="RSE">RSE</a> and <a href="http://download.eclipse.org/eclipse/downloads/drops/R-3.4.2-200902111700/index.php" title="eclipse SDK 3.4.2">eclipse SDK</a>.  </p>
<p>Untar or unzip the eclipse package. In windows I unzip to c:\eclipse_3.4.2.  In UNIX /usr/local/eclipse.   </p>
<p>Unzip the RSE package layered over the eclipse install. </p>
<p>In windows I point a shortcut to c:\eclipse_3.4.2.  In UNIX I move /usr/local/eclipse to /usr/local/eclipse_3.4.2, and create a symbolic link /usr/local/eclipse -> /usr/local/eclipse_3.4.2.  </p>
<p>Open eclipse.  Go to window -> open perspective -> other and open Remote System Explorer. </p>
<p>&nbsp;</p>
<p><a href="../../../images/posts/2009/eclipse_1.png" title=eclipse window" rel="lightbox"><img src="../../../images/posts/2009/eclipse_1_300.png" title=eclipse window" alt="eclipse window"/></a></p>
<p>&nbsp;</p>
<p>Configurations are stored in the workspace folder.  Right-click in the left-hand pane and select &#8220;New Connection to create connections.  Within eclipse you can add software respositories and update and add software from Help -> Software Updates. </p>
<p>&nbsp;</p>
<p><a href="../../../images/posts/2009/eclipse_2.png" title=eclipse window" rel="lightbox"><img src="../../../images/posts/2009/eclipse_2_300.png" title=eclipse window" alt="eclipse window"/></a></p>
<p><a href="../../../images/posts/2009/eclipse_3.png" title=eclipse window" rel="lightbox"><img src="../../../images/posts/2009/eclipse_3_300.png" title=eclipse window" alt="eclipse window"/></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&mdash; doug</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://dougmunsinger.com/2009/03/eclipsed.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>firefox 3 &#8211; not so much</title>
		<link>http://dougmunsinger.com/2009/03/firefox-three.html</link>
		<comments>http://dougmunsinger.com/2009/03/firefox-three.html#comments</comments>
		<pubDate>Tue, 10 Mar 2009 09:00:54 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[browsers]]></category>
		<category><![CDATA[decay]]></category>
		<category><![CDATA[entropy]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[firefox 3]]></category>
		<category><![CDATA[internet]]></category>

		<guid isPermaLink="false">http://dougmunsinger.com/?p=614</guid>
		<description><![CDATA[I used Firefox 2 with about seven plugins that I considered must-haves &#8211; things like Adblock Plus and Flashblock and Colorful Tabs and Tabbrowser and Remember Mismatched Domains.    I recommended it highly, and if it had occasional crashes, they were few and far between enough that I never paid them a lot [...]]]></description>
			<content:encoded><![CDATA[<p>I used Firefox 2 with about seven plugins that I considered must-haves &#8211; things like Adblock Plus and Flashblock and Colorful Tabs and Tabbrowser and Remember Mismatched Domains.    I recommended it highly, and if it had occasional crashes, they were few and far between enough that I never paid them a lot of attention.  </p>
<p>Firefox 3.  Not so much.  I&#8217;ve been waiting since the product first came out for a resolution to whatever memory leak or looping code causes it to just lock up the entire desktop and churn away until I kill it off.  </p>
<p>I&#8217;ve been using Opera, which I just find a bit odd, but mostly faster and mostly stable.  I&#8217;ve downloaded Chromium for linux, Codeweaver&#8217;s proof-of-concept of running Chrome under wine on linux.  And I downloaded and installed opera, chrome and even Apple&#8217;s safari on windows.  </p>
<p>This firefox misbehavior seems to happen on BOTH operating systems.  Here&#8217;s a shot of the current bahavior:</p>
<blockquote><p>
<code><br />
Tasks: 180 total,   2 running, 178 sleeping,   0 stopped,   0 zombie<br />
Cpu(s): 70.1%us,  2.7%sy,  0.0%ni, 27.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st<br />
Mem:   2066104k total,  2023092k used,    43012k free,   296832k buffers<br />
Swap:  1646620k total,    39812k used,  1606808k free,   972692k cached<br />
</code><br />
<code><br />
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND<br />
17146 dsm       20   0  373m 180m  35m R  143  8.9  71:52.02 firefox<br />
 4995 root      20   0  387m  53m 4744 S    2  2.7 137:35.74 Xorg<br />
 7409 dsm       20   0 32592  15m  11m S    1  0.8   0:09.48 konsole<br />
 5343 root      20   0  3304 1044  908 S    0  0.1   2:40.47 hald-addon-stor<br />
 7793 dsm       20   0 53516  32m 2236 S    0  1.6   9:09.60 synergys<br />
    1 root      20   0  2844 1688  544 S    0  0.1   0:01.84 init<br />
    2 root      15  -5     0    0    0 S    0  0.0   0:00.00 kthreadd<br />
    3 root      RT  -5     0    0    0 S    0  0.0   0:00.00 migration/0<br />
    4 root      15  -5     0    0    0 S    0  0.0   0:03.72 ksoftirqd/0<br />
    5 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/0<br />
    6 root      RT  -5     0    0    0 S    0  0.0   0:00.00 migration/1<br />
    7 root      15  -5     0    0    0 S    0  0.0   0:01.32 ksoftirqd/1<br />
    8 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/1<br />
    9 root      15  -5     0    0    0 S    0  0.0   0:04.90 events/0<br />
   10 root      15  -5     0    0    0 S    0  0.0   0:03.88 events/1<br />
   11 root      15  -5     0    0    0 S    0  0.0   0:00.00 khelper<br />
   46 root      15  -5     0    0    0 S    0  0.0   0:00.28 kblockd/0<br />
   47 root      15  -5     0    0    0 S    0  0.0   0:00.30 kblockd/1<br />
   50 root      15  -5     0    0    0 S    0  0.0   0:00.00 kacpid<br />
   51 root      15  -5     0    0    0 S    0  0.0   0:00.00 kacpi_notify<br />
  126 root      15  -5     0    0    0 S    0  0.0   0:00.00 kseriod<br />
  160 root      20   0     0    0    0 S    0  0.0   0:07.48 pdflush<br />
  161 root      20   0     0    0    0 S    0  0.0   0:02.20 pdflush<br />
  162 root      15  -5     0    0    0 S    0  0.0   0:02.10 kswapd0<br />
</code>
</p></blockquote>
<p>and then after killing it off and restarting:</p>
<blockquote><p>
<code><br />
root@dali:/home/dsm/Desktop/programmes# killall firefox<br />
root@dali:/home/dsm/Desktop/programmes# top<br />
top - 14:46:04 up 10 days, 23:08,  1 user,  load average: 0.96, 1.31, 1.25<br />
Tasks: 180 total,   3 running, 177 sleeping,   0 stopped,   0 zombie<br />
Cpu(s):  6.9%us,  0.6%sy,  0.0%ni, 92.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st<br />
Mem:   2066104k total,  1955112k used,   110992k free,   296928k buffers<br />
Swap:  1646620k total,    39812k used,  1606808k free,   953204k cached<br />
</code><br />
<code><br />
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND<br />
17650 dsm       20   0  248m 126m  28m R   17  6.2   0:25.31 firefox<br />
 4995 root      20   0  387m  53m 4520 S    1  2.7 137:42.25 Xorg<br />
 7366 dsm       20   0 29972  11m 8668 S    0  0.6   1:29.68 kwin<br />
 7370 dsm       20   0 36764  18m  13m S    0  0.9  11:19.00 kicker<br />
 7793 dsm       20   0 53516  32m 2236 S    0  1.6   9:11.19 synergys<br />
    1 root      20   0  2844 1688  544 S    0  0.1   0:01.84 init<br />
    2 root      15  -5     0    0    0 S    0  0.0   0:00.00 kthreadd<br />
    3 root      RT  -5     0    0    0 S    0  0.0   0:00.00 migration/0<br />
    4 root      15  -5     0    0    0 S    0  0.0   0:03.72 ksoftirqd/0<br />
    5 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/0<br />
    6 root      RT  -5     0    0    0 S    0  0.0   0:00.00 migration/1<br />
    7 root      15  -5     0    0    0 S    0  0.0   0:01.32 ksoftirqd/1<br />
    8 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/1<br />
    9 root      15  -5     0    0    0 S    0  0.0   0:04.92 events/0<br />
   10 root      15  -5     0    0    0 S    0  0.0   0:03.88 events/1<br />
   11 root      15  -5     0    0    0 S    0  0.0   0:00.00 khelper<br />
   46 root      15  -5     0    0    0 S    0  0.0   0:00.28 kblockd/0<br />
   47 root      15  -5     0    0    0 S    0  0.0   0:00.30 kblockd/1<br />
   50 root      15  -5     0    0    0 S    0  0.0   0:00.00 kacpid<br />
   51 root      15  -5     0    0    0 S    0  0.0   0:00.00 kacpi_notify<br />
  126 root      15  -5     0    0    0 S    0  0.0   0:00.00 kseriod<br />
  160 root      20   0     0    0    0 S    0  0.0   0:07.48 pdflush<br />
  161 root      20   0     0    0    0 S    0  0.0   0:02.20 pdflush<br />
  162 root      15  -5     0    0    0 S    0  0.0   0:02.10 kswapd0<br />
</code>
</p></blockquote>
<p>Yes &#8211; that first figure &#8211; 143% of the cpu.   Dropping back to 17% of the CPU with the same tabs and sites loaded.</p>
<p>Whatever.  I don&#8217;t WANT to pay attention to the browser &#8211; the whole point of firefox was to NOT have to pay attention, and they have completely ruined that in version 3. </p>
<p>There is something seriously wrong with firefox, that causes it over time to start misbehaving and to require a reload from scratch.  And this seems to occur on both windows and Linux.  It is no longer useful.  It also seems to being misbehavior once it has downloaded just about any kind of update whether for the browser or a plugin. </p>
<p>I&#8217;ve been waiting for firefox three to fix this.  Recently firefox 3.07 came out.  I just got the window informing me that it has upgraded me to the latest!!!.  Just this morning.  And yet&#8230; And yet &#8211; it is still BROKEN. </p>
<p>When you go onto the internet and search for Firefox 3 performance or cpu or memory issues &#8211; the first ten or fifteen google results laud firefox three for its blazing performance.  True &#8211; for awhile.  Eventually it will force you to pay attention to it by hanging and chewing up your cpu to where your computer is no longer working.  </p>
<p>I wish they&#8217;d fix it.  But whether they do or not, </p>
<p>I can&#8217;t wait for Chrome to come out for linux&#8230;</p>
<p><img src=../../../images/posts/2009/google_chrome_logo.jpg alt="chrome" title="chrome logo"/></p>
<p>&nbsp;</p>
<p>&#8211;doug</p>
]]></content:encoded>
			<wfw:commentRss>http://dougmunsinger.com/2009/03/firefox-three.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 1.171 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-03-12 01:18:43 -->
