<?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"
	>

<channel>
	<title>Mike Naberezny</title>
	<atom:link href="http://mikenaberezny.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mikenaberezny.com</link>
	<description></description>
	<pubDate>Tue, 13 May 2008 04:55:58 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Parsing Quoted Strings in Ruby</title>
		<link>http://mikenaberezny.com/2008/04/28/parsing-quoted-strings-in-ruby/</link>
		<comments>http://mikenaberezny.com/2008/04/28/parsing-quoted-strings-in-ruby/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 12:40:37 +0000</pubDate>
		<dc:creator>Mike Naberezny</dc:creator>
		
		<category><![CDATA[Python]]></category>

		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://mikenaberezny.com/?p=155</guid>
		<description><![CDATA[Python has a nice module in the standard library called shlex that parses strings as a Unix shell would.  Here&#8217;s a Python interpreter session demonstrating its usage:

&#62;&#62;&#62; import shlex
&#62;&#62;&#62; shlex.split&#40;'foo &#34;bar baz&#34; qux'&#41;
&#91;'foo', 'bar baz', 'qux'&#93;

It&#8217;s useful for creating your own mini-languages or external DSLs that need to parse quoted strings like the one [...]]]></description>
			<content:encoded><![CDATA[<p>Python has a nice module in the standard library called <a href="http://docs.python.org/lib/module-shlex.html">shlex</a> that parses strings as a Unix shell would.  Here&#8217;s a Python interpreter session demonstrating its usage:</p>

<div class="wp_syntax"><div class="code"><pre class="python">&gt;&gt;&gt; <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">shlex</span>
&gt;&gt;&gt; <span style="color: #dc143c;">shlex</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'foo &quot;bar baz&quot; qux'</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#91;</span><span style="color: #483d8b;">'foo'</span>, <span style="color: #483d8b;">'bar baz'</span>, <span style="color: #483d8b;">'qux'</span><span style="color: black;">&#93;</span></pre></div></div>

<p>It&#8217;s useful for creating your own mini-languages or <a href="http://www.martinfowler.com/bliki/DomainSpecificLanguage.html">external DSLs</a> that need to parse quoted strings like the one shown above.</p>
<p>We recently built an <a href="http://maintainable.com/case_studies/asset_tracker">inventory tracking</a> application in Ruby that has a user interface for selecting search filters.  To expose the same search capabilities as a web service, we created a simple query language.  I was looking for an <code>shlex</code> equivalent in Ruby.</p>
<p>It turns out that the Ruby Standard Library has a module called <a href="http://ruby-doc.org/core/classes/Shellwords.html">Shellwords</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby">&gt;&gt; <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'shellwords'</span>
=&gt; <span style="color:#0000FF; font-weight:bold;">true</span>
&gt;&gt; <span style="color:#CC00FF; font-weight:bold;">Shellwords</span>::shellwords<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'foo &quot;bar baz&quot; qux'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
=&gt; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;foo&quot;</span>, <span style="color:#996600;">&quot;bar baz&quot;</span>, <span style="color:#996600;">&quot;qux&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></div></div>

<p><code>Shellwords</code> is a little less capable than <code>shlex</code> but handles the most common use case just fine.  It&#8217;s a convenient solution for a problem that comes up too often.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikenaberezny.com/2008/04/28/parsing-quoted-strings-in-ruby/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Speaking at OSCON 2008</title>
		<link>http://mikenaberezny.com/2008/04/02/speaking-at-oscon-2008/</link>
		<comments>http://mikenaberezny.com/2008/04/02/speaking-at-oscon-2008/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 15:18:26 +0000</pubDate>
		<dc:creator>Mike Naberezny</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Testing]]></category>

		<category><![CDATA[phpunit]]></category>

		<guid isPermaLink="false">http://mikenaberezny.com/?p=103</guid>
		<description><![CDATA[The OSCON 2008 website has published its talk schedule.  I&#8217;ll be giving two talks at OSCON this year; one on the Python track and one on the PHP track.
Supervisor as a Platform
I will quickly introduce you to Supervisor and the immediate benefits of running your server processes under it.  We will then dive [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mikenaberezny.com/wp-content/uploads/2008/04/oscon2008_banner_speaker_210x60.gif" style="float: right; margin: 0; padding: 0;" />The OSCON 2008 website has published its <a href="http://en.oreilly.com/oscon2008/public/schedule/grid">talk schedule</a>.  I&#8217;ll be giving two talks at OSCON this year; one on the <a href="http://en.oreilly.com/oscon2008/public/schedule/topic/Python">Python track</a> and one on the <a href="http://en.oreilly.com/oscon2008/public/schedule/topic/PHP">PHP track</a>.</p>
<h4>Supervisor as a Platform</h4>
<p>I will quickly introduce you to <a href="http://supervisord.org">Supervisor</a> and the immediate benefits of running your server processes under it.  We will then dive into how applications written specifically for Supervisor can take advantage of it as a platform &#8212; writing your own event listeners to observe Supervisor and the process lifecycle, controlling with XML-RPC, and extending the Supervisor core with your own Python extensions.  </p>
<p>This will be an expanded version of the talk I gave with <a href="http://plope.com">Chris McDonough</a> at PyCon 2008.  Since PyCon, there&#8217;s been quite a few interesting developments in Supervisor like the ability to extend <code>supervisorctl</code> and progress made on configuration reloading.  We&#8217;ll touch on these as well, so if you attended the PyCon talk there will still be new and interesting material in this talk for you.</p>
<h4>Integration Testing PHP Applications</h4>
<p>While more PHP developers are recognizing the importance and benefits of unit testing, the uptake of PHP developers using automated integration or acceptance testing is relatively slow. This testing is equally crucial to maintaining the integrity of applications.</p>
<p>I&#8217;m going to help get you started testing at the application level with practical tips and source code.  We&#8217;ll look at how to structure your HTML markup so it&#8217;s more easily testable, making tests easier to write and maintain with CSS selectors, organizing your tests, and testing with or without a browser.  </p>
<p>We write a lot of PHP applications with this kind of testing at <a href="http://maintainable.com">Maintainable</a>.  Before the conference, we plan to release some open source PHP code to help you test that we&#8217;ll cover in the talk as well.  I&#8217;d also suggest you check out Sebastian Bergmann&#8217;s <a href="http://sebastian-bergmann.de/archives/763-PHPUnit-Tutorial-OSCON-2008.html">tutorial session</a> on PHPUnit&#8217;s integration with Selenium RC.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikenaberezny.com/2008/04/02/speaking-at-oscon-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fail Early</title>
		<link>http://mikenaberezny.com/2008/03/25/fail-early/</link>
		<comments>http://mikenaberezny.com/2008/03/25/fail-early/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 02:16:09 +0000</pubDate>
		<dc:creator>Mike Naberezny</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://mikenaberezny.com/2008/03/25/fail-early/</guid>
		<description><![CDATA[
I&#8217;m pleased to have been able to contribute a recipe to Mike Clark&#8217;s new book, Advanced Rails Recipes.  The concept presented in my recipe, &#8220;Fail Early&#8221;, is that you can use initializers to prevent your application from starting up under certain conditions.  
Rails applications typically run under persistent application server processes, like mongrel [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pragprog.com/titles/fr_arr"><img src="http://mikenaberezny.com/wp-content/uploads/2008/03/advanced_rails_recipes.gif" style="float: right; margin: 5px 5px 5px 10px; padding: 0; border: #dddddd 2px solid;" title="Advanced Rails Recipes" /></a></p>
<p>I&#8217;m pleased to have been able to contribute a recipe to Mike Clark&#8217;s new book, <a href="http://pragprog.com/titles/fr_arr">Advanced Rails Recipes</a>.  The concept presented in my recipe, &#8220;Fail Early&#8221;, is that you can use initializers to prevent your application from starting up under certain conditions.  </p>
<p>Rails applications typically run under persistent application server processes, like <code>mongrel</code> or <code>thin</code>.  When a Rails application starts, it goes through a startup procedure that is performed only once.  The startup includes reading the environment configuration files and running any initializers that have been set up.  This can also be used as an opportunity to detect potentially dangerous situations and bail out.</p>
<p>&#8220;Fail Early&#8221; uses the case of pending migrations to demonstrate.  If the application is started while there are pending migrations for the production database, the results can wreck production data.  Instead, an initializer detects this condition and exits by calling Ruby&#8217;s <code>Kernel.abort</code>.</p>
<p>Here&#8217;s another case where this idea is useful.  It&#8217;s well-known that the Ruby-based MySQL driver included with Rails isn&#8217;t suitable for use in production.  In fact, Rails will produce this warning in the log if it is in use:</p>
<blockquote><p>
WARNING: You&#8217;re using the Ruby-based MySQL library that ships with Rails. This library is not suited for production. Please install the C-based MySQL library instead (gem install mysql).
</p></blockquote>
<p>This can go unnoticed in the log.  Instead, we can write a short initializer that detects this condition and aborts the application start if the production server is misconfigured.</p>
<p><i>config/initializers/check_mysql_driver.rb</i>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby"><span style="color:#9966CC; font-weight:bold;">if</span> RAILS_ENV == <span style="color:#996600;">'production'</span>
  config = <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">configurations</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'production'</span><span style="color:#006600; font-weight:bold;">&#93;</span>
  <span style="color:#9966CC; font-weight:bold;">if</span> config<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'adapter'</span><span style="color:#006600; font-weight:bold;">&#93;</span> == <span style="color:#996600;">'mysql'</span> 
    <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">require_mysql</span>
    <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#6666ff; font-weight:bold;">Mysql::VERSION</span>.<span style="color:#9900CC;">to_s</span>.<span style="color:#9966CC; font-weight:bold;">include</span>?<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'-ruby'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      abort <span style="color:#996600;">&quot;Ruby-based MySQL driver is not suitable for production&quot;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>When the initializer above is run in a production environment that has the Ruby-based MySQL driver instead of the C-based one, startup will be aborted.</p>

<div class="wp_syntax"><div class="code"><pre>$ mongrel_rails start -e production
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with production environment...
Ruby-based MySQL driver is not suitable for production
$</pre></div></div>

<p>You can run many other safety checks like this at startup.  Since they will be run only once and not per-request, your application incurs no performance penalty by doing so.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikenaberezny.com/2008/03/25/fail-early/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PyCon 2008 Wrap-Up</title>
		<link>http://mikenaberezny.com/2008/03/20/pycon-2008-wrap-up/</link>
		<comments>http://mikenaberezny.com/2008/03/20/pycon-2008-wrap-up/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 21:25:25 +0000</pubDate>
		<dc:creator>Mike Naberezny</dc:creator>
		
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://mikenaberezny.com/2008/03/20/pycon-2008-wrap-up/</guid>
		<description><![CDATA[At PyCon 2008, I gave a talk titled Supervisor as a Platform together with Chris McDonough.  Our talk was very well attended and the audience even included Python creator Guido van Rossum.  We received a lot of positive feedback about our recent work and I suspect we picked up a good number of [...]]]></description>
			<content:encoded><![CDATA[<p>At PyCon 2008, I gave a talk titled <a href="http://supervisord.org/2008/03/16/pycon-2008-supervisor-as-a-platform/">Supervisor as a Platform</a> together with <a href="http://plope.com">Chris McDonough</a>.  Our talk was very well attended and the audience even included Python creator Guido van Rossum.  We received a lot of positive feedback about our recent work and I suspect we picked up a good number of new users as well.  </p>
<p><a href="http://supervisord.org"><img src="http://farm3.static.flickr.com/2197/2335722120_8970a9cd11.jpg"  style="border: #000000 1px solid;" /></a></p>
<p>About two months ago, we began a push to build quality documentation for Supervisor using Docbook.  After this was complete, we set out to build a new web presence. Our efforts culminated at PyCon 2008 when we unveiled the new <a href="http://supervisord.org">Supervisor website</a>, built by the team at <a href="http://maintainable.com">Maintainable Software</a>.  </p>
<p>PyCon was also very productive, with hacking on Supervisor, <a href="http://repoze.org/index.html">Repoze</a>, and general WSGI fun.  I worked on a new feature to allow Supervisor&#8217;s process group configurations to be reloaded without restarting Supervisor.  Meanwhile, Chris made <code>supervisorctl</code> pluggable so extensions can add new commands to the Supervisor command line.</p>
<p>I also attended quite a few interesting talks, met some new people, enjoyed hanging out with usual the Zope and Plone folks, and overall just had a good time.  PyCon 2008 was great conference and I&#8217;m looking forward to next year.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikenaberezny.com/2008/03/20/pycon-2008-wrap-up/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New Rails for PHP Developers Website</title>
		<link>http://mikenaberezny.com/2008/02/18/new-rails-for-php-developers-website/</link>
		<comments>http://mikenaberezny.com/2008/02/18/new-rails-for-php-developers-website/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 20:05:34 +0000</pubDate>
		<dc:creator>Mike Naberezny</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://mikenaberezny.com/2008/02/18/new-rails-for-php-developers-website/</guid>
		<description><![CDATA[
Rails for PHP Developers is a new website that&#8217;s a companion to the new book by the same name.  Like the book, it&#8217;s aimed towards PHP developers who have an interest in Rails and Ruby.  The website features articles that alternate between Ruby and PHP focus, so PHP developers that aren&#8217;t interested in [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://railsforphp.com"><img src="http://farm3.static.flickr.com/2248/2306127173_1ac25aa9fd.jpg" alt="Rails for PHP Developers" title="Mike Naberezny - Rails for PHP Developers" style="border: #000000 1px solid;"/></a><br clear=all></p>
<p><a href="http://railsforphp.com">Rails for PHP Developers</a> is a new website that&#8217;s a companion to the <a href="http://pragprog.com/titles/ndphpr">new book</a> by the same name.  Like the book, it&#8217;s aimed towards PHP developers who have an interest in Rails and Ruby.  The website features articles that alternate between Ruby and PHP focus, so PHP developers that aren&#8217;t interested in Ruby should still find it useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikenaberezny.com/2008/02/18/new-rails-for-php-developers-website/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Supervisor Twiddler 0.2</title>
		<link>http://mikenaberezny.com/2008/02/17/supervisor-twiddler-02/</link>
		<comments>http://mikenaberezny.com/2008/02/17/supervisor-twiddler-02/#comments</comments>
		<pubDate>Sun, 17 Feb 2008 18:46:10 +0000</pubDate>
		<dc:creator>Mike Naberezny</dc:creator>
		
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://mikenaberezny.com/2008/02/17/supervisor-twiddler-02/</guid>
		<description><![CDATA[Supervisor Twiddler is an RPC extension for Supervisor that allows Supervisor&#8217;s configuration and state to be manipulated in ways that are not normally possible at runtime.
Changes in release 0.2:

  Renamed addProcessToGroup() to addProgramToGroup().  The method
  now supports program definitions with numprocs > 1 and will add
  all resulting processes from the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://maintainable.com/software/supervisor_twiddler">Supervisor Twiddler</a> is an RPC extension for <a href="http://supervisord.org">Supervisor</a> that allows Supervisor&#8217;s configuration and state to be manipulated in ways that are not normally possible at runtime.</p>
<p>Changes in release 0.2:</p>
<blockquote><p>
  Renamed <code>addProcessToGroup()</code> to <code>addProgramToGroup()</code>.  The method<br />
  now supports program definitions with <code>numprocs</code> > 1 and will add<br />
  all resulting processes from the program definition.  It also<br />
  fixes a bug where the process config was not added to the group<br />
  properly.  Requested by Roger Hoover.</p>
<p>  Added new method <code>log()</code> that writes an arbitrary message to the<br />
  main supervisord log.  This is useful for recording information<br />
  about your twiddling.
</p></blockquote>
<p>You can download the new version and read the updated documentation on the <a href="http://maintainable.com/software/supervisor_twiddler">Supervisor Twiddler</a> page of <a href="http://maintainable.com">Maintainable Software</a>&#8217;s open source project pages.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikenaberezny.com/2008/02/17/supervisor-twiddler-02/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Commodore Plus/4 on LCD</title>
		<link>http://mikenaberezny.com/2008/02/16/commodore-plus4-on-lcd/</link>
		<comments>http://mikenaberezny.com/2008/02/16/commodore-plus4-on-lcd/#comments</comments>
		<pubDate>Sat, 16 Feb 2008 18:54:30 +0000</pubDate>
		<dc:creator>Mike Naberezny</dc:creator>
		
		<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://mikenaberezny.com/2008/02/16/commodore-plus4-on-lcd/</guid>
		<description><![CDATA[I thought it might be interesting to mix things up a bit by occasionally posting about some neat hardware.  

Last week, I purchased the RTV VEG.  This device converts composite video to VGA and also has a TV tuner.  The photo above shows my Commodore Plus/4 computer connected to a Samsung 17&#8243; [...]]]></description>
			<content:encoded><![CDATA[<p>I thought it might be interesting to mix things up a bit by occasionally posting about some neat hardware.  </p>
<p><a href="http://www.flickr.com/photos/mnaberez/2260293173/"><img src="http://static.flickr.com/2077/2260293173_4b22a6d1f4.jpg" /></a></p>
<p>Last week, I purchased the <a href="http://rtv-veg.com/products/veg/">RTV VEG</a>.  This device converts composite video to VGA and also has a TV tuner.  The photo above shows my Commodore Plus/4 computer connected to a Samsung 17&#8243; LCD panel through the device.  A CMD FD2000, an aftermarket 3.5&#8243; floppy drive, rounds out the setup.</p>
<p>Commodore monitors were never known for reliability.  Even now, two of my Commodore 1084 monitors are waiting for me to repair them.  With devices like the RTV VEG, modern LCD video displays can be used with the older computers.  The RTV VEG is capable of converting both composite video and separated chroma/luma (S-Video) to VGA.  This works for many Commodore computers like the VIC-20, TED series, and C64.  </p>
<p>The Commodore 128 also outputs RGBI video, which is not supported by the device.  The C128 requires a monitor that can be switched between composite and RGBI such as the 1902 or 1084. Kevin Krausnick has <a href="http://home.comcast.net/~kkrausnick/c128-vga/c128-vga.html">combined</a> with the RTV VEG with another converter so that both modes can be used on a VGA monitor at the flick of a toggle switch.  This is very clever and I intend to do this as well for my C128.</p>
<p>When switching to 80-column (VDC) mode on the C128, you also have to switch the monitor.  On the old monitors, this switch is in the front.  On Kevin&#8217;s setup, he has a toggle switch on his homebuilt hardware.  Years ago, I modified my 1902 monitor by replacing the video mode switch with my own microcontroller to do it automatically.  I intend to do something similar again with the goal of having a C128 with an LCD panel that displays both video modes and switches between them automatically.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikenaberezny.com/2008/02/16/commodore-plus4-on-lcd/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Horde/Yaml 1.0 Released</title>
		<link>http://mikenaberezny.com/2008/01/08/hordeyaml-10-released/</link>
		<comments>http://mikenaberezny.com/2008/01/08/hordeyaml-10-released/#comments</comments>
		<pubDate>Tue, 08 Jan 2008 23:44:53 +0000</pubDate>
		<dc:creator>Mike Naberezny</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[horde]]></category>

		<guid isPermaLink="false">http://mikenaberezny.com/archives/87</guid>
		<description><![CDATA[Horde/Yaml is a PHP 5 library for easily working with YAML data.  This is the package&#8217;s first stable release.
Chuck Hagenbuch started the library as an adaptation of Spyc around six months ago.  Since then, he and I have been quietly using and improving it.  Along the way, we fixed many issues, added [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pear.horde.org/index.php?package=yaml">Horde/Yaml</a> is a PHP 5 library for easily working with <a href="http://yaml.org/">YAML</a> data.  This is the package&#8217;s first stable release.</p>
<p><a href="http://chuck.hagenbu.ch/">Chuck Hagenbuch</a> started the library as an adaptation of <a href="http://spyc.sourceforge.net/">Spyc</a> around six months ago.  Since then, he and I have been quietly using and improving it.  Along the way, we fixed many issues, added support for <a href="http://pecl.php.net/package/syck">pecl/syck</a>, and wrote a test suite with PHPUnit.</p>
<p>There are a couple of other libraries also derived from Spyc, notably the <code>sfYaml</code> class from the <a href="http://www.symfony-project.org/">Symfony</a> framework.  Since these efforts also found and corrected issues, we incorporated as many of these fixes as we could find and added them to the test suite as we went along.</p>
<p>At <a href="http://maintainable.com">Maintainable Software</a>, we frequently use YAML files for configuring our custom applications because our clients tend to like the format more than the alternatives.  We&#8217;ve been using Horde/Yaml successfully for quite some time so we think it should generally work well for you also.</p>
<p>There&#8217;s a nice tutorial on <a href="http://railsforphp.com/2008/01/08/php-meet-yaml/">working with YAML in PHP 5</a> over on the new <a href="http://railsforphp.com">Rails for PHP Developers</a> website.  It includes everything you need to get started with Horde/Yaml.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikenaberezny.com/2008/01/08/hordeyaml-10-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Supervisor at PyCon 2008</title>
		<link>http://mikenaberezny.com/2007/12/21/supervisor-at-pycon-2008/</link>
		<comments>http://mikenaberezny.com/2007/12/21/supervisor-at-pycon-2008/#comments</comments>
		<pubDate>Fri, 21 Dec 2007 19:41:50 +0000</pubDate>
		<dc:creator>Mike Naberezny</dc:creator>
		
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://mikenaberezny.com/archives/86</guid>
		<description><![CDATA[I&#8217;ll be presenting at PyCon 2008, together with Chris McDonough.

Supervisor is a tool for managing UNIX processes. Supervisor starts arbitrary processes at its own startup and allows otherwise unprivileged users to start, stop and restart its subprocesses and view its subprocess&#8217; logs using a command line or web interface. Other programs exist which do this, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll be presenting at <a href="http://us.pycon.org/2008/conference/talks/#proposal_link_41">PyCon 2008</a>, together with <a href="http://plope.com/">Chris McDonough</a>.</p>
<blockquote><p>
Supervisor is a tool for managing UNIX processes. Supervisor starts arbitrary processes at its own startup and allows otherwise unprivileged users to start, stop and restart its subprocesses and view its subprocess&#8217; logs using a command line or web interface. Other programs exist which do this, but what sets Supervisor apart is that it is written in Python and built with extension points that can be leveraged by Python developers. In this talk, we&#8217;ll look at Supervisor as a platform, and how Python programs written to run under Supervisor can use its unique capabilities.
</p></blockquote>
<p>Our talk will cover basic usage but will focus on the more advanced features we&#8217;ve added recently, such as adding custom RPC interfaces and event listeners. </p>
<p>PyCon 2008 will in Chicago on March 13-16th.  From the <a href="http://us.pycon.org/2008/conference/talks/#proposal_link_41">list of talks</a>, it looks like this is going to be a great conference.  I am especially looking forward to pounding out some new code during the sprints following the conference on the 17-20th.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikenaberezny.com/2007/12/21/supervisor-at-pycon-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rails Hackfest Winner</title>
		<link>http://mikenaberezny.com/2007/12/05/rails-hackfest-winner/</link>
		<comments>http://mikenaberezny.com/2007/12/05/rails-hackfest-winner/#comments</comments>
		<pubDate>Thu, 06 Dec 2007 04:50:43 +0000</pubDate>
		<dc:creator>Mike Naberezny</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://mikenaberezny.com/archives/85</guid>
		<description><![CDATA[
I was pleased to learn today that I am a winner in the Rails Hackfest. 
The Hackfest is a contest where your ranking is primarily determined by how many of your patches get accepted into Rails core during the contest month.
]]></description>
			<content:encoded><![CDATA[<p><img src="/images/novhackfestres.gif" /></p>
<p>I was pleased to learn today that I am a winner in the <a href="http://www.workingwithrails.com/hackfest/17-monthly-november-2-7">Rails Hackfest</a>. </p>
<p>The Hackfest is a contest where your ranking is primarily <a href="http://www.workingwithrails.com/hackfest/scoring">determined</a> by how many of your patches get accepted into Rails core during the contest month.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikenaberezny.com/2007/12/05/rails-hackfest-winner/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.889 seconds -->
<!-- Cached page served by WP-Cache -->
