<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://morison.biz/technotes/feeds/rss.css" ?>
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/" 
	xmlns:dc="http://purl.org/dc/elements/1.1/" 
	xmlns:icbm="http://postneo.com/icbm/" 
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/" 
	xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" 
	xmlns:wfw="http://wellformedweb.org/CommentAPI/" >

<channel>
	<title>Rod Morison Software</title>
	<link>http://morison.biz/</link>
	<description>Software how-tos, ideas, opinion and discussion on desktop, server, and web application development

&lt;form action=&quot;http://morison.biz/technotes/search.php&quot; method=&quot;GET&quot;&gt;&lt;input type=&quot;text&quot; name=&quot;search&quot; size=&quot;10&quot; maxlength=&quot;128&quot; /&gt;»&lt;/form&gt;</description>
	<language>en</language>
	<copyright>2006-2008, Rod Morison Software</copyright>
	<managingEditor>technotes@morison.biz</managingEditor>
	<webMaster>technotes@morison.biz</webMaster>
	<lastBuildDate>Sun, 20 May 2012 05:01:28 GMT</lastBuildDate>
	<generator>Yet Another Community System</generator>
	<docs>http://blogs.law.harvard.edu/tech/rss</docs>
	<ttl>70</ttl>

	<item>
		<title>Please send me a password so that I can access some pages of your site. thank you.</title>
		<link>http://morison.biz/technotes/articles/74</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/74</guid>
		<dc:creator>Rodrigo Bernardo</dc:creator>
		<category>Queries</category>
		<pubDate>Sun, 15 Apr 2012 06:11:02 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/74#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/74</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/74</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:74</trackback:ping>
	</item>

	<item>
		<title>I'm looking for a python/django developer. Please contact me. Phone is 310-592-1672.</title>
		<link>http://morison.biz/technotes/articles/72</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/72</guid>
		<dc:creator>Elliott Yousefzadeh</dc:creator>
		<category>Queries</category>
		<pubDate>Sun, 10 Apr 2011 12:20:56 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/72#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/72</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/72</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:72</trackback:ping>
	</item>

	<item>
		<title>Introducing Cones</title>
		<link>http://morison.biz/technotes/articles/71</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/71</guid>
		<description>It's not pylons, it's cones! Seriously, a &quot;pylons-lite&quot; webapp framework with facebook app utilities, presently targetted for GAE. See http://bitbucket.org/rmorison/cones/src/tip/README for install info. Check out the FAQ on the wiki: http://bitbucket.org/rmorison/cones/wiki/Home. Or, check out the running test app at http://apps.facebook.com/tfivesandbox/</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">It's not pylons, it's cones! Seriously, a "pylons-lite" webapp framework with facebook app utilities, presently targetted for GAE. See <a href="http://bitbucket.org/rmorison/cones/src/tip/README" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://bitbucket.org/rmorison/cones/src/tip/README</a> for install info. Check out the FAQ on the wiki: <a href="http://bitbucket.org/rmorison/cones/wiki/Home." title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://bitbucket.org/rmorison/cones/wiki/Home.</a> Or, check out the running test app at <a href="http://apps.facebook.com/tfivesandbox/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://apps.facebook.com/tfivesandbox/</a></div>
Cones is a python web stack, borrowing design and tools from <a href="http://pylonshq.com" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">pylons</a>, 
but lighter and simpler. The current target is Google App Engine. The project was inspired by
a Facebook app implemented on Google app engine. The Facebook support attempts to provide
automatic and consistent <a href="http://developers.facebook.com/docs/authentication/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">OAuth</a> access
tokens somewhat transparently to webapp controllers.<br />
<br />
In addition, some pylons-ish features are provided, including <a href="http://www.makotemplates.org/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">Mako</a>,
<a href="http://formencode.org/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">FormEncode</a> and <a href="http://webhelpers.groovie.org/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">WebHelpers</a>. 
<a href="http://beaker.groovie.org/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">Beaker</a> is not presently supported, rather the more native/efficient 
<a href="https://github.com/dound/gae-sessions" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">gae-sessions</a> is implemented.<br />
<br />
At this time the initial code is in active development. The 0.5 label is really 0.5exp.
No version tags or <a href="http://pypi.python.org/pypi" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">pypi</a> have been created. An official release will
wait for external feedback and some clarity whether this needs to be a release managed project.</body>
		<dc:creator>rod</dc:creator>
		<category>Python</category>
		<pubDate>Tue, 09 Nov 2010 14:03:35 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/71#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/71</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/71</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:71</trackback:ping>
	</item>

	<item>
		<title>Won't get hacked again?</title>
		<link>http://morison.biz/technotes/articles/70</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/70</guid>
		<description>See http://news.bbc.co.uk/2/hi/technology/8550219.stm</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">See <a href="http://news.bbc.co.uk/2/hi/technology/8550219.stm" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://news.bbc.co.uk/2/hi/technology/8550219.stm</a></div>
UPDATE: <br />
<br />
<pre>RedirectMatch 301 ^/technotes/users/edit.* /technotes/articles/69</pre><br />
<br />
is keeping the rats at bay for now.</body>
		<dc:creator>rod</dc:creator>
		<category>//</category>
		<pubDate>Thu, 11 Mar 2010 06:34:47 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/70#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/70</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/70</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:70</trackback:ping>
	</item>

	<item>
		<title>Sorry...</title>
		<link>http://morison.biz/technotes/articles/69</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/69</guid>
		<description>...Due to hacking as described in http://news.bbc.co.uk/2/hi/technology/8550219.stm</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">...Due to hacking as described in <a href="http://news.bbc.co.uk/2/hi/technology/8550219.stm" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://news.bbc.co.uk/2/hi/technology/8550219.stm</a></div>
this url has been blocked.</body>
		<dc:creator>rod</dc:creator>
		<category>Misc</category>
		<pubDate>Mon, 08 Mar 2010 08:34:50 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/69#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/69</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/69</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:69</trackback:ping>
	</item>

	<item>
		<title>Hacked!</title>
		<link>http://morison.biz/technotes/articles/68</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/68</guid>
		<description>See http://news.bbc.co.uk/2/hi/technology/8550219.stm</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">See <a href="http://news.bbc.co.uk/2/hi/technology/8550219.stm" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://news.bbc.co.uk/2/hi/technology/8550219.stm</a></div>
I've been nursing the yacs PHP based site *far* too long. Time to move it to some newer-tech, and definitely not PHP.<br />
<br />
Only question is what to do with all this old content and urls?</body>
		<dc:creator>rod</dc:creator>
		<category>//</category>
		<pubDate>Mon, 08 Mar 2010 07:24:44 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/68#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/68</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/68</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:68</trackback:ping>
	</item>

	<item>
		<title>Job inquiry, opening for Solutions Architect in Burbank</title>
		<link>http://morison.biz/technotes/articles/67</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/67</guid>
		<description>I would like to see if are interested in a Solutions Architect job opening with Rovi in our Burbank location.  Please let me know if your interested, or feel free to forward this to others who might be.  Thanks!



Summary:



The Solutions Architect will be responsible for architecting and designing comprehensive solutions that meet with our customers’ requirements for Rovi’s Passport Interactive Programming Guide (IPG).  Working side-by-side with prospective and existing customers, the Solutions Architect plays a key role in the successful selection, purchase, installation and maintenance of IPG solutions.  In addition to demonstrated strengths in systems assessment ... more  </description>
		<body xmlns="http://www.w3.org/1999/xhtml">I would like to see if are interested in a Solutions Architect job opening with Rovi in our Burbank location.  Please let me know if your interested, or feel free to forward this to others who might be.  Thanks!<br />
<br />
Summary:<br />
<br />
The Solutions Architect will be responsible for architecting and designing comprehensive solutions that meet with our customers’ requirements for Rovi’s Passport Interactive Programming Guide (IPG).  Working side-by-side with prospective and existing customers, the Solutions Architect plays a key role in the successful selection, purchase, installation and maintenance of IPG solutions.  In addition to demonstrated strengths in systems assessment and design, the Solutions Architect must also possess strong interpersonal skills and be able to relate to a wide range of technical and business individuals, including managers and executives within customer environments.
 
 
Responsibilities:<br />
<br />
•	Develop and present IPG solution architectures internally and to customers and partners 
•	Perform impact and system analyses based on customer requirements.
•	Support proposal development.
•	Support the development of test architectures and technology validation strategies.
•	Develop consensus and working relationships with technical teams from other external and internal cross-functional teams to ensure coordination and scalability.
•	Collaborate with other technical teams in the exchange and transfer of technical knowledge and in the development and evolution of architecture standards, guidelines, reference architecture, and the Passport Product Roadmap. 
•	Build and deliver technical and business blueprints that map to customers’ business goals and requirements.
•	Partner across internal and external functional teams to gather facts, develop and deliver cohesive solutions that meet customer requirements.
•	Other relevant duties as assigned.<br />
<br />
Qualifications &amp; Experience:<br />
<br />
•	MUST have experience with digital video systems including architectures and equipment such as digital video set top boxes, head-ends, conditional access (security) and digital video servers.  
•	Must have experience with  Motorola and Cisco headends
•	10+ years of progressive technical and leadership experience in network engineering and design roles in the service provider or systems operator space.
•	Demonstrated knowledge of object oriented analysis and design.
•	Demonstrated knowledge of and experience with systems integration methods and technologies. 
•	Demonstrated experience in performing complex analysis, consulting and providing recommendations to customers. 
•	Demonstrated knowledge of and experience with best practices of quality management.
•	8+ years software development experience in a Unix-based environment
•	Expertise in C/C++ object oriented multithreading
•	Experience developing, analyzing, and implementing complex algorithms 
•	Experience in CORBA
•	Experience in PERL
•	Experience in SUN RPC experience required
•	BS or MS degree in Computer Science or related field,  or an equivalent combination of education, training, and work experience
 
Personal:<br />
<br />
•	Able to prepare specifications and reports, deliver oral presentations, and explain complex technical concepts in simple terms.
•	Possess strong leadership skills and the ability to providing direction to cross-functional teams responsible for resolution of complex technical challenges. 
•	Good knowledge of project management concepts. 
•	Able to quickly learn, assess, adapt and respond effectively and appropriately to changing environments.
•	Enjoys the challenges encountered in selling complex technology in a competitive environment.
•	Customer focused - understands and appropriately responds to customers' business needs. 
•	Able to interface effectively and collaborate with clients, peers, and management to develop solutions and ensure stakeholder buy- in. 
•	Able to accurately analyze information and make sound decisions.  
•	Takes initiative and accountability for achieving results.
•	Strong sense of personal ethics and values.<br />
<br />
Eric Rydingsword
Employment Specialist
 
Rovi Corporation
 PH 408-764-5402 |  C 650-218-8600  |  FAX 408-567-1806 |  EMAIL <script type="text/javascript">document.write('<a href="' + 'mailto:Eric' + '.' + 'Rydingsword' + '@' + 'RoviCorp' + '.' + 'com' + '" class="email" title="Send a message">' + 'Send a message' + '</a>')</script><noscript><p>Please enable JavaScript to see this address</p></noscript>
<a href="http://www.rovicorp.com" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://www.rovicorp.com</a>
Rovi. The new name for Macrovision.</body>
		<dc:creator>Eric Rydingsword</dc:creator>
		<category>Queries</category>
		<pubDate>Fri, 05 Feb 2010 04:33:58 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/67#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/67</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/67</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:67</trackback:ping>
	</item>

	<item>
		<title>Boost C++ Dev Setup</title>
		<link>http://morison.biz/technotes/articles/50</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/50</guid>
		<description>Get Python

I use boost.python, so python must be installed before building boost. No need to build from source, just get the Windows installer from http://python.org/. I'm using python 2.6 right now, haven't tried the 3.X series yet. Add C:\Python26 to your Windows PATH environment variable. (You can do it when you modify that below.)
Boost Build

The boost windows docs has all the instructions you really need to build boost. This guide only adapts that to my local dev conventions
 Get the boost source from http://sourceforge.net/projects/boost/files/
 Also, get the Windows bjam .exe, currently ... more  </description>
		<body xmlns="http://www.w3.org/1999/xhtml"><h2 id="title_3" >Get Python</h2>
I use boost.python, so python must be installed before building boost. No need to build from source, just get the Windows installer from <a href="http://python.org/." title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://python.org/.</a> I'm using python 2.6 right now, haven't tried the 3.X series yet. Add C:\Python26 to your Windows PATH environment variable. (You can do it when you modify that below.)
<h2 id="title_4" >Boost Build</h2>
The <a href="http://www.boost.org/doc/libs/1_39_0/more/getting_started/windows.html" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">boost windows docs</a> has all the instructions you really need to build boost. This guide only adapts that to my local dev conventions
<ul><li> Get the boost source from http://sourceforge.net/projects/boost/files/
</li><li> Also, get the Windows bjam .exe, currently rev'd at: http://sourceforge.net/projects/boost/files/boost-jam/boost-jam-3.1.17-1-ntx86.zip/download
</li><li> Make your dev dirs. I use cygwin, you can easily translate to the Windows command shell. Unless you have tar, though, make sure you download the zip distro of boost. Also, I use the cygpath of "http://morison.biz/" instead of "http://morison.biz/cygdrive", i.e., I run <code>mount -s --change-cygdrive-prefix /</code>
<pre>cd "http://morison.biz/c/Documents and Settings/Rod/My Documents"<br/>mkdir -p Devel/local<br/>cd Devel/local<br/>mkdir bin lib src tmp<br/>cd src<br/>tar jxf ~/Downloads/boost_1_39_0.tar.bz2 <br/>cd ../bin<br/>unzip ~/Downloads/boost-jam-3.1.17-1-ntx86.zip <br/>mv boost-jam-3.1.17-1-ntx86/bjam.exe  .<br/>chmod +x bjam.exe<br/>rm -rf boost-jam-3.1.17-1-ntx86/</pre>
</li><li> Add the Devel/local/bin path to your Windows path variable (Control Panel->System, Advanced Tab, Environment Variables Button):<br />
<br />
<span class="inline_image"><span><img src="http://morison.biz/technotes/images/article/50/DevelLocalBinPath.png" alt="DevelLocalBinPath.png"  title=""http://morison.biz/></span></span>
</li><li> Start a Visual C++ command shell, i.e., menu to something like: <br />
<br />
<span class="inline_image"><span><img src="http://morison.biz/technotes/images/article/50/StartVisualStudioSHell.png" alt="StartVisualStudioSHell.png"  title=""http://morison.biz/></span></span>
<pre>Setting environment for using Microsoft Visual Studio 2008 x86 tools.<br/>C:/Users/rod/KlickFu/Devel/local/src/boost_1_39_0>bjam --build-dir=../../tmp/boost --prefix=../.. --toolset=msvc --threading=multi --runtime-link=static  link=static debug release install</pre>
Actually, I'm currently building with...
<pre>C:Develboost_1_43_0>bjam --build-dir=../tmp --prefix=../boost --build-type=complete runtime-link=static --without-graph --without-graph_parallel --without-mpi --without-wave msvc install</pre></li></ul></body>
		<dc:creator>rod</dc:creator>
		<category>C++</category>
		<pubDate>Mon, 31 May 2010 14:29:36 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/50#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/50</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/50</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:50</trackback:ping>
	</item>

	<item>
		<title>Remount a readonly disk readwrite</title>
		<link>http://morison.biz/technotes/articles/65</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/65</guid>
		<description>Just a reminder</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">Just a reminder</div>
mount -o remount,rw /dev/sda1 /</body>
		<dc:creator>rod</dc:creator>
		<category>Linux</category>
		<pubDate>Thu, 10 Dec 2009 06:59:54 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/65#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/65</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/65</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:65</trackback:ping>
	</item>

	<item>
		<title>How To Build a Vhosted Linux Development Server on Windows using VirtualBox</title>
		<link>http://morison.biz/technotes/articles/61</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/61</guid>
		<description>I've been doing a fair bit of PHP and Python on Linux recently. My favorite PHP editor, PhpEd is Windows only. However, I prefer to develop LAMP code on LAMP. Here's a solution: Linux on VirtualBox, networked to the host Windows OS</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">I've been doing a fair bit of PHP and Python on Linux recently. My favorite PHP editor, <a href="http://www.nusphere.com/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">PhpEd</a> is Windows only. However, I prefer to develop LAMP code on LAMP. Here's a solution: Linux on VirtualBox, networked to the host Windows OS.</div>
</body>
		<dc:creator>rod</dc:creator>
		<category>Sysadmin</category>
		<pubDate>Sat, 13 Nov 2010 01:21:01 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/61#comments</comments>
		<slash:comments>8</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/61</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/61</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:61</trackback:ping>
	</item>

	<item>
		<title>Better Broadband Bandwidth Utilization Using Wondershaper on a Linux Router to Limit the Uplink</title>
		<link>http://morison.biz/technotes/articles/62</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/62</guid>
		<description>Since I did some streaming video experiments in the early years of this century I've known that maxing both directions of an internet connection kills throughput. I did some experiments, initially to improve my SIP Phone performance (when my son is playing online games, TBH) and came up with a &quot;low-hanging fruit&quot; solution</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">Since I did some streaming video experiments in the early years of this century I've known that maxing both directions of an internet connection kills throughput. I did some experiments, initially to improve my SIP Phone performance (when my son is playing online games, TBH) and came up with a "low-hanging fruit" solution.</div>
I'll spare the gory details, but if you study "canonical" TCP congestion algorithms and experiment on how they behave, you quickly find that maxing out both directions of a full duplex TCP pipe just kills performance all around. If you're interested in the ground up details, the best place to start is the classic work, <a href="http://www.kohala.com/start/tcpipiv1.html" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">TCP/IP Illustrated Vol 1</a>. Much of this book's lore was woven into early network devices (and drivers) and remains much intact, afaict. <br />
<br />
<p class="caution"><img src="http://morison.biz/technotes/skins/technotes2/icons/codes/caution.gif" width="10" height="10" alt="!!!" /> To use Wondershaper, you'll have to use a Linux computer as your router. Afaik, most basic broadband routers don't provide traffic limiting features. Setting up a Linux router for your broadband is not a good first-time Linux project. For more info, perhaps look at <a href="http://en.wikipedia.org/wiki/List_of_router_or_firewall_distributions" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://en.wikipedia.org/wiki/List_of_router_or_firewall_distributions</a> or <a href="http://www.stanford.edu/~fenn/linux/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://www.stanford.edu/~fenn/linux/</a> . It's not terribly difficult to do with a standard <a href="http://www.ubuntu.com/products/whatIsubuntu/serveredition" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">Ubuntu Server</a> distro, which is what I use.</p>If you want to cut to the chase, and improve your internet connection bandwidth, here's how I finagled the problem. First, I went to my ISPs bandwidth testing site late at night, when I knew not much else was happening on my connection. This effect can be had by shutting down everything except one bandwidth testing computer and your router. Better is to take that computer straight into the internet connection, but that was way too much work for my purposes. (And, would have involved way too much time in my basement!)<br />
<br />
For me <a href="http://www.speakeasy.net" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">www.speakeasy.net</a> provides a nice testing service at <a href="http://www.speakeasy.net/speedtest/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://www.speakeasy.net/speedtest/</a> . I can't say whether this will suffice for non-speakeasy users. However, after running this test several times, I settled on a 3621 kbits/sec downlink and a 630 kbits/sec uplink as a baseline.<br />
<br />
Then, use whatever traffic shaping tool you have to experiment with throughput at and below those values. The easiest, admittedly blunt knife, tool that I've found is <a href="http://lartc.org/wondershaper/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">Wondershaper</a>. Wondershaper is available in Ubuntu, i.e.
<pre>sudo apt-get install wondershaper</pre>
Also, in the Ubuntu docs, you may find <a href="http://ubuntuforums.org/archive/index.php/t-25911.html" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://ubuntuforums.org/archive/index.php/t-25911.html</a> useful...I certainly did.<br />
<br />
In my case, with the 3621/630 profile, I tried Wondershaper at 3500/650, 4000/650, 4000/625 and 4000/600. To stress the connection, I tried a series of tests with 1-2 downloads and 0-2 uploads. I used <a href="http://www.eos.ncsu.edu/remoteaccess/man/scp.html" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">scp</a> to a hosted server of mine that can reliably max out my connection. Scp is nice because it prints out its bandwidth when it's done, or ^C'd. Yes, scp introduces some overhead, and it doesn't measure true "line" bits. The Flash based Speakeasy test uses the Flash plugin, but this isn't rocket science, right? Suffice it to say, there are far bigger holes in my methodology...but time is money, as they say, and I declared "victory" without having to be more precise.<br />
<br />
Without getting into details (you can back my inference out of the graphs below) I concluded that my connection is insensitive to downlink shaping, but terribly sensitive to uplink shaping. Without shaping, whenever an upload was going full-bore, I lost 80-90% of my download bandwidth. By throttling uplink to 90-95% of the max, I got a big chunk of that back. With the throttled uplink my downloads only lost 10-30% of their speed, quite an improvement.<br />
<br />
No time or space for the rationale, but anyone familiar with the term "TCP Round Trip ACK" can quickly imagine why. See <a href="http://en.wikipedia.org/wiki/Transmission_Control_Protocol_" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">Wikipedia's TCP entry</a>. Better yet, get the <a href="http://www.kohala.com/start/tcpipiv1.html" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">Steven's Book</a>, it's one of the best technical books every written, IMHO.<br />
<br />
So here's the pretty picture. Bandwidth on the Y axis. My 5 traffic scenarios on the X. And a differently colored line for each shaping scenario. Which would you rather have? <br />
<br />
<span class="inline_image"><span><img src="http://morison.biz/technotes/images/article/62/TrafficShapingChart.png" alt="TrafficShapingChart.png"  title=""http://morison.biz/></span></span><br />
<br />
And, even if you don't want to shape your traffic, when your teenager's Youtube upload brings everyones browsing in the house to a crawl, at least you'll know why. Which begs the question: why aren't these features built into home broadband routers or, better yet, into the TCP framework of broadband service providers!?<br />
<br />
<p class="note"><img src="http://morison.biz/technotes/skins/technotes2/icons/codes/note.gif" width="10" height="10" alt="" /> Postscript: For those interested, a good bit of research has been done on this problem, particularly under the name of <a href="http://en.wikipedia.org/wiki/FAST_TCP" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">FastTCP</a>. <a href="http://fastsoft.com" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://fastsoft.com</a> is commercial spinoff of that project and has some <a href="http://fastsoft.com/white-papers/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">pertinent white papers</a> on the subject.</p></body>
		<dc:creator>rod</dc:creator>
		<category>Sysadmin</category>
		<pubDate>Fri, 07 Aug 2009 04:43:00 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/62#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/62</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/62</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:62</trackback:ping>
	</item>

	<item>
		<title>Convert a .crt Certificate to a .pem file</title>
		<link>http://morison.biz/technotes/articles/60</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/60</guid>
		<description>Every year or so I update CA'd certs and usually forget that my mailserver (cyrus+postfix) needs a PEM format file. Then, I have to fish around for the openssl commands that do the job</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">Every year or so I update CA'd certs and usually forget that my mailserver (cyrus+postfix) needs a PEM format file. Then, I have to fish around for the openssl commands that do the job.</div>
<pre>openssl x509 -in morison.org.crt -out morison.org.der -outform DER<br/>openssl x509 -in morison.org.der -inform DER -out morison.org.pem -outform PEM<br/>sudo cp ./morison.org.pem /etc/ssl/certs/<br/>sudo /etc/init.d/cyrus2.2 restart<br/>sudo /etc/init.d/postfix restart</pre>
Thanks for <a href="http://moze.koze.net/?p=81" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://moze.koze.net/?p=81</a> for the reminder this time.</body>
		<dc:creator>rod</dc:creator>
		<category>Sysadmin</category>
		<pubDate>Thu, 23 Apr 2009 00:13:59 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/60#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/60</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/60</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:60</trackback:ping>
	</item>

	<item>
		<title>VirtualBox for Ubuntu on Vista 64 (The VMWare Killer for Developer VMs?)</title>
		<link>http://morison.biz/technotes/articles/58</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/58</guid>
		<description>Ok, that's an overstatement. I used VMWare Workstation successfully for a year to develop for Win2k web servers on my XP desktop. However, when I needed an Ubuntu guest on Windows Vista host (for Python/TurboGears dev), VMWare got ugly with various host apps.
I searched...and I found...VirtualBox.

This doc is a loose how-to, because some steps were poorly documented</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">Ok, that's an overstatement. I used VMWare Workstation successfully for a year to develop for Win2k web servers on my XP desktop. However, when I needed an Ubuntu guest on Windows Vista host (for Python/TurboGears dev), VMWare got ugly with <a href="http://communities.vmware.com/message/1062725;jsessionid=A1A01540B8DEAF31480E239DCDB63395" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">various host apps</a>.
I searched...and I found...VirtualBox.<br />
<br />
This doc is a loose how-to, because some steps were poorly documented.</div>
<br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  Go to the <a href="http://www.virtualbox.org/wiki/Downloads" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">VirtualBox download site</a> and get the appropriate Windows host installer (x86 or AMD64). Install VirtualBox.<br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  Go get the <a href="http://www.ubuntu.com/getubuntu/download" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">install iso for your guest OS</a>.<br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  Start VirtualBox, and click the "New" tool. The wizard is straightforward. Before starting the VM, be sure to mount your installer .iso as the CD.<br />
<br />
<span class="inline_image"><span><img src="http://morison.biz/technotes/images/article/58/VirtualBoxNew.png" alt="VirtualBoxNew.png"  title=""http://morison.biz/></span></span><br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  Powerup and install. The VM will capture the mouse when you click in it, and you'll need the "uncapture" key to get it back, right ctrl by default, I recall. I remap to the "Left Windows" key (personal preference.) However, once you install the guest and install the VBoxGuestAdditions on top, your VM can "play nice" with the host for mouse capture, copy/paste, etc.<br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  Therein lies the rub: the VBoxGuestAdditions install was _not_ that clearly documented. Even finding it was a bit tricky. By following the url of an older version from an <a href="http://ubuntuforums.org/showthread.php?p=6633107" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">ubuntu forums thread</a> I backed out that I should look under <a href="http://download.virtualbox.org/virtualbox/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://download.virtualbox.org/virtualbox/</a> , or specifically <a href="http://download.virtualbox.org/virtualbox/2.1.2/VBoxGuestAdditions_2.1.2.iso" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">the 2.1.2 VBoxGuestAdditions download</a> from <a href="http://download.virtualbox.org/virtualbox/2.1.2/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">this webdir</a>.<br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  To install the guest additions, I actually had to <a href="http://download.virtualbox.org/virtualbox/2.1.2/UserManual.pdf" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">RTFM</a>, particularly section "4.3.1 Installing the Linux Guest Additions"<br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  Add, then mount the VBoxGuestAdditions.iso (from the Devices menu of the VM). <br />
<br />
<span class="inline_image"><span><img src="http://morison.biz/technotes/images/article/58/VirtualBoxMountIso.png" alt="VirtualBoxMountIso.png"  title=""http://morison.biz/></span></span><br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  If/when a popup in the guest OS asks to automatically run software, say "Cancel"<br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  Open a shell on the guest (Applications->Accessories->Terminal, for Ubuntu Desktop). You'll need to install DKMS, then run the guest additions script, and reboot.
<pre>$ sudo apt-get install dkms<br/>$ sudo sh /cdrom/VBoxLinuxAdditions-x86.run #look for the amd64 if that's your linux guest install<br/>$ sudo reboot</pre><br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  ...And presto, your Ubuntu (or other linux) should come up, nicely sharing the mouse point with Vista, auto-resizing the guest desktop when the host window changes, and so on.<br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  Proceed to bring your guest OS up to date, and do watchya do.<br />
<br />
<span class="inline_image"><span><img src="http://morison.biz/technotes/images/article/58/UbuntuInVirtualBox.png" alt="UbuntuInVirtualBox.png"  title=""http://morison.biz/></span></span></body>
		<dc:creator>rod</dc:creator>
		<category>Sysadmin</category>
		<pubDate>Fri, 13 Feb 2009 15:23:59 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/58#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/58</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/58</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:58</trackback:ping>
	</item>

	<item>
		<title>My Choice: Best IPTables Tutorial</title>
		<link>http://morison.biz/technotes/articles/57</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/57</guid>
		<description>This link is hands down the best tutorial of IpTables I've come across</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">This link is hands down the best tutorial of IpTables I've come across.</div>
Linux IpTables can be confounding. I usually create a rule and try it out with tcpdumps running on both sides, sort of a "hail Mary" approach. A <i>careful</i> read-through of <a href="http://iptables-tutorial.frozentux.net/iptables-tutorial.html" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">Iptables Tutorial 1.2.2</a> really straightened me out. <br />
<br />
In particular, the <a href="http://iptables-tutorial.frozentux.net/iptables-tutorial.html#DNATTARGET" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">DNAT Target</a> section finally answered my questions, and fixed the issue, with my port forwarded servers not responding to clients from within their masqueraded network.<br />
<br />
A very good read, especially if you've "kinda" figured out IpTables, just enough to be dangerous, but are missing some key points to get rules to do what you want.<br />
<br />
(You can skip the lengthy SCTP coverage, unless that's something you're working with.)<br />
<br />
Once again: <a href="http://iptables-tutorial.frozentux.net/iptables-tutorial.html" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://iptables-tutorial.frozentux.net/iptables-tutorial.html</a></body>
		<dc:creator>rod</dc:creator>
		<category>Linux</category>
		<pubDate>Tue, 10 Feb 2009 11:48:06 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/57#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/57</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/57</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:57</trackback:ping>
	</item>

	<item>
		<title>PostgreSQL 1A</title>
		<link>http://morison.biz/technotes/articles/56</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/56</guid>
		<description>I spent the last 8 years on a lot of MySQL and little MSSQL. Now, I'm on a PostgreSQL project. Here's my cheat sheet of DBMS specific commands I needed to figure out right away</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">I spent the last 8 years on a lot of MySQL and little MSSQL. Now, I'm on a <a href="http://www.postgresql.org" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">PostgreSQL</a> project. Here's my cheat sheet of DBMS specific commands I needed to figure out right away.</div>
<ul><li>Install on Ubuntu 8.10</li></ul>
<pre>$ sudo apt-get install postgresql-8.3 postgresql-server-dev-8.3<br/>$ sudo vi /etc/postgresql/8.3/main/postgresql.conf <br/># uncomment the listen_addresses = 'localhost' line<br/># optional: change localhost to machine hostaddr if you want outside access<br/>$ sudo /etc/init.d/postgresql-8.3 restart</pre>
<ul><li>Give the "root" db user a password, create a new dbuser and a database with access privs for that new dbuser. Also, give the new dbuser perms to create more databases.</li></ul>
<pre>$ sudo -u postgres psql template1<br/>template1=# ALTER USER postgres WITH UNENCRYPTED PASSWORD 'P8ss';<br/>ALTER ROLE<br/>template1=# CREATE USER user1 CREATEDB;<br/>CREATE ROLE<br/>template1=# ALTER USER user1 WITH UNENCRYPTED PASSWORD 'P9ss';<br/>ALTER ROLE<br/>template1=# CREATE DATABASE db1 WITH OWNER user1;<br/>CREATE DATABASE<br/>template1=# q</pre>
<ul><li>To suck a sqldump into that database</li></ul>
<pre>$ zcat /PathToDbDump/DbDump.sql.gz | psql -h localhost -U postgres -d user1</pre>
<ul><li>Logging in as non-postgres user (this bit baffled me originally, until I decoded the postgres init settings): /etc/postgresql/8.3/main/pg_hba.conf has security settings that say, "If connected via unix socket then require the db username match the process owner name." By default psql uses the unix socket. That's fine for the "root" db user (postgres), but not how you want access other dbs. However, for network socket connections pg_hba.conf is set to use only password check against it's user table. Yay. So access through the socket, which is the general case in production systems anyway, as the db is on a dedicated machine.</li><li>Log in as the user1 and create a db.</li></ul>
<pre>psql --username user1 --password -h localhost template1<br/>CREATE DATABASE db2 WITH OWNER user1;</pre>
<p class="note"><img src="http://morison.biz/technotes/skins/technotes2/icons/codes/note.gif" width="10" height="10" alt="" /> 
<ul><li>if you don't put a db name on the psql command line, it will assume the db name is the same as the user</li><li>postgres provides an easily scripted command, createdb, that does most of what the CREATE DATABASE command does.</li><li>read the postgres docs for encrypted passwords, recommended for production</li></ul>
</p></body>
		<dc:creator>rod</dc:creator>
		<pubDate>Wed, 28 Jan 2009 09:44:28 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/56#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/56</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/56</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:56</trackback:ping>
	</item>

	<item>
		<title>WxPython 2.8 Vista 64 bit crash - workaround found</title>
		<link>http://morison.biz/technotes/articles/55</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/55</guid>
		<description>Originally posted on the wxpython-users list</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">Originally posted on the wxpython-users list</div>
I've puzzled over the Vista 64 crashes this past week, and the reports similar to my problem:<br />
<br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  <a href="http://www.nabble.com/wxPython-Crash-td20605396.html" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://www.nabble.com/wxPython-Crash-td20605396.html</a><br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  <a href="http://trac.wxwidgets.org/ticket/10203" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://trac.wxwidgets.org/ticket/10203</a><br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  <a href="http://trac.wxwidgets.org/ticket/10082" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://trac.wxwidgets.org/ticket/10082</a><br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  <a href="http://www.python-forum.org/pythonforum/viewtopic.php?f=4&amp;p=46918" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://www.python-forum.org/pythonforum/viewtopic.php?f=4&amp;p=46918</a><br />
<br />
I tried hand patching the supposed fix, <a href="http://trac.wxwidgets.org/changeset/56863," title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://trac.wxwidgets.org/changeset/56863,</a> from the trunk into WX_2_8_BRANCH, but no joy.<br />
<br />
Finally, after going back to wxWidgets C++ apps to see why they didn't crash, I realized wxWidgets apps get built with a different manifest than the python.exe. The diff between the two manifests is in the Common Controls DLL. wxWidgets apps specifically call out the 6.0.0.0 common controls. Common controls is not in the python manifest.<br />
<br />
However, running my debug python, I can see that python.exe loads the 5.82 common controls, and assumed that mismatch was the source of the problem. So, I backed up my c:\Python26\python.exe, merged a manifest with 6.0 common controls into the python.exe and there was rejoicing, i.e., no crash.<br />
<br />
Here's the trick (you'll need the msft manifest tool, mt.exe, comes with visual studio, plus a manifest file with common controls 6.0.0.0, like the one out of the wxPython src distro):<br />
<br />
<pre>cd c:\Python26<br/>copy python.exe python-backup.exe<br/>copy pythonw.exe pythonw-backup.exe<br/>mt -inputresource:python.exe;#1 -manifest \PathToWxPySrc\src\winxp.vc9.manifest  -outputresource:python.exe;#1<br/>mt -inputresource:pythonw.exe;#1 -manifest \PathToWxPySrc\src\winxp.vc9.manifest  -outputresource:pythonw.exe;#1</pre><br />
<br />
The fix <a href="http://trac.wxwidgets.org/changeset/56863" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://trac.wxwidgets.org/changeset/56863</a> in the wxWidgets trunk (2.9 release, I expect) is reported to solve the problem, but I wonder whether it really pulls in the 6.0 common controls dll (for wxPython, that is).</body>
		<dc:creator>rod</dc:creator>
		<pubDate>Fri, 16 Jan 2009 05:23:44 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/55#comments</comments>
		<slash:comments>1</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/55</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/55</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:55</trackback:ping>
	</item>

	<item>
		<title>References, FAQs, Debug &amp; Test Tips</title>
		<link>http://morison.biz/technotes/articles/48</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/48</guid>
		<description>Other How-Tos, FAQs &amp; Ideas for mail system debug</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">Other How-Tos, FAQs &amp; Ideas for mail system debug</div>
<h2 id="title_1" >References</h2><br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  <a href="https://help.ubuntu.com/community/Cyrus" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">https://help.ubuntu.com/community/Cyrus</a><br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  <a href="http://www.postfix.org/SASL_README.html#server_cyrus" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://www.postfix.org/SASL_README.html#server_cyrus</a><br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  <a href="http://tldp.org/HOWTO/Postfix-Cyrus-Web-cyradm-HOWTO/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://tldp.org/HOWTO/Postfix-Cyrus-Web-cyradm-HOWTO/</a><br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  <a href="http://www.delouw.ch/linux/Postfix-Cyrus-Web-cyradm-HOWTO/html/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://www.delouw.ch/linux/Postfix-Cyrus-Web-cyradm-HOWTO/html/</a><br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  <a href="http://manpages.ubuntu.com/manpages/hardy/man1/policyd-spf.html" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://manpages.ubuntu.com/manpages/hardy/man1/policyd-spf.html</a><br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  <a href="http://doc.ubuntu.com/ubuntu/serverguide/C/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://doc.ubuntu.com/ubuntu/serverguide/C/</a>
<h2 id="title_2" >Tips &amp; Tricks</h2><br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  Send mails locally with the Linux command line mail program
<pre>sudo apt-get install mailutils<br/>mail rod@moleculemedia.net -s test<br/>Cc: rod@morison.org<br/>test<br/>^D</pre><br />
<img src="http://morison.biz/technotes/skins/technotes2/icons/bullet.gif" width="7" height="7" alt="-" />  Can't create Sieve files
<pre>sudo bash<br/>cd /var/spool/cyrus/sieve<br/>ls domain<br/>mkdir domain<br/>cp -a [a-z] domain/<br/>chown cyrus:mail domain<br/>chmod o-rwx domain</pre></body>
		<dc:creator>rod</dc:creator>
		<pubDate>Tue, 30 Sep 2008 04:42:14 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/48#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/48</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/48</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:48</trackback:ping>
	</item>

	<item>
		<title>Lockdown</title>
		<link>http://morison.biz/technotes/articles/47</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/47</guid>
		<description>Security Considerations</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">Security Considerations</div>
Under Constrution   <img src="http://morison.biz/technotes/skins/images/smileys/winkgrin.gif" alt="" /></body>
		<dc:creator>rod</dc:creator>
		<pubDate>Tue, 30 Sep 2008 04:42:33 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/47#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/47</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/47</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:47</trackback:ping>
	</item>

	<item>
		<title>DNS Preliminaries</title>
		<link>http://morison.biz/technotes/articles/42</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/42</guid>
		<description>Public mail service requires a static IP and DNS support. Here is a quick list of what you need</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">Public mail service requires a static IP and DNS support. Here is a quick list of what you need.</div>
<h2 id="title_2" >IP &amp; DNS Setup</h2>
You'll need a static IP and access to the DNS config for you domain. For the static, it's a matter of requesting the static IP from your access provider...if your service supports such...if not, read the commentary at <a href="http://morison.biz/technotes/articles/37" title="Read the article" class="article">The Internet Server Project - Part II - Planning<br />
<br />
</a>.<br />
<br />
For DNS, most likely the registrar for your domain has a web interface for making changes.
<h3 id="title_1" >Checklist</h3>
<ol class="1"><li> A static IP, from your access or hosting provider
</li><li> An 'A' record pointing to a name to your static ip, using a name something like "mailserver.example.domain". In this guide we'll use <i>example.domain</i> as a placeholder for your own domain.
</li><li> An MX record for <i>example.domain</i> which points at <i>mailserver.example.domain</i>
</li><li> CNAME or A records for <i>mail.example.domain</i>, <i>smtp.example.domain</i> and <i>webmail.example.domain</i>. If you use CNAME's, point them at <i>mailserver.example.domain</i>, if A use your static IP.</li></ol>
<h2 id="title_3" >Next Step: <a href="http://morison.biz/technotes/articles/43" title="Read the article" class="article">Ubuntu Install</a></h2></body>
		<dc:creator>rod</dc:creator>
		<category>Sysadmin</category>
		<pubDate>Thu, 01 Sep 2011 15:04:42 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/42#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/42</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/42</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:42</trackback:ping>
	</item>

	<item>
		<title>Anti-Spam &amp; Anti-Virus Install</title>
		<link>http://morison.biz/technotes/articles/46</link>
		<guid isPermaLink="true">http://morison.biz/technotes/articles/46</guid>
		<description>Some of the best mail filtering technology the world has to offer...Most of this &quot;just works&quot; out of the Ubuntu installations. We'll add SPF checking directly info Postfix, too</description>
		<body xmlns="http://www.w3.org/1999/xhtml"><div class="introduction">Some of the best mail filtering technology the world has to offer...Most of this "just works" out of the Ubuntu installations. We'll add SPF checking directly info Postfix, too.</div>
<a href="http://www.ijs.si/software/amavisd/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">Amavisd</a> acts as a "master" daemon to pluggable mail scanning modules. We'll install <a href="http://www.clamav.net/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">ClamAV</a> anti-virus and <a href="http://spamassassin.apache.org/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">SpamAssassin</a> anti-spam. The SpamAssassin install will include several powerful spam detection tools, e.g., <a href="http://pyzor.sourceforge.net/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">pyzor</a>, <a href="http://razor.sourceforge.net/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">razor</a>, and others.
<ol class="1"><li> <b>Install the Goods</b>
<pre>sudo apt-get install amavisd-new spamassassin clamav-daemon<br/>sudo apt-get install pyzor razor python-policyd-spf<br/>sudo apt-get install arj cabextract cpio lha nomarch pax rar unrar unzip unzoo zip zoo</pre>
</li><li> <b>Add clamav to amavis group</b>
<pre>sudo adduser clamav amavis</pre>
</li><li> <b>Enable SpamAssassin</b> - 
<pre>sudo vi /etc/default/spamassassin</pre>
and change line 8 to <code>ENABLED=1</code>
</li><li> <b>Tell Amavis to Virus &amp; Spam Check</b>
<pre>sudo vi /etc/amavis/conf.d/15-content_filter_mode</pre>
and uncomment the virus &amp; spam check lines as shown:
<pre>@bypass_virus_checks_maps = (<br/>   %bypass_virus_checks, @bypass_virus_checks_acl, $bypass_virus_checks_re);</pre>
...
<pre>@bypass_spam_checks_maps = (<br/>   %bypass_spam_checks, @bypass_spam_checks_acl, $bypass_spam_checks_re);</pre>
</li><li> <b>Set Local Policy Prefs</b>
<pre>sudo vi /etc/amavis/conf.d/50-user</pre>
My policy is to tag, but pass all spam. Viruses are not delivered, but the postmaster is notified and the email is quarantined, such that it can be recovered if need be. You may want to study the Amavis docs and customize here.<br />
<br />
Change <code>example.domain</code> to yours. My <code>50-user</code> reads
<pre>use strict;<br/><br/>#<br/># Place your configuration directives here.  They will override those in<br/># earlier files.<br/>#<br/># See /usr/share/doc/amavisd-new/ for documentation and examples of<br/># the directives you can use in this file<br/>#<br/><br/>$log_level = 0;<br/><br/>@local_domains_maps =<br/>   ( [ ".$mydomain", 'example.domain' ] ); <br/><br/>$sa_spam_subject_tag = '<b>*SPAM</b>* ';<br/>$sa_tag_level_deflt  = -999;  # add spam info headers if at, or above that level<br/>$sa_tag2_level_deflt = 5.0; # add 'spam detected' headers at that level<br/>$sa_kill_level_deflt = 999; # triggers spam evasive actions<br/>$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent<br/><br/>$virus_admin = "postmaster@$mydomain"; # due to D_DISCARD default<br/>$spam_admin = "postmaster@$mydomain";<br/>$dsn_bcc = "maildebug@$mydomain";<br/><br/>$mailfrom_notify_admin     = "virusalert@$mydomain";<br/>$mailfrom_notify_recip     = "virusalert@$mydomain";<br/>$mailfrom_notify_spamadmin = "spamalert@$mydomain";<br/><br/>$final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)<br/>$final_banned_destiny     = D_REJECT;   # D_REJECT when front-end MTA<br/>$final_spam_destiny       = D_PASS;<br/>$final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)<br/><br/>#------------ Do not modify anything below this line -------------<br/>1;  # ensure a defined return</pre>
</li><li> <b>Integrate Amavisd into Postfix</b>
<pre>sudo vi /etc/postfix/main.cf</pre>
Add the following to the bottom of <code>/etc/postfix/main.cf</code>
<pre># Amavis ClamAV+SpamAssassin<br/>content_filter = smtp-amavis:[127.0.0.1]:10024<br/><br/># Postfix behavior/content controls<br/>#body_checks = regexp:/etc/postfix/body_checks<br/>#header_checks = regexp:/etc/postfix/header_checks<br/>smtpd_helo_required = yes<br/>disable_vrfy_command = yes<br/>smtpd_delay_reject = yes<br/>smtpd_helo_required = yes<br/>smtpd_error_sleep_time = 15s<br/>smtpd_soft_error_limit = 10<br/>smtpd_hard_error_limit = 20</pre>
</li><li> <b><code>/etc/postfix/master.cf</code></b>
<pre>sudo vi /etc/postfix/master.cf</pre>
Add the two "-o" lines shown under the line beginning with "pickup", to read:
<pre>pickup    fifo  n       -       -       60      1       pickup<br/>         -o content_filter=<br/>         -o receive_override_options=no_header_body_checks</pre>
Then add the following to the bottom of <code>/etc/postfix/master.cf</code>
<pre>smtp-amavis     unix    -       -       -       -       2       smtp<br/>        -o smtp_data_done_timeout=1200<br/>        -o smtp_send_xforward_command=yes<br/>        -o disable_dns_lookups=yes<br/>        -o max_use=20<br/><br/>127.0.0.1:10025 inet    n       -       -       -       -       smtpd<br/>        -o content_filter=<br/>        -o local_recipient_maps=<br/>        -o relay_recipient_maps=<br/>        -o smtpd_restriction_classes=<br/>        -o smtpd_delay_reject=no<br/>        -o smtpd_client_restrictions=permit_mynetworks,reject<br/>        -o smtpd_helo_restrictions=<br/>        -o smtpd_sender_restrictions=<br/>        -o smtpd_recipient_restrictions=permit_mynetworks,reject<br/>        -o smtpd_data_restrictions=reject_unauth_pipelining<br/>        -o smtpd_end_of_data_restrictions=<br/>        -o mynetworks=127.0.0.0/8<br/>        -o smtpd_error_sleep_time=0<br/>        -o smtpd_soft_error_limit=1001<br/>        -o smtpd_hard_error_limit=1000<br/>        -o smtpd_client_connection_count_limit=0<br/>        -o smtpd_client_connection_rate_limit=0<br/>        -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks</pre>
</li><li> <b><a href="http://www.openspf.org/" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">SPF</a> in Postfix</b> - SPF is already a part of SpamAssassin's scoring scheme. We can further utilize SPF in Postfix to reflect sites that disapprove certain usage and reject those messages outright. I recommend a read through of materials on the SPF site and relevant discussion lists. <br />
<br />
You can omit this step if you choose.
<pre>sudo vi /etc/postfix/main.cf</pre>
Add a comma to the end of the last line of the <code>smtpd_recipient_restrictions</code> settings and on a new line add
<pre>check_policy_service unix:private/policyd-spf</pre>
followed by
<pre>policyd-spf_time_limit = 3600</pre>
This section of your <code>main.cf</code> should look something like
<pre>smtpd_recipient_restrictions =<br/>        permit_sasl_authenticated,<br/>        permit_mynetworks,<br/>        reject_unauth_destination,<br/>        reject_invalid_hostname,<br/>        reject_non_fqdn_hostname,<br/>        reject_non_fqdn_sender,<br/>        reject_non_fqdn_recipient,<br/>        reject_unknown_sender_domain,<br/>        reject_unknown_recipient_domain,<br/>        reject_unauth_pipelining<br/>        reject_rbl_client bl.spamcop.net,<br/>        reject_rbl_client sbl-xbl.spamhaus.org,<br/>        reject_rbl_client list.dsbl.org,<br/>        check_policy_service unix:private/policyd-spf<br/>policyd-spf_time_limit = 3600</pre>
In master.cf:
<pre>sudo vi /etc/postfix/master.cf</pre>
At the bottom, add
<pre>policyd-spf  unix  -       n       n       -       0 spawn<br/>        user=nobody argv=/usr/bin/python /usr/bin/policyd-spf</pre>
</li><li> <b>Start/Restart All Concerned</b>
<pre>sudo /etc/init.d/postfix restart<br/>sudo /etc/init.d/amavis restart<br/>sudo /etc/init.d/clamav-daemon restart<br/>sudo /etc/init.d/spamassassin start</pre>
</li><li> <b>Test and Check</b> - Try another mail send and watch the log.
<pre>tail -f /var/log/mail.log</pre>
Look for the logfile line
<pre>Sep 29 13:50:25 mailserver amavis[8449]: (08449-01) Passed CLEAN, LOCAL [192.168.66.194] [192.168.66.194] &amp;lt;test@mailserver.morison.org> -> &amp;lt;test@mailserver.morison.org>, Message-ID: &amp;lt;48E13F6D.1010202@mailserver.morison.org>, mail_id: 8HLb1RzoY+ZW, Hits: -1.44, size: 564, queued_as: EC77724624, 3852 ms</pre>
for anti-spam action. Try it with a spam file (I'm sure you can find one.) You'll see
<pre>Sep 29 13:52:55 mailserver amavis[8454]: (08454-01) Passed SPAMMY, LOCAL [192.168.66.194] [192.168.66.194] &amp;lt;test@mailserver.morison.org> -> &amp;lt;test@mailserver.morison.org>, Message-ID: &amp;lt;48E13FFB.7000908@mailserver.morison.org>, mail_id: moC25mDhimPK, Hits: 8.824, size: 649, queued_as: 4B5E624624, 12174 ms</pre>
and look at the mail headers in your mail client:
<pre>X-Virus-Scanned: Debian amavisd-new at mailserver.morison.org<br/>X-Spam-Flag: YES<br/>X-Spam-Score: 8.824<br/>X-Spam-Level: <b>*</b>***<br/>X-Spam-Status: Yes, score=8.824 tagged_above=-999 required=5<br/>	tests=[ALL_TRUSTED=-1.44, AWL=-10.264, DIGEST_MULTIPLE=0.001,<br/>	PYZOR_CHECK=2.834, RAZOR2_CF_RANGE_51_100=0.5,<br/>	RAZOR2_CF_RANGE_E4_51_100=1.5, RAZOR2_CF_RANGE_E8_51_100=1.5,<br/>	RAZOR2_CHECK=0.5, URIBL_AB_SURBL=1.613, URIBL_JP_SURBL=2.857,<br/>	URIBL_OB_SURBL=2.132, URIBL_SBL=2.468, URIBL_SC_SURBL=2.523,<br/>	URIBL_WS_SURBL=2.1]</pre>
Finally, try sending a test virus from (the virus is dead, of course, but it triggers a ClamAV find):<br />
<br />
<a href="http://www.eicar.org/download/eicar.com" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://www.eicar.org/download/eicar.com</a> 
<a href="http://www.eicar.org/download/eicar_com.zip" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://www.eicar.org/download/eicar_com.zip</a>
<a href="http://www.eicar.org/download/eicarcom2.zip" title="Browse in a new window" class="external" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">http://www.eicar.org/download/eicarcom2.zip</a><br />
<br />
Look for
<pre>Sep 29 14:07:56 mailserver amavis[8449]: (08449-02) Blocked INFECTED (Eicar-Test-Signature), LOCAL [192.168.66.194] [192.168.66.194] &amp;lt;test@mailserver.morison.org> -> &amp;lt;test@mailserver.morison.org>, quarantine: J/virus-JfYri+IcyuAB, Message-ID: &amp;lt;48E1438B.5060502@mailserver.morison.org>, mail_id: JfYri+IcyuAB, Hits: -, size: 1062, 934 ms</pre>
and check your postmaster email.</li></ol><br />
<br />
<h2 id="title_1" >Epilogue</h2>
You're done, really. There are some security issues that could be better, discussed further in <a href="http://morison.biz/technotes/articles/47" title="Read the article" class="article">Lockdown</a>. (Yes, I know, passwords sitting the in filesystem plain readable, but they gotta get in, first.)</body>
		<dc:creator>rod</dc:creator>
		<pubDate>Tue, 30 Sep 2008 04:43:12 GMT</pubDate>
		<comments>http://morison.biz/technotes/articles/46#comments</comments>
		<slash:comments>0</slash:comments>
		<wfw:comment>http://morison.biz/technotes/comments/post.php/article/46</wfw:comment>
		<wfw:commentRss>http://morison.biz/technotes/comments/feed.php/article/46</wfw:commentRss>
		<trackback:ping>http://morison.biz/technotes/links/trackback.php?anchor=article:46</trackback:ping>
	</item>

</channel>
</rss>
