<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>HCoder.org &#187; software</title>
	<atom:link href="http://hcoder.org/tag/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://hcoder.org</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sat, 17 Jul 2010 21:17:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>My first contributions to CPAN</title>
		<link>http://hcoder.org/2009/06/28/my-first-contributions-to-cpan/</link>
		<comments>http://hcoder.org/2009/06/28/my-first-contributions-to-cpan/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 20:46:00 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[cpan]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[migraine]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[parsing]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I have been using Perl for many years, but I had never uploaded anything to CPAN. That&#8217;s unfortunate, because I&#8217;ve probably written several programs or modules that could have been useful for other people. The point is, now I have. Not only that, but it was code I wrote at work, so if I&#8217;m not [...]]]></description>
			<content:encoded><![CDATA[<p>I have been using Perl for many years, but I had never uploaded anything to <span class="caps">CPAN</span>. That&#8217;s unfortunate, because I&#8217;ve probably written several programs or modules that could have been useful for other people. The point is, now I have. Not only that, but it was code I wrote at work, so if I&#8217;m not mistaken these are my first contributions to free software from Opera. Yay me!</p>
<p>The two modules I&#8217;ve released so far are:</p>
<ul>
<li><a href="http://search.cpan.org/~opera/Parse-Debian-PackageDesc-0.1/lib/Parse/Debian/PackageDesc.pm">Parse::Debian::PackageDesc</a>, a module for parsing both <code>.dsc</code> and <code>.changes</code> files from Debian. This is actually a support module for something bigger that I hope I&#8217;ll release soon-ish.</li>
<li><a href="http://search.cpan.org/~opera/Migraine-0.53/script/migraine.pl">Migraine</a>, a still somewhat primitive database change manager inspired on the <a href="http://www.oracle.com/technology/pub/articles/kern-rails-migrations.html">Ruby on Rails migration system</a>.</li>
</ul>
<p>As I feel that Migraine could be useful to a lot of people, but it&#8217;s easy to misunderstand what it really does (unless you already know Rails migrations of course), I&#8217;ll elaborate a bit. Imagine that you are developing some application that uses a database. You design the schema, write some <span class="caps">SQL</span> file with it, and everybody creates their own databases from that file. Now, as your application evolves, your schema will evolve too. What do you do now to update all databases (every developer installation, testing installations, and don&#8217;t forget the production database)? One painful way to do it could be documenting which <span class="caps">SQL</span> statements you have to execute in order to have the latest version of the schema, and expect people to apply copying-and-pasting from the documentation. However, it&#8217;s messy, confusing, and it needs someone to know both which databases to update and when.</p>
<p>Migraine offers a simpler, more reliable way to keep all your databases up to date. Basically, you write all your changes (&#8220;migrations&#8221;) in some files in a directory, following a simple version number naming convention (e.g. <code>001-add_users_table.sql</code>, <code>002-change_passwd_field_type.sql</code>), and migraine will allow you to keep your databases up to date. In the simplest, most common case, you call migraine with a configuration file specifying which database to upgrade, and it will figure out which migrations are pending to apply, if any, and apply them. The system currently only supports raw <span class="caps">SQL</span>, but it should be easy to extend with other types.</p>
<p>In principle, you shouldn&#8217;t need to write any Perl code to use migraine (it has a Perl module that you can use to integrate with your Perl programs if you like, but also a command-line tool), so you can use it even in non-Perl projects. Of course, some modern ORMs have their own database migration system, but very often you have to maintain legacy code that doesn&#8217;t use any fancy <span class="caps">ORM</span>, or you don&#8217;t like the migration system provided by the <span class="caps">ORM</span>, or you prefer keeping a single system for schema and data migrations&#8230; I think in those cases Migraine can help a lot reducing chaos and keeping things under control. Try it out and tell me what you think <code>:-)</code></p>
<p>In a couple of days I&#8217;ll blog again about other contributions to free software I&#8217;ve made lately, but this time in the form of Opera widgets&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2009/06/28/my-first-contributions-to-cpan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free software rocks!</title>
		<link>http://hcoder.org/2009/05/10/free-software-rocks-2/</link>
		<comments>http://hcoder.org/2009/05/10/free-software-rocks-2/#comments</comments>
		<pubDate>Sun, 10 May 2009 17:18:00 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[apt]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[cpan]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[line]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I&#8217;ve been working on something lately that I hope I will publish sometime next month: it&#8217;s a set of tools to manage an APT package repository. The idea is that, given an upload queue (you can set it up as an anonymous FTP, or some directory accessible via SSH/SCP, or whatever floats your boat in [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on something lately that I hope I will publish sometime next month: it&#8217;s a set of tools to manage an <span class="caps">APT</span> package repository. The idea is that, given an upload queue (you can set it up as an anonymous <span class="caps">FTP</span>, or some directory accessible via <span class="caps">SSH</span>/<span class="caps">SCP</span>, or whatever floats your boat in your setup and team), you&#8217;ll have a web interface to approve those packages, a set of integrated autobuilders building the approved packages in whatever combination of architectures and distributions you want, and all that integrated with <a href="http://mirrorer.alioth.debian.org/">reprepro</a> to keep your repository updated. I&#8217;ll write more about it when I have released something.</p>
<p>The point now is that, while working on it, I needed some module to parse command-line options and &#8220;subcommands&#8221; (like <code>git commit</code>, <code>svn update</code>, etc.). As it&#8217;s written in Perl, I had a look at <span class="caps">CPAN</span> to see if I could see anything. The most promising module was <a href="http://search.cpan.org/~garu/App-Rad-1.04/lib/App/Rad.pm">App::Rad</a>, but it lacked a couple of things that were very important for me: my idea was &#8220;declaring&#8221; all the possible commands and options and have the module do all the work for me (generating the help pages and the default <code>--help</code> implementation, generate the <code>program help subcommand</code> and so on). <code>App::Rad</code> didn&#8217;t have that, and it didn&#8217;t seem to me like that was the direction they wanted to go to with the module. But I figured I&#8217;d drop the author an e-mail anyway and see if he liked the idea so I could start adding support for all that&#8230;</p>
<p>And boy was that a good idea. He replied a couple of days later, and said that they had liked the idea so much that they had implemented it already (that&#8217;s why he took a couple of days to reply), and he sent me an example of the new syntax they had introduced and asked if that was what I was thinking. And not only that, but they added me to the list of contributors just for giving the idea! That completely made my day, free software rocks!</p>
]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2009/05/10/free-software-rocks-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software patents. Yet yet yet yet YET YET again</title>
		<link>http://hcoder.org/2008/05/19/software-patents-yet-yet-_yet-yet_-yet-yet-again/</link>
		<comments>http://hcoder.org/2008/05/19/software-patents-yet-yet-_yet-yet_-yet-yet-again/#comments</comments>
		<pubDate>Mon, 19 May 2008 23:06:00 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Freedom]]></category>
		<category><![CDATA[ffii]]></category>
		<category><![CDATA[mccreevy]]></category>
		<category><![CDATA[patents]]></category>
		<category><![CDATA[press]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[swpats]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[One week ago (but I just noticed), FFII published this press release about McCreevy trying to legalise Software Patents. I haven&#8217;t had time to read the whole thing, but this is just amazing. I mean, doesn&#8217;t Mr. McCreevy get fucking bored, if nothing else? We don&#8217;t want your filthy software patents. We have said so [...]]]></description>
			<content:encoded><![CDATA[<p>One week ago (but I just noticed), <span class="caps">FFII</span> published this <a href="http://press.ffii.org/Press_releases/McCreevy_wants_to_legalise_Software_Patents_via_a_US-EU_patent_treaty">press release about McCreevy trying to legalise Software Patents</a>. I haven&#8217;t had time to read the whole thing, but this is just amazing. I mean, doesn&#8217;t <a href="http://en.wikipedia.org/wiki/Charles_McCreevy">Mr. McCreevy</a> get fucking <em>bored</em>, if nothing else?</p>
<p><strong>We don&#8217;t want your filthy software patents.</strong> We have said so many many times. Now go and [censored] yourself, find something useful to do for Europe.</p>
]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2008/05/19/software-patents-yet-yet-_yet-yet_-yet-yet-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free Software rocks</title>
		<link>http://hcoder.org/2008/05/12/free-software-rocks/</link>
		<comments>http://hcoder.org/2008/05/12/free-software-rocks/#comments</comments>
		<pubDate>Mon, 12 May 2008 22:18:00 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[quotes]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[thanks]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I just read in Aaron Seigo&#8217;s blog a very nice message from a user that proves that free software is making a difference in many areas, even in some that we don&#8217;t usually think about. Some quote: I cant tell you how much I appreciate the work you all have done. Its a work of [...]]]></description>
			<content:encoded><![CDATA[<p>I just read in <a href="http://aseigo.blogspot.com/">Aaron Seigo&#8217;s blog</a> a <a href="https://lists.ubuntu.com/archives/ubuntu-devel-discuss/2008-May/004196.html">very nice message</a> from a user that proves that free software is making a difference in many areas, even in some that we don&#8217;t usually think about. Some quote:</p>
<blockquote>
<p>I cant tell you how much I appreciate<br />
the work you all have done. Its a work of art. If I could thank each and every one of<br />
you I would.</p>
</blockquote>
<blockquote>
<p>You have given her the world to learn and explore.</p>
</blockquote>
<blockquote>
<p>So if you get frustrated or tired in<br />
your work for Open Source/Free Software, just remember that somewhere in Missouri<br />
there is a 14 year-old girl named Hope, an A-student who runs on the track team,<br />
who is now your biggest fan and one of the newest users of Linux/Ubuntu.</p>
</blockquote>
<p>Although I haven&#8217;t really participated in <span class="caps">KDE</span> or Ubuntu (not directly anyway), I too feel proud of what we, as a community, have created. Also, like that person, I feel very thankful for everything I have learned and got from the free software community.</p>
<p>Cheers guys, you all rock!</p>
]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2008/05/12/free-software-rocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
