<?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; projects</title>
	<atom:link href="http://hcoder.org/tag/projects/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>Arepa &#8211; Apt REPository Assistant</title>
		<link>http://hcoder.org/2010/03/22/arepa-apt-repository-assistant/</link>
		<comments>http://hcoder.org/2010/03/22/arepa-apt-repository-assistant/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 19:04:14 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[arepa]]></category>
		<category><![CDATA[auto builders]]></category>
		<category><![CDATA[cpan]]></category>
		<category><![CDATA[packages]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://hcoder.org/?p=310</guid>
		<description><![CDATA[For some time now I had been frustrated by the tools to manage APT repositories. The only ones I knew of either covered too little (only adding/removing packages from a repository and such, like reprepro) or were way too complex (like the official tools used by Debian itself). Maybe/probably I&#8217;m a moron and I just [...]]]></description>
			<content:encoded><![CDATA[<p>For some time now I had been frustrated by the tools to manage APT repositories. The only ones I knew of either covered too little (only adding/removing packages from a repository and such, like reprepro) or were way too complex (like the official tools used by <a href="http://debian.org/">Debian</a> itself). Maybe/probably I&#8217;m a moron and I just didn&#8217;t know of some tool that would solve all my problems, but now it&#8217;s kind of late ;-) And before you say it, no, Launchpad is <em>not</em> what I was looking for as far as I understand it.</p>
<p>So I started to work on my own suite of tools for it, and recently I decided to release what I&#8217;ve done so far. It&#8217;s by no means complete, but it&#8217;s very useful for me and I thought it would be useful for others. And, with a bit of luck, someone will help me improving it.</p>
<p>So what is it? <a href="http://search.cpan.org/~opera/Arepa-0.74/lib/Arepa.pm">Arepa</a> (it stands for &#8220;Apt REPository Assistant&#8221;, but obviously I called it like that after the <a href="http://en.wikipedia.org/wiki/Arepa">yummy Venezuelan sandwiches</a>) is a suite of tools that allow you to manage an APT repository. It contains two command-line tools and a web interface, and its main features are:</p>
<ul>
<li>Manages the whole process after a package arrives to the upload queue: from approving it to re-building from source to signing the final repository.</li>
<li>It allows you to &#8220;approve&#8221; source packages uploaded to some &#8220;incoming&#8221; directory, via a web interface.</li>
<li>It only accepts source packages, and those are re-compiled automatically in the configured autobuilders. It can even &#8220;cross-compile&#8221; for other distributions (treated like <a href="http://wiki.debian.org/binNMU">binNMUs</a>).</li>
<li>Far from reinventing (many) wheels, it integrates tools like <a href="http://mirrorer.alioth.debian.org/">reprepro</a>, <a href="http://www.gnupg.org/">GPG</a>, <a href="http://samba.anu.edu.au/rsync/">Rsync</a>, <a href="http://code.erisian.com.au/Wiki/debootstrap">debootstrap</a> and <a href="http://alioth.debian.org/projects/buildd-tools/">sbuild</a> so you don&#8217;t have to learn all about them.</li>
</ul>
<p>The approval via some web interface was actually sort of the driving force for the project. One of my pet peeves was that there wasn&#8217;t an easy way to have an upload queue and easily approve/reject packages with the tools I knew. From what I had seen, the tools were either for &#8220;single person&#8221; repositories (no approval needed because the package author is the owner of the repository) or full-blown distribution-size tools like dak and such. My use-case, however, is the following:</p>
<ul>
<li>You have an installation of Arepa for an entire organisation (say, a whole company or a big department).</li>
<li>People inside that organisation upload packages to the upload queue (possibly using dput; the point is, the end up in some directory in the machine hosting Arepa).</li>
<li>Someone (or a small group of people) are the &#8220;masters&#8221; of the repository, and they&#8217;ll have access to the web interface. From time to time they check the web UI, and they&#8217;ll approve (or not) the incoming source packages.</li>
<li>If they&#8217;re approved, the source will be added to the repository and it&#8217;ll be scheduled for compilation in the appropriate combination(s) of architectures and distributions.</li>
<li>A cronjob compiles pending packages every hour; when the compilation is successful, they&#8217;re added to the repository.</li>
<li>At this point, the repository hosted by the Arepa installation has the new packages, but you probably want to serve the repository from a different machine. If that&#8217;s the case, Arepa can sync the repository to your production machine with a simple command (&#8220;arepa sync&#8221;).</li>
</ul>
<p>I imagine that a lot of people have the same need, so I uploaded all the code to CPAN (you can see it with the rest of the <a href="http://search.cpan.org/~opera/">contributions by Opera Software</a>). Sadly there&#8217;s a <a href="https://rt.cpan.org/Public/Bug/Display.html?id=55706">silly bug</a> in the released code (I wanted to release ASAP to be able to focus on other things, and I ended up rushing the release), but it has both a workaround and a patch. So, please give it a try if you&#8217;re interested and tell me if you would like to contribute. I haven&#8217;t released the code in GitHub or similar yet, but I&#8217;ll probably do if there&#8217;s interest.</p>
]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2010/03/22/arepa-apt-repository-assistant/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>More work on widgets</title>
		<link>http://hcoder.org/2009/06/30/more-work-on-widgets/</link>
		<comments>http://hcoder.org/2009/06/30/more-work-on-widgets/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 22:11:00 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[continuous]]></category>
		<category><![CDATA[cruisecontrol.rb]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[kiva]]></category>
		<category><![CDATA[loanmeter]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[widgets]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[As I had mentioned, I had been working on Opera widgets. Some time ago I had seen a great Javascript plotting library for jQuery called flot, and I really wanted to try it out in some &#8220;real world&#8221; project. As I was working on the World Loanmeter widget, which incidentally uses jQuery too, it was [...]]]></description>
			<content:encoded><![CDATA[<p>As I had mentioned, I had been working on Opera widgets. Some time ago I had seen a great Javascript plotting library for jQuery called <a href="http://code.google.com/p/flot/">flot</a>, and I really wanted to try it out in some &#8220;real world&#8221; project. As I was working on the <a href="http://widgets.opera.com/widget/12102/">World Loanmeter widget</a>, which incidentally uses jQuery too, it was very easy to figure out some way to use flot for something useful: I decided to add some simple graphs to the widget.</p>
<p>The initial idea of the loanmeter widget was to show where in the world Kiva was offering loans. However, as I used the widget myself, I realised that the location in the world was less important for me, and I was more interested in knowing <em>what</em> the person was going to use the money for. So, I added some options to filter by &#8220;sector&#8221; and I figured that having some graphs comparing how much money was requested and already funded, for each sector, would be a very quick and visual way to get the information I wanted. I started playing with flot, and I have to say that except for a couple of relatively minor problems, it was quite easy to use. I don&#8217;t have screenshots showing the graphs, but feel free to <a href="http://widgets.opera.com/widget/12102/">try the widget itself</a> and have a look (hint: you have two buttons at the bottom right corner to switch between &#8220;map view&#8221; and &#8220;graph view&#8221;).</p>
<p>The other widget I have been working on is a monitor widget for projects in <a href="http://cruisecontrolrb.thoughtworks.com/">CruiseControl.rb</a> (a really simple and neat continuous integration server we use at Opera). More than one year ago, my colleague <a href="http://my.opera.com/nicomen">Nico</a> had written a very quick &amp; dirty widget for monitoring the result of the test runs of the <a href="http://my.opera.com">My Opera</a> <a href="http://my.opera.com/operaqa/blog/2008/09/19/testing-my-opera">functional testsuite</a>. There were a couple of things I wanted to change, and I also wanted to monitor other projects, so I figured that I&#8217;d rewrite the widget to have a more maintainable codebase and then make it generic, so you could configure which CC.rb installation and which project to monitor. I&#8217;m moderately happy with the result of the refactoring, and happy enough with the final result. I know it has several issues, and I expect that once anyone outside our team starts using it, there will be things to improve and fix :-) If you use CruiseControl.rb, give it a try!</p>
]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2009/06/30/more-work-on-widgets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The ultimate TODO app redux</title>
		<link>http://hcoder.org/2009/06/29/the-ultimate-todo-app-redux/</link>
		<comments>http://hcoder.org/2009/06/29/the-ultimate-todo-app-redux/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 19:59:00 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Freedom]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[bitbucket]]></category>
		<category><![CDATA[bubug]]></category>
		<category><![CDATA[hg]]></category>
		<category><![CDATA[merb]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[todo]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[When writing yesterday about the Perl modules, I realised that I hadn&#8217;t written anything about the TODO application since &#8220;The ultimate TODO app&#8221;. Well, a lot has happened to it actually. I&#8217;m glad to announce that: It does have a (lame) name now: Bubug (supposedly stands for &#8220;Barely Unconventional Bug Untracking Gizmo&#8221;. Whatever). It has [...]]]></description>
			<content:encoded><![CDATA[<p>When writing yesterday about the Perl modules, I realised that I hadn&#8217;t written anything about the <span class="caps">TODO</span> application since &#8220;<a href="http://hcoder.org/2009/02/09/the-ultimate-todo-app">The ultimate <span class="caps">TODO</span> app</a>&#8221;. Well, a <em>lot</em> has happened to it actually. I&#8217;m glad to announce that:</p>
<ul>
<li>It does have a (lame) name now: <a href="http://bitbucket.org/emanchado/bubug/wiki/Home">Bubug</a> (supposedly stands for &#8220;Barely Unconventional Bug Untracking Gizmo&#8221;. Whatever).</li>
<li>It has improved a lot here and there, and it now has authentication and multi-user support, not to mention a lot of UI bling bling and goodies.</li>
<li>The development has moved to <a href="http://bitbucket.org/">BitBucket</a>, an excellent free service built by ex-Opera&#8217;s <a href="http://noehr.org/">Jesper Noehr</a>, where you can follow it more easily, comment on, check the Wiki, fork, or whatever you want. You even have a screenshot there ;-)</li>
</ul>
<p>As you can guess from the last point, for this project I&#8217;ve been using Mercurial instead of Git. Although I certainly don&#8217;t have sophisticated needs, so <span class="caps">YMMV</span> (heavily), I find Git more pleasant to use. Which is kind of surprising, because I always thought that Git&#8217;s UI was a pain in the ass. Oh, well. That doesn&#8217;t mean that Mercurial is hard to use, though. I think it&#8217;s more that I&#8217;m used to Git now, and there are a couple of things that I find more convenient: the coloured diff (possible in Hg, but you have to install some extension for it, and only thinking about installing some Python extension that is not even packaged for Debian makes me want to switch to Git) and the staging area are the most important ones I can think of.</p>
<p>So, if you thought I had abandoned the <span class="caps">TODO</span> application thing, you were wrong ;-) If you&#8217;re interested, have a look at the <a href="http://bitbucket.org/emanchado/bubug/wiki/Home">Bubug BitBucket project page</a>, download it, play with it, and tell me what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2009/06/29/the-ultimate-todo-app-redux/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>The ultimate TODO app</title>
		<link>http://hcoder.org/2009/02/09/the-ultimate-todo-app/</link>
		<comments>http://hcoder.org/2009/02/09/the-ultimate-todo-app/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 20:05:00 +0000</pubDate>
		<dc:creator>emanchado</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[merb]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[todo]]></category>
		<category><![CDATA[webapp]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I have been quite frustrated by TODO applications for some months now. They&#8217;re usually either too simple, or almost too complex and without features that I think are really valuable. In particular, there are two things that I don&#8217;t remember having seen in any TODO application: Possibility to &#8220;postpone&#8221; a task, so it doesn&#8217;t appear [...]]]></description>
			<content:encoded><![CDATA[<p>I have been quite frustrated by <span class="caps">TODO</span> applications for some months now. They&#8217;re usually either too simple, or almost too complex <em>and</em> without features that I think are really valuable. In particular, there are two things that I don&#8217;t remember having seen in any <span class="caps">TODO</span> application:</p>
<ol>
<li>Possibility to &#8220;postpone&#8221; a task, so it doesn&#8217;t appear in the main view for a defined time.</li>
<li>Possibility to associate a task to a &#8220;person to nag&#8221;.</li>
</ol>
<p>When you have a lot of small tasks to do, and they are not the kind of things you put in a <span class="caps">BTS</span> (say, stuff that you have to do that is not really connected to some project&#8217;s code) I think these two features are really useful, and I was surprised that no applications I saw seemed to have those. I mean, don&#8217;t people have the same problems as me?</p>
<p>That&#8217;s why, as I <a href="http://hcoder.org/2008/12/14/playing-around-with-jquery">had mentioned</a>, I started writing my own <span class="caps">TODO</span> application: I&#8217;d have what I wanted, and I&#8217;d learn a thing or two about <a href="http://www.merbivore.com/">Merb</a>, <a href="http://datamapper.org/">DataMapper</a> and <a href="http://jquery.com/">jQuery</a>. The application has several design limitations that I used to simplify things, like not having any notion of users (single user app without authentication) or supporting only a &#8220;title&#8221; for the tasks, without any longer description. It isn&#8217;t something I really plan to publish for other people to use (I mean, <a href="http://www.demiurgo.org/darcs/bubug/">the code</a> is in my <a href="http://www.demiurgo.org/darcs/">Darcs repo</a>, I&#8217;m just not going to make a project page for it or anything like that), so I don&#8217;t really care how much it fits other people&#8217;s needs :-)</p>
<p>As it is a pet project and I didn&#8217;t really mind how long it would take to finish it, I started by making some mockup of the application in <span class="caps">HTML</span> (+ a bit of Javascript with jQuery), and once I was happy, I started with the actual design and code. I think some parts of the code are nice, and it has some Ajax sweetness, but I admit I haven&#8217;t used it yet for myself: only as a kind of underpowered <span class="caps">BTS</span> for the application. Maybe I&#8217;ll upload some screenshot some day. In the meantime, feel free to download and try it out ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://hcoder.org/2009/02/09/the-ultimate-todo-app/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
