Posts about python (old posts, page 17)

2008-07-29 00:20

Urssus: July 28th late at night - Released 0.2.0 and it's outdated already (with screenshots)

Yes, I released 0.2.0, and announced it on PyPI, Freshmeat and, we'll see what happens.

But why is it outdated? Because I am doing nicer UI work, already.

  • The search widget is now a bottom-locked toolbar, which is much cleaner.
  • There are now 3 window layouts (normal, widescreen and combined) and each has a "long feed list" and a "short feed list" variant.

Here is widescreen-long:


And here are widescreen-short, widescreen-long, normal-short, and combined-short, all scrunched in a single screen (yes, you can run multiple urssus (urssuses? urssi?):


2008-07-28 16:33

Urssus: July 28th - Cleanup

I did a fair amount of work in urssus today. The highlight? database schema migration.

Here is the (not really) full list:

  • Fixes on the installer
  • Fix in importOPML
  • Raise the window when you click on the systray popup
  • Fixed several issues after feed deletion
  • Fixed several issues with feeds not updating the UI's unread count
  • Fixed the look of buttons on searchWidget and filterWidget
  • And several more...

And the big one:

  • Implemented database schema versioning using sqlalchemy-migrate.

What does that mean? That I can change the database and the user will not notice anything.

On startup, uRSSus checks if you are using the correct schema, and updates your database accordingly.

For example, I can now implement manual feed sorting just adding a "position" column to the Feed class. If I had not implemented this, that would require a much greater hack.

Now? I just do it, write an upgrade/downgrade script, and that's all. Migrate is really a very cool tool, and shows the strength of using SQLAlchemy (not so much that of using Elixir, because they get along grudgingly ;-)

Current LOC count: 1491

Current status: still fun! (and educational!)

2008-07-27 22:00

Urssus: July 27th - Released into the wild!

I spent the day bugfixing. Then, when I realized I was fixing stull like "when you delete a feed, the unread count in the parent feed is not updated correctly" and "if you go to Next Unread article and there are none, make the search wrap" I decided this thing must really be working right, since both things failed me in at least one similar program that claims to be production-ready (not akregator! ;-) So I am releasing it as 0.1.0

And I am doing it for real:

  • PyPi page for easy_install
  • Working installer! (Not quite working for windows, though)
  • Most known bugs fixed (at least 15 today)
  • Uploaded to Arch's AUR, so we Arch users can get it painlessly ;-)

It has been a nice experiment, and I will try to write something coherent tomorrow about lessons learned and such as we reach my self-imposed two week deadline for Akregator feature parity.

2008-07-26 00:04

Urssus: July 25th (way too late) - new features

Last post for the day, and probably until monday.

  • Finished expiration implementation (and it works just fine)
  • Fixed a tough bug and now the background fetcher updates the UI correctly
  • Made the template location code work correctly before and after installation (thanks to help from PyAr mailing list)
  • And the pretty one: custom CSS file used for all templates. The default webkit (and khtml, and firefox) CSS is horrid. This one is just not pretty, but still an improvement.

And of course, a screenshot. Akregator on the left, uRSSus on the right:


2008-07-25 14:33

Urssus: July 25th (later) - uRSSus on windows


So you need to install SQLAlchemy 0.4.6 and Elixir 0.5.2 and python and pyqt and paver, and whatever manually right now... it does work.

I had to change about 10 lines, specifically stuff about temporary files.

On Linux, I create a NamedTemporaryFile, write to it, then read it from another place of the code. As long as I keep a handle to the object that's ok.

On Windows, it seems I can't read the file because it's locked by the writer, but if I close it it's deleted, so I switchedto mkstemp and that's it.

Also, it doesn't run well from inside IDLE for some reason.

2008-07-25 12:55

Urssus: July 25th - approaching parity

My stated goal of Akregator feature parity is looking even better. With screenshot!


If you didn't read (or care about) last night's updates to yesterday's post, here they are:

  • Implemented "Mark posts as read on arrival for this feed"
  • Implemented customupdate intervals for feeds
  • Fixed article filtering
  • Implemented filtering by article status
  • Implemented folder-as-feed (not perfect)
  • Export as OPML

And today I did these:

  • Switched from Mako to Tenjin (which I can just bundle)
  • Implemented "Combined View" mode (you can see it in the screenshot above)
  • Implemented "Import Technorati top 10"
  • Organized the code correctly
  • Wrote a Paver script so it can be installed nicely (someday)
  • Removed all generated files from the repo (now you generate them using paver and/or

So, on the TODO we have:

  • Favicons
  • Implement app preferences dialog
  • Bugfixes
  • Pagination for combinedView (so you don't have a page with 90000 posts in it which takes a month to load)
  • Akregator DB import script, so I can compare performances reasonably.

And still fun!

Current LOC count: 1295

2008-07-24 13:49

Urssus: July 24th

When I started this project I wrote:

I intend to keep working like this for a couple of weeks, and see how far I can get in feature parity to akregator.

No, I don't expect to reach feature parity, I only want to strive for it. SInce I lack the focusand/or energy for a multi year commitment it requires to write the average free software, I want to see how far a sprint gets me.

To my surprise, only 9 days into the project, feature parity is at hand.

What's not done?

  • Some feed properties (custom archiving modes, mark as read on arrival) (Update: "mark as readon arrival" implemented at 22:40)
  • Fix article filtering (it's not quite broken, but interacts badly with many things) (Update: done as of 19:20)
  • Implement app preferences dialog
  • Filtering by article status (Update: implemented as of 19:01)
  • Folder-as-feed (Update: done, as of 22:20, even if not really efficiently)
  • Export as OPML (Update: just implemented it :-)
  • Favicons

And some things in the backend, which are not proper features.

What have I done today?

  • New articles notification via systray
  • Custom update intervals per-feed
  • Made Feed.unreadCount() fast enough
  • Article sorting (not as trivial as it sounds)
  • Fixed a lot of bugs (none of which crashed uRSSus, take that Akregator! ;-)

And still I have written only 1066 lines of code, according to sloccount.

Update: 1127 lines with the extra features marked above as "update"

2008-07-23 09:29

Urssus: July 23rd (early)

So I did work on it a little last night:

  • Feed/Folder context menus
  • Open Feed Homepage action
  • New Feed (uses Mark Pilgrim's, which is awesome)
  • New Folder
  • Delete Feed/Folder
  • Some UI fixes (finally figured out how to make a QTreeView's headers look right!)
  • Some bugfixes in tree traversing (where else ;-)
  • Implemented "fetch the web page instead of the feed contents" option for feeds (because of your annoying feed, DZone!)

Sadly no visible changes, so a screenshot would be useless.

2008-07-22 16:48

Urssus: July 22nd / looking good

Today it was a bit more than two hours, but spread in 10 minute chunks, which is not exactly efficient.


  • Rewrote the whole next/next unread/article/feed spaghetti in a decent way. It's broken regarding filtered/sorted article lists, but it's trivial to fix.
  • A few UI features:
    • Show only feeds with unread articles google-reader style
    • Show in dark red the unread articles
    • Show title / date of articles in separate columns
  • Implemented "Match case" for the search
  • Implemented dumb systray icon (need to make it useful)
  • Implemented article counts in folders (but not article lists which is, of course, harder)

And of course, a screenshot:


A bad side is that the main window takes about 3 seconds to appear, but I am pretty sure that's fixable reordering the startup code.


  • Feed CRUD
  • Post mark as (read/unread/important/whatever)
  • Filter by post status
  • Search in all feeds
  • Virtual feeds
  • Persistent settings
  • More aggressive feed fetching (now it's a single queue, should be a configurable number)
  • Lots of minor fixes

And it will be pretty much in feature parity with Akregator, and ready to start the packaging work. Not bad for a week of work (BTW: if anyone has any experience packaging PyQt stuff for windows/Mac I can use the help ;-).

Still fun (although tree traversing is starting to get quite annoying)

2008-07-20 17:44

Urssus: July 20th / eating my own dogfood

Yes, I am now using uRSSus instead of Akregator.

On the programming side, I did very little work because it's sunday...

  • Implemented the Find windget backend code and it works forwad and backward (but not "Match case" which is pretty trivial).
  • Fixed a few focus issues. When you have a multi-widget main window, it can get kinda tricky, and you may end needing to move focus around manually (not in this case yet).

I have found a few bugs, mainly related to traversing the feed tree, but they are all fixable with some effort (or by doing it correctly the second time ;-)

Contents © 2000-2019 Roberto Alsina