<?xml version="1.0" encoding="iso-8859-1"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
  <title>Ryan Tomayko</title>
  <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/" />
  <modified>2004-03-18T07:39:27Z</modified>
  <tagline>XML / Python / Java / Linux (and some other stuff)</tagline>
  <id>tag:naeblis.cx,2004:/blog//1</id>
  <generator url="http://www.movabletype.org/" version="2.661">Movable Type</generator>
  <copyright>Copyright (c) 2004, Ryan Tomayko</copyright>
  <entry>
    <title>Special Sauce in GTK+ 2.4?</title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000029.html" />
    <modified>2004-03-18T07:39:27Z</modified>
    <issued>2004-03-18T02:39:27-05:00</issued>
    <id>tag:naeblis.cx,2004:/blog//1.29</id>
    <created>2004-03-18T07:39:27Z</created>
    <summary type="text/plain"> I finally got around to pulling Fedora Core 2 Test 1 last weekend because I&apos;m a good contributing citizen and all that. It looks nice thus far, no problems that I wouldn&apos;t expect. Feeling bleeding edge I went ahead and decided to sync up with rawhide, which was also pretty painless. Today I had 50 or so updated packages come down including the just released GTK+ 2.4.0. I restart X and come back to find what seems to be...</summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Linux</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[<p>
I finally got around to pulling 
<a href="http://download.fedora.redhat.com/pub/fedora/linux/core/test/1.90/i386/os/RELEASE-NOTES-x86-en.html">
Fedora Core 2 Test 1
</a> 
last weekend because I'm a good contributing citizen and all that. It looks nice thus far, no problems that I wouldn't expect. Feeling bleeding edge I went ahead and decided to sync up with rawhide, which was also pretty painless. Today I had 50 or so updated packages come down including the <a href="http://lists.gnome.org/archives/gtk-devel-list/2004-March/msg00195.html">just released</a> <a href="http://www.gtk.org/">GTK+</a> <a href="http://www.gtk.org/gtk-2.4.0-notes.html">2.4.0</a>. I restart X and come back to find what seems to be an enormous increase in perceived responsiveness of the entire GNOME environment. I usually run with the stock Bluecurve theme because I really just don't care that much about themes as long as they are tolerable and don't bog the system down. However, on this day, with GNOME acting all <cite>balls to the wall</cite>, I decide to load up the Milk 2.0 <a href="http://art.gnome.org/themes/gtk2/567.php">Theme</a> [<a href="/blog/images/gmilk.png">screenshot</a>].
</p>
<p>
I've been envying a guy at work who lugs his <a href="http://www.apple.com/powerbook/index17.html">PowerBook G4 17&quot;</a> into the office everyday--the panther GUI really does have amazing style and polish. I take the scenic route, passing his cube, to the coffee two or three times a day; sometimes, when he's not around, I admit I walk up and rub it softly and promise to come back for her when I have an extra $3,000 laying around.
</p>
<p>
Milk is pretty heavy on the pixmaps. I tried it for about 10 minutes about a week ago and was just completely disappointed at how much it slowed things down. Not now. I'm back around the same responsiveness I got with Bluecurve under GTK+ 2.2, which wasn't bad by a long shot. It's just kind of amazing how you can get serious system-wide increases by optimizing in sweet spots. We should be looking for more of these.
</p>
]]>
      
    </content>
  </entry>
  <entry>
    <title>URLGrabber Project Page Up</title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000028.html" />
    <modified>2004-03-18T06:12:11Z</modified>
    <issued>2004-03-18T01:12:11-05:00</issued>
    <id>tag:naeblis.cx,2004:/blog//1.28</id>
    <created>2004-03-18T06:12:11Z</created>
    <summary type="text/plain"> Michael Stenner and myself have been working on an advanced URL grabbing package for python appropriately named urlgrabber. Michael started the project as part of yum and later decided that it should be split out into its own package. I was lucky enough to be in the right place at the right time with Michael proposing some serious redesign and enhancements to the project and me wanting to write as much python as possible....</summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Python</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[<p>
Michael Stenner and myself have been working on an advanced URL grabbing package for python appropriately named <cite>urlgrabber</cite>. Michael started the project as part of <a href="http://linux.duke.edu/projects/yum/">yum</a> and later decided that it should be split out into its own package. I was lucky enough to be in the right place at the right time with Michael proposing some serious redesign and enhancements to the project and me wanting to write as much python as possible.
</p>
]]>
      <![CDATA[<p>
I have always been extremely interested in network protocol type stuff for some reason. One of the first apps I cobbled together was a little download utility called <cite>Power Download</cite>. Yea! This thing was basically a replacement for the stock downloaders you got with the Browsers of the time (<a href="http://www.tworivers.com/portfolio/netscape/3.0-win.gif">Navigator 3.0</a> and <a href="http://www.yier.dk/newz.jpg">IE 2</a>--<a href="http://www.agocg.ac.uk/reports/mmedia/handbook/fg3_8.gif">various</a> <a href="http://websurfer.kulichki.com/pics_next/mosaic.gif">flavors</a> of <a href="http://www.bris.ac.uk/help/wmos/20a5/form_cut.gif">Mosaic</a> were still fairly popular too). Get this - <cite>PowerDownload</cite> was written entirely in VB3 (and then <em>ported</em> to VB4). Word to the wise: <em>DO NOT ATTEMPT TO WRITE SOCKET BASED APPLICATIONS IN EARLY VERSIONS OF VISUAL BASIC.</em> Anyway, the reason I wrote the app in the first place was because I wanted pause/resume support on downloads. We were coping with anything from 2400bps to 14.4kbps modems and there are only so many times you wake up to a find a 50MB download would have to be restarted before you either kill yourself or start hacking together a solution. So the nostalgia took over when Michael said, "We need support for byte ranges in HTTP and FTP. Do you know anything about that?"
</p>

<p>
Back to the point of this entry... URLGrabber is really starting to come together and we hope to announce an early test release in the near future. Michael set up a nice project page on Duke's Linux site that has a significant amount of information, viewcvs, and all the other goodies.
</p>

<a href="http://linux.duke.edu/projects/urlgrabber/">
http://linux.duke.edu/projects/urlgrabber/
</a>

<p>
Here's the list of features ripped from the project page for your convenience.
</p>

<ul>
<li>identical behavior for http://, ftp://, and file:// urls</li>
<li>
  http keepalive - faster downloads of many files by using
  only a single connection
</li>
<li>
  byte ranges - fetch only a portion of the file
</li>
<li>
  reget - for a urlgrab, resume a partial download
</li>
<li>
  progress meters - the ability to report download progress
  automatically, even when using urlopen!
</li>
<li>
  throttling - restrict bandwidth usage
</li>
<li>
  batched downloads using threads - download multiple files
  simultaneously (feature still in progress)
</li>
<li>
  retries - automatically retry a download if it fails.  The
  number of retries and failure types are configurable.
</li>
<li>
  authenticated server access for http and ftp
</li>
<li>
  proxy support - support for authenticated http and ftp
  proxies
</li>
<li>
  mirror groups - treat a list of mirrors as a single
  source, automatically switching mirrors if there is a
  failure
</li>
</ul>

<p>
Not to shabby. I plan on blogging a bit about some of the cooler things you can do with urlgrabber once we have a clean release out there.
</p>
]]>
    </content>
  </entry>
  <entry>
    <title>My First Yum Commit</title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000027.html" />
    <modified>2004-02-25T02:55:14Z</modified>
    <issued>2004-02-24T21:55:14-05:00</issued>
    <id>tag:naeblis.cx,2004:/blog//1.27</id>
    <created>2004-02-25T02:55:14Z</created>
    <summary type="text/plain"> Seth lost his mind over the weekend and gave me commit access to yum cvs. Proof Stoked. :)...</summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Journal</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[<p>
Seth lost his mind over the weekend and gave me commit access to yum cvs. 
</p>
<p>
<a href="http://devel.linux.duke.edu/cgi-bin/viewcvs.cgi/yum/Attic/urlgrabber.py?rev=1.1.2.7.2.3&only_with_tag=yum-2_0_X&content-type=text/vnd.viewcvs-markup">Proof</a>
</p>
<p>
Stoked. :)
</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>IP Costs Millions of Information</title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000026.html" />
    <modified>2004-02-22T10:28:51Z</modified>
    <issued>2004-02-22T05:28:51-05:00</issued>
    <id>tag:naeblis.cx,2004:/blog//1.26</id>
    <created>2004-02-22T10:28:51Z</created>
    <summary type="text/plain">(The title is not a mistake; that is what I meant to say) I&apos;ve heard many arguments for why Intellectual Property is bad. Most have the word &quot;freedom&quot; or &quot;unfair&quot; in them. In general most anti IP arguments are from the perspective of how big business is infringing on the rights of individuals or this great country or whatever. But here&apos;s an argument that you probably haven&apos;t heard that is a bit different: IP is expensive for businesses and the...</summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Misc</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[<p><cite>(The title is not a mistake; that is what I meant to say)</cite></p>

<p>
I've heard many arguments for why Intellectual Property is bad. Most have the word "freedom" or "unfair" in them. In general most anti <abbr title="Intellectual Property">IP</abbr> arguments are from the perspective of how big business is infringing on the rights of individuals or this great country or whatever. But here's an argument that you probably haven't heard that is a bit different: IP is expensive <em>for businesses</em> and the cost is rising steadily. I don't mean that it costs a lot to register a patent or copyright, or even that it costs a lot to litigate when IP is infringed upon. I am sure all that is expensive and you might make an argument that it is not worth it based solely on those aspects. However, those costs might be nothing compared to the amount of overhead businesses incur to protect IP at the operational and security levels.
</p>]]>
      <![CDATA[<p>
One of my main goals at work recently has been to increase communications between peoples and groups of peoples. The idea is that a lot of time (read: money) is wasted because people don't get information fast enough, or people duplicate work, or people are giving the wrong message to customers, and on and on and on. If you can improve information flow then everyone is more efficient and you make (or at least keep) more money. This isn't my job&#8212;I write code&#8212;but it is something I see as being very important, extremely deficient, and there is a whole bunch of technology (weblogs, sem. web stuff, IM, mailing lists, etc.) that I feel can improve how information gets passed around. When choosing goals you usually don't find ones as nice as that&#8212;it is in bad shape, should be easy to improve, and is important. "Perfect," I say, "what can go wrong?" Imagine my surprise if after a few months of really observing the current state of things and attempting to move forward with a few key ideas, I've accomplished almost nothing and things have actually gotten worse. "How," you ask, "and what can this possibly have to do with IP?" I'll tell you, and it has everything to do with IP.
</p>

<p>
I'm trying to get people at work to publish information on the projects they're working on; any information, all information. Formal documentation is great but we need more than that. We want informal stuff. The type of stuff you see in email discussions [<a href="http://www.list.org/">mailing lists</a>, forums] and journals of what people and teams are doing [<a href="http://www.moveabletype.com">weblogs</a>]. I want that information available in some text based format (HTML, XML, whatever I don't care) and I want it all on the web&#8212;not public, of course, but it needs to be web enabled [HTTP] on the LAN. I want feeds for syndication [RSS, <a href="http://www.intertwingly.net/wiki/pie/FrontPage">Atom</a>] and everything aggregated somewhere [<a href="http://naeblis.cx/blog/archives/000015.html">Schwag</a> w00t!]. This must all be searchable [<a href="http://www.htdig.org/">htdig</a>]. At the end of the day I want anyone/anywhere in the company to be able get information on what anyone/anywhere in the company is doing, right now. When someone finds out what someone is doing and they think it is useful they need to be able to keep track of what they're doing. This is all happening now in the <abbr title="Free Software">FS</abbr>/<abbr title="Open Source Software">OSS</abbr> world and it works, it can work for us too. It could all be so beautiful, it could save the company tons of money, you would have to ship the money to the bank in dump trucks, we could build another building just for the money and swim in it whenever we wanted, I can smell the money it is so close... But wait! Recent company policy has mandated that <em>NO</em> information revealing details of IP owned by company or portions thereof be publicly available on the company Intranet. All information must be password protected and access to said information must not be granted to any individual without approval by [insert some important person who knows who is and is not to be trusted here]. 
</p>

<p>
Okay, so all of this hasn't really happened, yet. But I <em>am</em> being asked to require authorization for certain pieces of information and to otherwise limit availability of information. The reasons seem valid, I guess. It seems that some place at some time, some company hired in some consultant who smuggled out some IP related information and then sold it to some competitor. One of the funnier reasons is that there are apparently some employees who do nothing but print stuff they find on the LAN and then immediately throw it away&#8212;it is available later that night for the dumpster divers. And then there is the worry of someone hacking into the LAN and having all this information available at there finger tips. All valid concerns when protecting IP.
</p>

<p>
But I'm not arguing against the idea that you need strong security if you want to protect all of this IP, I am arguing whether the <em>expense</em> of protecting all of this IP is worth the <em>value</em> of the IP. I think I have a pretty good vantage point for evaluating the costs&#8212;at least with regards to efficiencies. I work at a large corporation by day (which I love by the way; very good company) and do Free Software development at night and on weekends. From here, one of the first things I observe is that the FS/OSS community has a huge asset in that they <em>do not have to protect IP</em> (at least, not the way businesses do). Having everything open means all of the benefits I outlined previously. Further, the value of this asset will increase as the amount of information increases and types of information widen. When I look over to the proprietary model, this massive growing asset (information) somehow becomes a liability with huge expense.
</p>

<p>
So how much is the IP really worth? I'm not asking rhetorically, I feel I've given a glimpse into the costs from the operational side now I want to know, how much is this stuff worth?
</p>
]]>
    </content>
  </entry>
  <entry>
    <title>Learning Python As You Go</title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000024.html" />
    <modified>2004-02-18T08:00:20Z</modified>
    <issued>2004-02-18T03:00:20-05:00</issued>
    <id>tag:naeblis.cx,2004:/blog//1.24</id>
    <created>2004-02-18T08:00:20Z</created>
    <summary type="text/plain">A co-worker asked how global/class variable scoping worked in python today. Specifically, how to access globals/class variables from within a class method. I told him what I knew (global keyword.. yadda yadda.. self.. yadda yadda..) and he was satisfied. Then he asked, &quot;where did you read that?&quot; I thought for a second and realized that I had not really ever read much formal documentation on variable scoping and that I must have picked most of what I knew up from...</summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Python</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[<p>A co-worker asked how global/class variable scoping worked in python today. Specifically, how to access globals/class variables from within a class method. I told him what I knew (global keyword.. yadda yadda.. self.. yadda yadda..) and he was satisfied. Then he asked, "where did you read that?" I thought for a second and realized that I had not really ever read much formal documentation on variable scoping and that I must have picked most of what I knew up from looking at code or just playing around. "What do you mean <cite>playing around</cite>?" he wants to know. "Well," I said, "I just try different stuff and see what happens." It occured to me that Python is excessively easy to pick up as you go because it is easy to try things quickly, measure results, and draw conclussions. Some people call this "The Scientific Method" or something. The conversation ended shortly after but I didn't get the feeling he took me seriously on the trial and error thing. Do most programmers feel that formal documentation is a requirement for learning? I sure don't. I'm positive I learn as much, if not more, scientifically than I do reading documentation. My python-fanboy column for today will thus be on how python lends itself well to those that prefer to learn scientifically as opposed to dictorially [is that a word?].</p>]]>
      <![CDATA[<p>My thought process when encountering a need for global variables in python probably went something like this:</p>

<p>Me: Need a global variable here.<br />
Little Angel: No you don't. Globals are always bad!<br />
Little Devil: Shaddap.. slap, slap. We just need to do this thing real quick. This isn't java. <br />
Me: Hmm.. Maybe we can just use automatic scoping..</p>

<pre>>>> x = 5
>>> def y():
...   print x
...
>>> y()
5</pre>

<p>Me: Good. So I just use it then.. Hmm.. but wait, surely there will be name clashes..</p>

<pre>>>> x = 5
>>> def y():
...   x = 10
...
>>> print x
5
>>> y()
>>> print x
5
>>> # aha!
>>> def y():
>>>    global.x = 10
  File "&lt;stdin&gt;", line 2
    global.x = 10
          ^
SyntaxError: invalid syntax
>>>    __main__.x = 10
>>> y()
>>> print x
5
>>> # ughh
>>> def y():
>>>   <strike>../x</strike> # yea right.
[Ctl-D,Ctl-D]
</pre>

<p>Me: Sneaky little thing you.. So, you're automatic unless I scope something in local. I'm going to need some help here..</p>

<p>Google: python globals<br />
Me: "18ft snake eats glowing balls of..", huh?</p>

<p>Google: python global variable scope<br />
Me: Better. Here's a good code snip:</p>

<pre>x = 5
def somefunc():
   <em>global</em> x
   print x</pre>

<p>Me: ahh..</p>

<pre>>>> x = 5
>>> def y():
...    global x
...    x = 10
...
>>> y()
>>> print x
10
</pre>

<p>I now know how to use globals in python. That looks like a lot of work but that probably took all of 2 minutes. I guess I could have bypassed the initial tests and went to google first but I was able to find out a lot with simple trial and error. </p>

<p>I'm lead to the opinion that there are two kinds of programmers and two kinds of languages. You have the scientific, trial and error, show-me-the-source type hacker and then you have the businessy, formal documentation, show-me-the-sdk type. If I had to slot languages I would say C, Python, Perl, and maybe Lisp all seem to fall into the first category and Java, C++, C# fall into second. Some languages, like the different BASICs, seem to fall somewhere in between.</p>

<p>It seems that one of the key benefits of the <cite>"learn as you go"</cite> languages, and Python specifically, is that you can apply much of what you've learned in other languages very quickly. I have a decent background in Java, C, and Perl. I'm constantly amazed at how much I already know in python by simply asking myself questions of the form, "If I had to write a programming language that did XXX from YYY, how would I write it?" For example, <cite>"If I had to write PACKAGE MANAGEMENT from JAVA, how would I write it?"</cite> It would look a lot like Python. <cite>"If I had to write LIST and HASH stuff from PERL, how would I write it?"</cite> Again, it would look a lot like python (well, it would be a lot less useful, I'm sure). </p>

<p>Python really is a language that you can learn as you go, especially if you have experience in other languages. I'm constantly surprised by how much of the language I already know but don't remember learning. Combine that with the ability to do rapid and productive trial and error'ing and you have a language that is sure to be a hit with the scientific types, as is already clearly established.<br />
</p>]]>
    </content>
  </entry>
  <entry>
    <title>ET Covert Ops Rocks</title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000023.html" />
    <modified>2004-02-16T06:43:49Z</modified>
    <issued>2004-02-16T01:43:49-05:00</issued>
    <id>tag:naeblis.cx,2004:/blog//1.23</id>
    <created>2004-02-16T06:43:49Z</created>
    <summary type="text/plain"> I played way to much Enemy Territory [flash, eww] this weekend. I was hoping to get some Schwag work done but I guess I just needed a mindless weekend....</summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Misc</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[<p>
I played way to much <a href="http://games.activision.com/games/wolfenstein/">Enemy Territory</a> [flash, eww] this weekend. I was hoping to get some Schwag work done but I guess I just needed a mindless weekend. 
</p>]]>
      <![CDATA[<p>
Anyway, the game really is spectacular. I'm not a big gamer and I usually veer towards the consoles since the <a href="http://www.linuxgames.com">Linux gaming</a> situation isn't so hot and I can't be bothered with the wine mess. My attention span for games is somewhere around 2 weeks and I can't remember the last time I actually beat anything. I know ET is special because I've been playing it on and off for about a year. I latched onto the Medic class right from the start and haven't tried anything else until last night. I was out of respawns and following some guy playing Covert Ops. He completely blew me away. It occured to me that one of the best ways of getting better in ET is to go in as a spectator and follow someone with high XP. I played five or six hours as Covert Ops and I don't think I'll be going back to the Medic crutch any time soon.
</p>
<p>
My basic play style thus far has been as follows. I use the FG42 as a rifle. I haven't seen anyone say one good thing about this gun but I seem to win more than not in SMG battles. I rarely snipe and pretty much act like a soldier/rambo, except I have satchel charges and can wear enemy uniforms. Speaking of satchel charges, they rock. <em>The best</em> weapon in the game, IMO. I try to always have a satchel sitting at a frequented passageway and then run around defending myself with my rifle until I can blow the satchel. This means you have to <cite>"have your head on a swivle"</cite>, watching for guys to shoot but constantly glancing at the satchel for a kill their. Besides kills, my big goal in the game is to blow up as many enemy structures as possible (outposts, turrets, bridges, etc). Lastly, one thing I've found extremely useful in long (10 map+) campaigns is to start as a Medic and work your ass off for the Adrenaline shot. Once you get the Adrenaline you can switch to Covert Ops and still use the Adrenaline. This pretty much makes you unstoppable in my experience. I figured out that last bit on accident after switching to Covert Ops initially. 
</p>
<p>
So tonight I've been on a quest for other people's Covert Ops strategy/tactics. I figured I would linkdump what I found useful.
</p>

<p>
<a href="http://www.planetwolfenstein.com/4newbies/et-covert.htm">
RTCW &amp; ET 4 Newbies - Covert Ops
</a><br/>
Good overview of Cov. Ops /w pictures. Nothing to spectactular regarding more advanced strategies.
</p>

<p>
<a href="http://wolfensteinresource.com/forum/board21/thread1100.htm">
http://wolfensteinresource.com/forum/board21/thread1100.htm
</a><br/>
<a href="http://wolfensteinresource.com">Wolfenstein Resource</a> forum post that goes into good depth on Cov. Ops tactics. A little more orthodox than how I've been playing though. 
</p>

<p>
<a href="http://db.gamefaqs.com/computer/doswin/file/return_to_castle_wolfenstein_enemy_territory_cvops.txt">
GameFAQs : ET : Covert Ops Guide
</a><br/>
In progress at time of writing. This has detail on how to level up and what you get for leveling in different areas. Should be good when finished.
</p>]]>
    </content>
  </entry>
  <entry>
    <title>URLGrabber Merged</title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000022.html" />
    <modified>2004-02-14T07:53:08Z</modified>
    <issued>2004-02-14T02:53:08-05:00</issued>
    <id>tag:naeblis.cx,2004:/blog//1.22</id>
    <created>2004-02-14T07:53:08Z</created>
    <summary type="text/plain">We finally got the two URLGrabber source tree&apos;s sync&apos;d up in CVS. Michael to audit and then we should be able to push out a stable 0.3 release for Seth. There was also an interesting bug found in current yum related to urlgrabber today. The user:pass parsing for authentication in URLs wasn&apos;t unescaping before it set values into the AuthHandler. I need to remember to log this in bugzilla and push up a patch for Seth....</summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Journal</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[We finally got the two URLGrabber source tree's sync'd up in CVS. Michael to audit and then we should be able to push out a stable 0.3 release for Seth.

There was also an interesting <a href="https://devel.linux.duke.edu/bugzilla/show_bug.cgi?id=219">bug</a> found in current yum related to urlgrabber today. The user:pass parsing for authentication in URLs wasn't unescaping before it set values into the AuthHandler. I need to remember to log this in bugzilla and push up a patch for Seth.
]]>
      
    </content>
  </entry>
  <entry>
    <title>Meet the Prez</title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000021.html" />
    <modified>2004-02-14T07:48:34Z</modified>
    <issued>2004-02-14T02:48:34-05:00</issued>
    <id>tag:naeblis.cx,2004:/blog//1.21</id>
    <created>2004-02-14T07:48:34Z</created>
    <summary type="text/plain"> The Daily Show Feb 09, 2004 had a hillarious crack on Bush&apos;s Meet the Press interview, which I haven&apos;t seen in full yet. From what I&apos;ve read, they should have just aired the interview on the comedy channel to begin with. Here&apos;s some video (MOV)....</summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Journal</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[<p>
The Daily Show Feb 09, 2004 had a hillarious crack on Bush's Meet the Press interview, which I haven't seen in full yet. From what I've read, they should have just aired the interview on the comedy channel to begin with.
</p>
<p>
<a href="http://www.onlisareinsradar.com/archives/002077.php">Here</a>'s some video (MOV).
</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Schwag Decisions</title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000020.html" />
    <modified>2004-02-13T07:16:25Z</modified>
    <issued>2004-02-13T02:16:25-05:00</issued>
    <id>tag:naeblis.cx,2004:/blog//1.20</id>
    <created>2004-02-13T07:16:25Z</created>
    <summary type="text/plain">I need to make some decisions with what to do with Schwag. There are two real directions and I just cannot decide which I want to take. Part of me thinks I should keep it real simple and make it a planet.gnome.org like aggregator that would be used as generation tool for multi-user / public sites. The other half of me really wants to develop this personal portal thing. This goes more in the direction of a single-user, desktop aggregator/reader...</summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Schwag</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[<p>I need to make some decisions with what to do with <a href="http://naeblis.cx/blog/archives/000015.html">Schwag</a>. There are two real directions and I just cannot decide which I want to take. Part of me thinks I should keep it real simple and make it a <a href="http://planet.gnome.org">planet.gnome.org</a> like aggregator that would be used as generation tool for multi-user / public sites. The other half of me really wants to develop this personal portal thing. This goes more in the direction of a single-user, desktop aggregator/reader that has really strong aggregating and reading facilities as well as the ability to act as a bookmark manager type thing. </p>]]>
      <![CDATA[<p>It just occured to me that the reason I started this project was because I wanted a reader similar in scope to AmphetaDesk that I could then implement bayesian filters in. At some point I decided that aggregation and conversion were important. </p>

<p>I'm just kind of frustrated. It may be that what I'm looking for is a lot of different stuff that needs broken up into separate projects. For instance, schwag could provide the aggregation and feed normalization and another app could handle the whole bookmark management stuff. It should be trivial to integrate normalized feeds into the bookmark manager.</p>]]>
    </content>
  </entry>
  <entry>
    <title>Back into URLGrabber</title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000019.html" />
    <modified>2004-02-13T04:54:16Z</modified>
    <issued>2004-02-12T23:54:16-05:00</issued>
    <id>tag:naeblis.cx,2004:/blog//1.19</id>
    <created>2004-02-13T04:54:16Z</created>
    <summary type="text/plain"> I spoke with Michael and Seth a bit yesterday about getting back into a groove with URLGrabber. I finally put together a TODO list today and sent that out to them. It would be nice to get this stable for Seth&apos;s yum work. Seth teased me with suggestions of trying to get some of the urlgrabber/byterange stuff into python core when we started. Running back through the code had me thinking that a lot of the FTP byterange stuff...</summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Journal</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[<p>
I spoke with Michael and <a href="http://www.advogato.org/person/skvidal/">Seth</a> a bit yesterday about getting back into a groove with <a href="http://linux.duke.edu/projects/mini/urlgrabber/">URLGrabber</a>. I finally put together a TODO list today and sent that out to them. It would be nice to get this stable for Seth's yum work.</p>
</p>
<p>
Seth teased me with suggestions of trying to get some of the urlgrabber/byterange stuff into python core when we started. Running back through the code had me thinking that a lot of the FTP byterange stuff would fit better as a urllib(2) patch anyway.
</p>
]]>
      
    </content>
  </entry>
  <entry>
    <title>Schwag - A Syndicate Feed Normalizer / Aggregator</title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000015.html" />
    <modified>2004-02-03T04:45:11Z</modified>
    <issued>2004-02-02T23:45:11-05:00</issued>
    <id>tag:naeblis.cx,2004:/blog//1.15</id>
    <created>2004-02-03T04:45:11Z</created>
    <summary type="text/plain"><![CDATA[ I've been working on a little Syndicate Feed Reader in Python that I am calling Schwag (don't ask, don't tell), although the name is more of a place-holder for some other really cool name &trade;. It is less of a Reader, really, and more of a Normalizer/Converter/Aggregator that has some light reading facilities. It uses Mark Pilgrim's Ultra Liberal Feed Parser for support of all flavors of RSS / RDF / Atom feeds (even the bad one's). The feeds...]]></summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Schwag</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[<p>
I've been working on a little Syndicate Feed Reader in Python that I am calling Schwag (don't ask, don't tell), although the name is more of a place-holder for some other <cite>really cool name</cite> &trade;. It is less of a Reader, really, and more of a Normalizer/Converter/Aggregator that has some light reading facilities. It uses 
<a href="http://www.diveintomark.org">Mark Pilgrim</a>'s 
<a href="http://diveintomark.org/projects/feed_parser/">Ultra Liberal Feed Parser</a> for support of all flavors of RSS / RDF / Atom feeds (even the bad one's). The feeds are normalized into 
<a href="http://www.mnot.net/drafts/draft-nottingham-atom-format-02.html">Atom 0.3</a> format and dumped to disk. There is a light templating system that allows one to apply <abbr title="XSL Transformations">XSLT</abbr> [1] transformations to the normalized feed to produce different representations (e.g. RSS 0.9x, RSS 1.0 / RDF, RSS 2, XHTML, etc). So, the basic idea is to have a feeder component that manages retrieval and normalization to a common format and then a templating component that provides pluggable representations of the normalized feed. This may sound semi-complex but the code is fairly simple as the feed parsing and XSLT machinery is handled by Mark's piece and <a href="http://www.xmlsoft.org/">libxml</a>/<a href="http://xmlsoft.org/XSLT/">libxslt</a>, respectively. My code just kind of introduces the two to each other.
</p>]]>
      <![CDATA[<p>
The whole feed normalization / transformation thing is cool in and of itself but nothing special, really. The ideas here have been talked about 
<a href="http://www.xml.com/pub/a/2003/01/02/tr.html">before</a> 
(although the specifics are little different). Where it gets interesting, IMO, is when you get into organization and aggregation. I've decided to maintain the list of source feeds as an 
<abbr title="XML Bookmark Exchange Language">XBEL</abbr> [2] document. This is kind of a bastardization of the format but oh well, it is actually perfect for what I need. XBEL is a simple little XML vocabulary for describing browser bookmarks. It has the concept of Folders, Bookmarks, and Aliases. You see where this is going, right? You organize feeds into Folders and can also use Aliases to link a feed into multiple Folders. Good? OK. I am using the Folder concept for more than just simple organization however, and this is where I think I <em>may</em> be on to something half-way useful. Put simply, folders provide aggregation points. The feeder aggregates all feeds in a folder into an <cite>Index Feed</cite>. To push this concept a little further, the folder aggregation is performed recursively. Index Feeds contain entries from feeds in the immediate folder as well as all feeds in descendant 
(<a href="http://www.w3.org/TR/xpath.html#axes">xpathwise</a>) folders. One result of this is that the Index Feed for the root folder is an aggregate of all feeds available. You can then drill down into sub folders to limit/filter aggregation.
</p>
<p>
Along with normalized Atom feed generation, the feeder component dumps out an XBEL file in each generated directory that contains the XBEL fragment for the corresponding folder. You can apply XSLT transformations to these as well. I'm currently using this to generate <abbr title="Outline Processor Markup Language">OPML</abbr> [3] as well as XHTML representations of the folder index. So the concept of treating each Folder as a partitioning device exists here too.
</p>
<p>
At the end of the day, you end up with a system that takes an XBEL document as input and produces a directory structure containing normalized / converted feeds as well as aggregated index feeds. These are all simple files and directories so exposing via your favorite web server is straightforward. I've written XSLT for RSS 0.91, RSS 1.0/RDF, and XHTML on the feed side and OPML and XHTML on the index side. It is pretty trivial to plug in new representations for both feeds and indexes given an XSLT that takes an Atom 0.3 document on the source side.
</p>
<p>
This is all very experimental right now and while I'm using the system for day-to-day reading, I'm also breaking stuff and performing major restructing of code and concepts very often. The system is definitely not without its problems. I plan on blogging the success and failure of various approaches in moderate detail over the next couple of months. I haven't even put a distribution together yet but please feel free to  
<a href="http://naeblis.cx/cgi-bin/viewcvs.cgi/schwag/">browse</a> the sources or grab a tarball if you're interested in really early, often broken applications. I will have to find a home for the project eventually (I'm trying to avoid sourceforge if possible) as all of this is hosted off of a P300 sitting in my living room with only a humble Road Runner pipe. I imagine I will get more serious about this when I think of a name or the code starts stabilizing, whichever comes first. In the meantime, please leave comments or <a href="mailto:rtomayko@naeblis.cx">shoot me an email</a> if your interested. 
</p>

<p>
<small>
[1] XSLT : <a href="http://www.w3.org/TR/xslt">http://www.w3.org/TR/xslt</a><br/>
[2] XBEL : 
<a href="http://pyxml.sourceforge.net/topics/xbel/">
http://pyxml.sourceforge.net/topics/xbel/
</a><br/>
[3] OPML : <a href="http://opml.scripting.com/">http://opml.scripting.com/</a><br/>
</small>
</p>]]>
    </content>
  </entry>
  <entry>
    <title>pyblosxom out / mt in</title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000006.html" />
    <modified>2004-01-28T09:42:30Z</modified>
    <issued>2004-01-28T04:42:30-05:00</issued>
    <id>tag:naeblis.cx,2004:/blog//1.6</id>
    <created>2004-01-28T09:42:30Z</created>
    <summary type="text/plain"> I really do like pyblosxom. It&apos;s &quot;good enough&quot; for the basic stuff and what is not there can be coded given I have extra time to code it. That&apos;s the problem. I like a python based blog because it means I can enjoy enhancing it but sometimes you just want to blog, not write blogging software. The more I have to write, the less I&apos;m actually blogging so I&apos;ve been reluctantly looking for an alternative. Enter movabletype. I loaded...</summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Journal</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[<p>
I really do like 
<a href="http://roughingit.subtlehints.net/pyblosxom/">pyblosxom</a>. It's "good enough" for the basic stuff and what is not there can be coded given I have extra time to code it. That's the problem. I like a python based blog because it means I can enjoy enhancing it but sometimes you just want to blog, not write blogging software. The more I have to write, the less I'm actually blogging so I've been reluctantly looking for an alternative.
</p>
<p>
Enter movabletype. I loaded this up at
<a href="http://www.sterlingcommerce.com">work</a> so I could keep a web based research journal. I was awed by how simple it was to setup and the amount of functionality provided right out of the box. This thing does its job and gets out of your way. So anyway, long story short, pyblosxom's out for a little while (until the community grows and development starts up again) and movabletype is in.
</p>]]>
      
    </content>
  </entry>
  <entry>
    <title><![CDATA[True/False in Python &lt; 2.3]]></title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000005.html" />
    <modified>2003-11-24T01:36:15Z</modified>
    <issued>2003-11-23T20:36:15-05:00</issued>
    <id>tag:naeblis.cx,2003:/blog//1.5</id>
    <created>2003-11-24T01:36:15Z</created>
    <summary type="text/plain"> A simple method of ensuring True/False works in all versions of python. Ripped from options.py - part of Greg Ward&apos;s Optik; a more-functional-than-getopt options parser for python. # Do the right thing with boolean values for all known Python versions. try: &amp;#0160;&amp;#0160;True, False except NameError: &amp;#0160;&amp;#0160;(True, False) = (1, 0)...</summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Python</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[<p>
A simple method of ensuring True/False works in all versions 
of python. Ripped from 
<a href="http://cvs.sourceforge.net/viewcvs.py/optik/optik/lib/option.py?rev=1.26&amp;view=auto">options.py</a>
- part of Greg Ward's <a href="http://optik.sourceforge.net/">Optik</a>; a 
more-functional-than-getopt options parser for python.
</p>
<p>
<code>
# Do the right thing with boolean values for all known Python versions.<br/>
try:<br/>
&#0160;&#0160;True, False<br/>
except NameError:<br/>
&#0160;&#0160;(True, False) = (1, 0)<br/>
</code>
</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Minimal System Backups with rdiff-backup and Yum</title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000004.html" />
    <modified>2003-11-16T06:46:07Z</modified>
    <issued>2003-11-16T01:46:07-05:00</issued>
    <id>tag:naeblis.cx,2003:/blog//1.4</id>
    <created>2003-11-16T06:46:07Z</created>
    <summary type="text/plain"> I&apos;m falling in love with rdiff-backup. This tool gives you the best of both incremental and mirror backups, uses rsync/rdiff libraries to increment modifications to files, and best of all is written in python. rdiff-backup has made backups sexy again (again?). I&apos;m just completely all about backups now. Not so much for functional reasons--I&apos;ve only had to go to the backups once or twice to restore something, and it was a beautiful experience--but because the tool just rocks and...</summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Linux</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[<p>
I'm falling in love with 
<a href="http://rdiff-backup.stanford.edu/">rdiff-backup</a>. This tool gives you the best of both incremental and mirror backups, uses rsync/rdiff libraries to increment modifications to files, and best of all is written in python. rdiff-backup has made backups sexy again (again?). I'm just completely all about backups now. Not so much for functional reasons--I've only had to go to the backups once or 
twice to restore something, and it was a beautiful experience--but because the tool 
just rocks and makes me want to back stuff up. If <a href="http://www.stanford.edu/~bescoto">Ben Escoto</a> (primary author, rdiff-backup) could hack together some tax return software I might not have to deal with an audit this year. I could wax about rdiff-backup for a couple of pages but to make a long story short, it has inspired me to believe that backups are an old concept that still has lots of room for innovation and can be fun to code for. 
</p>
]]>
      <![CDATA[<p>
I'm <em>already</em> in a serious love affair with
<a href="http://linux.duke.edu/projects/yum/">Yum</a> and have been trying to contribute <img src="/blog/static/images/bruce-lee.png" style="float: right; padding-left: 6px"/> to this project in anyway I can. This tool filled a huge gap in the Red Hat offering by providing a customizable package management system similar to the 
<a href="http://packages.debian.org/stable/base/apt.html">apt-get</a> tool Debian users have been enjoying for years. Yum is extremely easy to use - to the point that you might think that it's light on functionality. No, it's not like that. Yum is the <a href="http://www.brucelee.com/">Bruce Lee</a> of system utilities in that
it resembles some silly little Chinese guy that you would think would be no match for, say, Kareem Abdul-Jabbar, and then you get 
<a href="http://www.brucelee.com/images/BLIMG/bruce11%5B1%5D.jpg" target="pic">the flex</a>, and it pulls a full distro upgrade with a single command (<code>yum upgrade</code>).
</p>
<p>
I should note here that apt-get can be used on RPM based systems as well but I am apt-get ignorant and will be refering to Yum exclusively for the rest of this entry. It is extremely possible that apt-get or even up2date could provide the the functionality needed to restore a system from RPM.
</p>

<b>Handling RPM Managed Files</b>
<p>
More pertinent to the topic at hand is the fact that Yum takes care of pulling RPMs from remote repositories, working out dependencies, and performing installations given a list of package names. What this means to the backup artist is that in order to be able to restore a wrecked system to it's previous set of packages you need only backup your yum config file (usually /etc/yum.conf), which contains your repository configuration, along with the <em>names</em> of all packages installed on your system. We can get the list of packages easily enough:
</p>
<p>
<code>$ rpm -q --all > list-of-packages</code>
</p>
<p>
Once we have our yum.conf and package-list backed up, a fresh machine with just the minimum requirements to run Yum, should be able restore to it's previous state with something like the following:
</p>
<p>
<code>$ cat list-of-packages | xargs yum install</code>
</p>
<p>
You have to swish the concept around in your head a little bit but you can think of the many RPM repositories that are getting thrown up nowadays as shared backups for common stuff. This greatly reduces the amount of files that need to be backed up by each person because they can always be obtained from a publicly available source.
</p>
<b>What about Unmanaged Files?</b>
<p>
So we can backup every single RPM managed file [that hasn't been modified] with a very small footprint. Now we get into the more tricky part, which is backing up all the stuff RPM either doesn't manage or manages but determines has been modified. We will use rdiff-backup to increment the files for all the benefits stated previously, but there are a few things missing from the current rdiff-backup/yum toolset.
</p>

<ul>
<li>
There is no straightforward method of obtaining a list of files that are <em>not</em> managed by RPM. You can <code>rpm -ql --all</code> to get a list of files that <em>are</em> managed by RPM and feed them into rdiff-backup as an exclude list but there are issues with this. Most notably is the fact that the file list will contain directories managed by RPM, which may contain files/directories not managed by RPM and rdiff-backup will exclude all files in a directory if supplied in an exclusion list.
</li>
<li>
<code>rpm -ql -all</code> outputs full filenames relative to the root of file system. This means that rdiff-backup would always have to be run on / as file paths in the exclude list are interpreted relative to the directory being backed up.
</li>
<li>
While not impossible, it is fairly annoying to get a list of files that are managed by RPM but have been modified from their original versions. The following is RPM's verify output, which can be parsed to find modified files:
<p>
<code>
$ rpm --verify --all --nomtime --nodigest \<br/>
&#0160;&#0160;&#0160;&#0160;&#0160;&#0160;&#0160;--nosignature --nodeps --nordev \<br/>
&#0160;&#0160;&#0160;&#0160;&#0160;&#0160;--noscripts --nouser --nogroup --nomode<br/>
S.5..... c /etc/ant.conf<br/>
S.5..... c /etc/krb.conf<br/>
S.5..... &#0160; /usr/lib/rpm/rpmrc<br/>
S.5..... c /etc/X11/gdm/gdm.conf<br/>
...
</code>
</p>
This has some serious drawbacks including the fact that it will take a <em>very</em> long time to run on even the fastest machine because it's performing MD5 checksums on thousands files, which also pretty much makes the machine unusable. You can speed things up a bit by passing --nomd5 into rpm --verify, which will cause checking to occur on sizes only but there's a pretty good chance you will miss something.
</li>
<li>
Lastly, it would be nice if files known to have no value in a backup could be excluded by default. e.g. /var/run, /var/lock, /tmp, /home/*/.mozilla/*/*/Cache, etc.
</li>
</ul>

<b>Design Goals</b>
<p>
What we need is a library that, given a directory, will tell us what files and 
sub-directories are unmanaged or managed-but-modified. This tool should be able to utilize some kind of database or cache of file information (possibly slocate's 
database or rpm's).
</p>
<p>
Once we have a mechanism for determining what files are unmanaged, a nice framework for defining backup sets should be provided. I'm thinking something along the lines of having an /etc/backup.d directory that would have config files for each backup set. The config files would specify the root directory to backup, where the backups should be stored, and a list of additional exclusions and/or forced inclusions relative to the backup directory. 
</p>
<p>
<code>
<pre>
# sample backup config file
[info]
name=home directories
source=/home
dest=root@backup-host:/backups/$hostname/home
backuptype=rdiff-backup
frequency=1d                # how often should we backup?
retain=5d                   # how long should increments be
                            # kept around?

[files]
- .phoenix/**/Cache         # exclude mozilla firebird cache
- .Xauthority               # we don't need that either..
+ .Xresources               # forcibly include .Xresources
</pre>
</code>
</p>
<p>
A couple of concepts to point out here. Source and dest are pretty self explainatory. backuptype would allow other backup tools to be used in place of rdiff-backup. Maybe we just want to straight rsync the files, or maybe somebody feels that incremental tarballs are still relevant &lt;g&gt;. Lastly, the files list contains a list of files to include or exclude. I really like rdiff-backups 
<a href="http://rdiff-backup.stanford.edu/rdiff-backup.1.html#sect7">
file selection syntax
</a>; it is simple and powerful.
</p>

<p>
There should also be a sane default backup set containing all unmanaged/modified files on the system minus cruft like /var/{run,lock}, cache directories, and anything else that doesn't have backup value. The only aspect that should require configuration is the destination of the backup. Reasonable defaults for all other aspects should be provided.
</p>

<b>Summary</b>
<p>
A Minimal Backup System would provide a simple-as-in-easy-to-configure yet 
powerful tool that could act as an almost turnkey backup solution for most small scale GNU/Linux installations that use RPM for package management. A positive side-effect of having RPM aware backups is that it further promotes the use of RPM to package common/unchanging files as the more that is managed by RPM the less space is required for backups.
</p>]]>
    </content>
  </entry>
  <entry>
    <title>Experimental Firebird Extension RPMs Available</title>
    <link rel="alternate" type="text/html" href="http://naeblis.cx/blog/archives/000003.html" />
    <modified>2003-11-12T08:14:25Z</modified>
    <issued>2003-11-12T03:14:25-05:00</issued>
    <id>tag:naeblis.cx,2003:/blog//1.3</id>
    <created>2003-11-12T08:14:25Z</created>
    <summary type="text/plain"> Building RPMs for Mozilla Firebird Extensions is moving along nicely. The following extensions have been packaged up without much problem. uptime nukeimage useragentswitcher popupcount autohide rssreader At this point I&apos;m fairly confident that any extension can be packaged in RPM. I&apos;m planning on soliciting feedback from the fedora and freshrpms lists soon and should be publishing something in the interim. If you want to take a look at building these yourself, I have viewcvs setup here with the tarball...</summary>
    <author>
      <name>Ryan Tomayko</name>
      <url>http://naeblis.cx/blog/</url>
      <email>rtomayko@naeblis.cx</email>
    </author>
    <dc:subject>Linux</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://naeblis.cx/blog/">
      <![CDATA[<p>
Building RPMs for Mozilla Firebird <a href="http://extensionroom.mozdev.org/">Extensions</a> is moving along nicely. The following extensions have been packaged up without much problem.
</p>
<ul>
	<li>uptime</li>
	<li>nukeimage</li>
	<li>useragentswitcher</li>
	<li>popupcount</li>
	<li>autohide</li>
	<li>rssreader</li>
</ul>
<p>
At this point I'm fairly confident that any extension can be packaged in RPM. I'm planning on soliciting feedback from the fedora and freshrpms lists soon and should be publishing something in the interim.
</p>
<p>
If you want to take a look at building these yourself, I have <a href="http://naeblis.cx/cgi-bin/viewcvs.cgi/rpm/packs/MozillaFirebird-extensions/">viewcvs setup here</a> with the tarball option on.
</p>]]>
      
    </content>
  </entry>

</feed>



