January 30, 2003


The main thing that has been keeping me busy in the last two days is my semi-freelance job. I have created an application for sending GSM mobile phone logos and ringtones through SMS messages, and the service based on that application has been operating for almost a month now. However, we still have problems with one of the three SMS message formats we support: namely, EMS messages. The problem is that multi-part ringtones and logos are not concatenated correctly.

The worst thing about this work is that it's very hard to debug problems. If you send something incorrectly, the phone produces some wrong result (silence, or, as in my case, playing the first fragment of the melody twice and not playing the other fragments). But it is impossible to get the diagnostics on what exactly you got wrong and where. Thus, the only thing that remains for me to do is to re-read the spec, change something and retry. Repeat ad nauseam.

And as it usually happens - all these things worked some time, but then we moved to a different SMS center, and everything broke down.

And another thing is that there are already several companies providing this service, but as far as I understand, none of them support sending EMS messages. Mostly, they support only the Nokia and Siemens formats, which work fine in our software as well.

So I have an excuse for not producing any Syndirella builds. :-)

Posted by yole at 12:45 AM | Comments (1) | TrackBack

January 28, 2003


  • You can now subscribe to RSS feeds by clicking on the Radio Coffee Mug icon you can find on some weblogs. (Radio listener contributed by Joe Hildebrand.)
  • You can now specify the login user name and password for Web feeds. (Initial patch by David Stone.)
  • Whitespace is now trimmed from the RSS <comment> links.
  • Probably fixed the "System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values." error when closing Syndirella.

Download binaries, sources or installer.

Posted by yole at 01:40 AM | Comments (5) | TrackBack

January 26, 2003

Comments on comments

Two notes on comment support in Syndirella:

First, Syndirella will not detect comment links on items which it has already downloaded and stored in a feed. If you want the comment links to appear on all items, delete the feed and add it again.

Second, I've added the comment links support to my own RSS feed. Thanks to James Duff for the template.

Posted by yole at 10:43 AM | Comments (1) | TrackBack


  • Limited the number of feeds that can be updated at the same time. This should fix the problem "System.InvalidOperationException: There were not enough free threads in the ThreadPool object to complete the operation.".
  • Shuffled some code around in an attempt to fix the problem "System.InvalidOperationException: Handle is not initialized. at System.Runtime.InteropServices.GCHandle.Free() at System.Windows.Forms.Timer.set_Enabled(Boolean value)". I don't quite see why the problem could appear - all operations with the tmrMarkAsRead timer are done from the main thread, so there should not be any race conditions. However, they do occur. Hopefully my changes will help fix the problem. Any comments on this are appreciated.
  • The location of the FeedReader 2.3 settings file was not detected correctly. (Reported by Cedric Beust.)
  • Support for importing Open Content Syndication Directory files (contributed by Victor Sanchez). Note that while Newzcrawler supports exporting OCS files, it doesn't escape the special characters (like &) correctly and thus can produce invalid XML. Don't ask me to work around this. Ask the Newzcrawler author to make a proper fix.
  • Added an option in the preferences dialog to open the links in a new browser window. The system default browser is used for this.
  • Added support for <comments> tag in RSS feeds. The "Comment on this" function is currently only available through the item popup menu; a more visible interface is coming later.
  • The isPermalink attribute of the <guid> item is now supported correctly. "Copy link to clipboard" now copies the permalink from the guid if the guid is present and the isPermalink is not set to false.
  • Refactored the RSS autodiscovery code to separate the logic from the Windows form. Something may have got broken - please test carefully!
  • Installer! Thanks a lot to Gerry Shaw for the scripts.

Download binaries, sources or installer.

Posted by yole at 01:09 AM | Comments (4) | TrackBack

January 25, 2003

reStructuredText blogging

Idea to implement: combine Les Orchard's MTXmlRpcFilterPlugin with DocUtils to create a system that will allow me to type my weblog posts in reStructuredText, not in raw HTML. Basically, everything that needs to be done is to write a simple XML-RPC server that will receive requests from the filter plugin and pass them through DocUtils for formatting.

Of course, even better would be a true WYSIWYG weblog client. It is pretty strange that no such thing still exists - it seems really easy to combine the Microsoft DHTML Editing control with the MetaWebLog API. I would've done this myself, but I don't want to get distracted too much from Syndirella development.

Posted by yole at 01:49 PM | Comments (5) | TrackBack

January 24, 2003


Some more interesting stuff today.

  • FeedReader import. (Implemented by Victor Sanchez.)

  • Syndirella now shows the count of unread items in each feed.

  • The Spacebar Fix. Now the Space key doesn't move you to the next item when the browser pane has focus and you are not viewing a feed item directly. Thus, you can now easily write comments from within Syndirella. :-) The shortcut for "Next unread item" that works all the time is Ctrl-Space.

  • The "Updated" status of items was not cleared properly when "Mark as read" was selected for a feed.

Download binaries or sources.

Posted by yole at 10:23 AM | Comments (6) | TrackBack

January 23, 2003

Weblog comments

Syndirella really needs to support this. And it will. Quite soon. :-)

Posted by yole at 11:21 PM | Comments (5) | TrackBack


  • Fixed the crash on startup in the last daily build.
  • Now using the standard function for replacing HTML entities - System.Web.HttpUtil.HTMLEncode(). Thus, all entities are now processed correctly. (Suggested by Victor Sanchez.)
  • Fixed an exception produced if feeds were added or removed in the middle of the auto-update loop (Issue40).
  • "Next unread item" now starts looking for a feed with unread items from the currently selected feed, not from the top of the list.
  • Added "Copy link to clipboard" to the item popup menu.
  • Moved the "Back" and "Forward" buttons to the beginning of the toolbar. (Suggested by Allan Wilson.)
  • The "Update all feeds" toolbar button did not work. (Reported by edmz.)
  • Importing corrupt OPML files now produces a friendly error message, not a stacktrace. (Reported by Michael Alderete.)
  • The default font for items is now Verdana 10pt.

Download binaries or sources.

Posted by yole at 01:27 AM | Comments (4) | TrackBack

Updated items

Ewan Grantham asks: What, if any, is the significance of some of the feeds being in blue rather than in black? Is this configurable somewhere?

If a feed is colored in blue, it means that this feed has updated items (the items that were changed after they were posted). The updated items are also colored in blue. After you read all those items again (click on them and wait for 1 second so that they are marked as read), the feed will again become black.

Note that the detection of updated items currently has some problems (an item can be marked as updated when there have been no really significant changes, or multiple different items can be processed as a single item.)

A later version of Syndirella may include an option to disable detecting updated items altogether. (I haven't yet decided; comments on this are appreciated.)

Posted by yole at 12:43 AM | Comments (3) | TrackBack

January 22, 2003


Looks like home.yole.ru was offline for an hour or two today - I ran out of traffic and didn't notice it in time. Now everything should be alright again.

I really envy American broadband users, who have unlimited traffic for a flat monthly fee of $40-50. I do have a broadband connection with a static IP at home, basically a 100Mbit fiber-optic line to my apartment and an external channel of about 40 Mbits (shared by all users of the provider). But I have to pay for incoming traffic to my machine - and the price is about 8-10 cents per megabyte. Thus, it happens quite often that I spend $80-100 per month for my Internet connection.

And even that is not available everywhere in St.Petersburg. There are several small broadband networks covering specific regions of the city, and the people living outside these regions have to choose between modem connections (about $0.5-0.7 per hour) or expensive ADSL ($100/month for a decent quality connection - 128/64K - with an $200 installation fee).

The site www.yole.ru is hosted at a different machine, but I basically have no admin rights there, so I cannot install there the software I need (MovableType, CVS, Roundup and so on).

Posted by yole at 08:15 PM | Comments (2) | TrackBack


Nothing fancy today - mostly dealing with patches that have been sent earlier.

  • Fixed the remaining issues with the resize patch from Prasenjeet Dutta.

  • HTTP proxy support (the proxy specified in Internet Explorer configuration is used). Patch from Victor Sanchez and rOD Begbie.

  • Syndirella doesn't allow starting multipe instances. Pointer to implementation from David Stone.

  • It is now possible to specify the referrer used in Syndirella HTTP requests. Initial patch from rOD Begbie.

  • The font used for displaying the text of news items is now configurable. Initial patch from rOD Begbie.

Download binaries or sources.

Posted by yole at 01:20 AM | Comments (5) | TrackBack

January 21, 2003

gzipped RSS

Mark Pilgrim's RSS feed is now gzipped, and Syndirella didn't even notice that. It is definitely pleasant to use a mature library which abstracts away such details.

Well, maybe not quite mature. The HTTPResponse class does throw an exception if you access the LastModified property and the server returned a malformed Last-Modified header. But that was easy to work around, anyway.

Posted by yole at 11:25 PM | Comments (0) | TrackBack

Regarding requests for help

A followup on my requests for help:

1. Please don't send me OPML files with your subscription lists. What I would actually like to receive is the settings for the Web feeds you have configured. Once I get more submissions, I will create a package and post it to the Syndirella project page.

2. Three people have already volunteered to create a Syndirella installer with Nullsoft Install System, so that request is closed. I'll post an installer together with one of the following builds.

The request for the Syndirella UI graphics still remains open.

And thanks a lot to everyone who has contributed!

Posted by yole at 01:41 AM | Comments (0) | TrackBack

Latest comments in RSS

I've just added the RSS feed for the latest comments posted to my blog, based on the template by revjim. The feed is here:

Works perfectly in Syndirella, of course. :-)

Posted by yole at 01:31 AM | Comments (0) | TrackBack

January 20, 2003


So, with the worst bugs gone, I can now return to the regular sequence of posting daily builds. There will be many of them, so don't feel obliged to download every single one. :-)

News for today:

  • The new domain name - syndirella.net - is now official.

  • Added context menu for items. One menu item so far - "Mark as Unread".

  • Syndirella now remembers its maximized state. (Patch from Prasenjeet Dutta.)

  • Smoother keyboard scrolling of the item list. (Patch from Prasenjeet Dutta.)

  • Double-clicking a feed opens its homepage. Double-clicking an item opens its permalink. (Patch from rOD Begbie.)

  • The address combo box is now always visible, and displays "feed:title of the feed" when a feed item is displayed.

  • The Preference everyone asked for. It is now possible to turn off expanding the browser pane when links are followed inside Syndirella.

  • Fixed bug reported by Aaron Schutzengel: after changing the settings of an existing Web feed and pressing Save, you could no longer see any items in the feed.

Download binaries or sources.

Posted by yole at 01:34 AM | Comments (5) | TrackBack

January 19, 2003

We've got a domain!

rOD Begbie has registered the domains syndirella.com, .org and .net and donated them to the project. For now, the domains redirect to the project page at yole.ru.

Thanks a lot rOD!

Posted by yole at 10:53 PM | Comments (0) | TrackBack


Unfortunately, enough problems remained in the version 0.9a to warrant another bugfix update - 0.9b. The new update is not as rushed as the previous one, and fixes the majority of the problems that were reported to me so far.

Here is the list of the fixes:

  • Under Windows 98, Syndirella showed only the first letter of all listview items - namely, feed titles and item descriptions.

  • Fixed a crash on startup (Object reference not set to an instance of an object) reported by some users.

  • JavaScript fragments in the items scraped from Web feeds could cause errors. Now all JavaScript is stripped during the scraping.

  • Various fixes to RSS parsing. Syndirella could get confused by mailto: links in item descriptions, relative links in the <link> tags of RSS feeds, invalid date formats and some other things.

  • Feeds which use international characters (Cyrillic, German etc.) and explicitly specify an encoding (not UTF-8) are now parsed correctly.

  • Added locks to prevent the "Collection was modified; enumeration operation may not execute." exception if a feed is being updated at the same time as its list of items is being displayed.

  • If the web feed settings were imported through the main menu item (and not by pressing the "Import..." button in the dialog), the URL field was always empty.

  • Other minor fixes.

The binary and source archives can be downloaded from the usual location.

Posted by yole at 05:49 PM | Comments (1) | TrackBack

January 18, 2003

Syndirella discussion group

I have created a discussion group on YahooGroups for Syndirella users. Any comments, suggestions and bug reports are welcome there.

Posted by yole at 04:14 PM | Comments (2) | TrackBack

What's next

A major part of the feedback I've been getting is feature requests. So, to keep the responses in one place, here is what's planned for the nearest future.

First, I'll concentrate on all the little features that didn't go into 0.9 because I didn't want to drown in feature creep - I felt that getting something out was more important. So here's some of the things planned for 0.91:

  • HTTP proxy support.

  • Possibility to mark items as unread.

  • Option not to expand the browser pane when links are clicked, and a button for quick expanding/collapsing of the browser.

  • Possibility to customize the font used for the browser pane.

  • Double-clicking an item will open the permalink for that item, and double-clicking a feed will open its homepage.

  • Correct support for Cyrillic (CP-1251) feeds.

  • Support for dragging and dropping URLs onto the Syndirella window.

  • And some other things I have in my to-do list.

After that, I'm going to finally implement a decent way of sorting and organizing feeds. This is probably the most important shortcoming of the current Syndirella UI. It would be easy to replace the listview with a treeview - but I don't really like the idea of using the treeview here. I think there is really no need to have multiple levels in the hierarchy - one level of grouping should be enough. Thus, I'm thinking of implementing collapsible groups looking somewhat like the Opera 7 mail client.

Also, I'll add some way to sort and/or reorder feeds within a group. Nothing fancy is needed here - just a popup menu option to sort the feeds in a group alphabetically, and drag & drop for manual reordering.

Posted by yole at 02:51 PM | Comments (2) | TrackBack

Requests for Help

Phew. The stream of exception reports seems to have finally stopped - 0.9a does fix the worst problems. So now I can relax a bit.

The fact is, I could use some help with Syndirella development. None of the following items require programming experience, so should be quite easy for anyone.

Web Feed Settings: If you configured any Web feeds in Syndirella, please use the "Export" button in the feed configuration dialog to save the settings to an XML file, and send those files to me. To save the users the trouble of manual configuration, I'd like to create a repository of scrape settings for popular sites. (This will be much, much easier some time later... maybe. No promises.)

Graphics: Currently, all Syndirella graphics are programmer art at its worst - I cannot draw, and I'm not too proficient in using graphics editors. I really need a better icon (16x16 and 32x32) and a better tray animation (16x16, not necessarily 5 steps - could be more or less). I also need two new toolbar buttons - "expand browser" and "collapse browser" (for hiding and showing the feed list and item list panes.) Better replacements for the existing buttons are also welcome.

Installer: Syndirella needs a simple installer. Nothing fancy, no MSI for God's sake - just a single-file installer package that can check if the .NET Framework is installed and upgrade existing Syndirella installations. This should be easy to create with something like Ghost Installer or Nullsoft Install System. I can certainly do it myself, but it is a completely standalone task, and easily done by something else.

And of course, patches are welcome too. (We already have some, in fact. :-) ) If you want to work on something serious, please contact me in advance to discuss the details.

Thanks in advance for all your help! And thanks for all the feedback I'm already getting!

Posted by yole at 10:25 AM | Comments (2) | TrackBack


The release of Syndirella did not go quite smooth, after all - I got quite a few exception reports since the release. Thus, I have to release an updated version, fixing the most common problems reported.

Here's the details:

  • Probably fixed the problems with toolbar creation. It was not related to Windows 2000, as I initially thought. The problem was fixed by upgrading to the latest version of UtilityLibrary. It does some hairy things when initializing toolbars, and for some users it just didn't work right. I wasn't ever able to reproduce the problem myself, so if it still remains, please shout.

  • Fixed several RSS autodiscovery issues. For instance, Syndirella produced exceptions when adding feeds at online.effbot.org and Hack the Planet.

  • Fixed the ArgumentOutOfRange exception that was produced if a feed was removed before it finished updating.

I'll respond to feedback tomorrow - sorry, have to get some sleep. :-)

Get the binaries and sources at the usual location.

And I really owe a lot of thanks to Francois Planque for his help in testing this version.

Posted by yole at 01:47 AM | Comments (4) | TrackBack

January 17, 2003

Feedback. Yes, Feedback.

Frankly speaking, I was really quite nervous about the release of Syndirella. It is not quite the first time I release anything to the public, but still - I really wanted to do everything right. I didn't sleep too well the night after the release, and uneasily approached my computer after I woke up.

First, it looked like there was no real reason to be nervous. The world didn't turn around. Dave Winer gave me a one-line mention on Scripting News, just about as I expected. I got about 100 hits during the night, and a couple of reports about a nasty problem - for some users, Syndirella fails to create the toolbar. It's quite a bad thing when the user downloads the application and it crashes right on startup, but that's how things are with first public betas - and I got to see that the "send exception stack trace by e-mail" feature is also working nicely.

But this is about as close to the world turning around as I could possibly expect. :-) Mark Pilgrim did notice Syndirella. And - well, see for yourself. :-)

Thanks, Mark. Now I know it is worth spending my time working on Syndirella. Despite all the other news aggregators for .NET that are now popping everywhere like mushrooms after the rain.

Posted by yole at 08:30 PM | Comments (7) | TrackBack


It's out. Just uploaded the final 0.9 binary and source archives and posted an announcement to RSS-DEV.

Welcome y'all. Feel free to leave comments here.

Posted by yole at 01:40 AM | Comments (3) | TrackBack

January 16, 2003

Syndication Subscription Service

While looking for an OPML to HTML converter (to finally get rid of "Add Your Links Here" on my sidebar), I stumbled on the following:

Syndication Subscription Service

This service provides an universal interface for creating subscription links, allowing the user to subscribe to any feed in an aggregator he's using by clicking on a link.

I'll have yet to see whether it's more useful than Radio's coffee mug link (it is certainly not as widespread), but in any case it would be good to support it in Syndirella. And the coffee mug is almost a must-have for today's aggregators: I'm definitely going to support it.

Posted by yole at 10:16 PM | Comments (0) | TrackBack


We're not there yet. The latest build of Syndirella is not yet ready to be called version 0.9. But it has some important changes that needed to be done before the release.

First of all, Syndirella now processes all unhandled exceptions and automatically creates e-mail reports to me containing the stack trace of the exception. I think that this way to report exceptions is most convenient both for me and for the users - much better than transmitting exception reports by HTTP. First of all, I don't need to build any system for receiving the reports. Second, I automatically get the e-mail address of the user, so that I can follow up to him on the report. Third, users need not be concerned about their privacy - they will see all the data that is sent to me.

The only problem with that method is that some mailers (most notably, The Bat!, which is commonly used in Russia, and which I use myself) cannot handle mailto: URLs longer than 255 characters, and that is obviously far from enough for a complete stack trace. However, both Outlook and Outlook Express (running under WinXP) have no problems with the URL length. (I'm afraid that Win98 could also limit the URL length. I'll have to check.)

Besides that, I've finally settled the licensing issues. The author of the collapsible splitter control has given permission to distribute it under the GPL, so its source is now included in the Syndirella source archive. However, the UtilityLibrary will be distributed in binary form only, with a special exception to the GPL allowing that.

As for the code changes:

  • Added a button to the About box to show the Syndirella license.

  • Improved the RSS autodiscovery. Now it really implements all steps of Mark Pilgrim's method - it also detects links which contain rss, rdf or xml in the link text, not only in the link end. Also, local links are detected more correctly. Thus, the feed for Ingo Rammer's weblog is now discovered correctly.

  • Rewritten the code for initializing and validating the common feed properties (update interval and old item count). Now you won't get any crashes because of incorrect values for these fields.

  • Added a new option "Unlimited" as the count of old items stored.

The binary and source snapshots are now distributed in separate archives.

Posted by yole at 01:33 AM | Comments (0) | TrackBack

January 15, 2003

Syndirella page

Finally created the webpage for the Syndirella project.

Too bad I don't have time for anything else today - quite a few bugs were found in the latest build, and I also want to add automatic exception logging before the public release. Probably a new build will be out tomorrow, and then we'll see whether it is stable enough to call it 0.9 final.

Posted by yole at 12:56 AM | Comments (0) | TrackBack

January 14, 2003

Almost there

So, I hope that the latest build of Syndirella will be the last one before the final 0.9 release. The code is feature complete. Things that still remain to be done are settling out some license considerations, creating the project page for Syndirella at yole.ru and, of course, more testing.

There's been quite a few changes in this version. Here's a list:

  • Upgraded to XML-RPC.NET 0.7, which incorporates one bugfix done by me personally.

  • Added settings for the number of old items to be stored in each feed. The limit can be set either by the count of items or by the number of days for which items are stored. (This was the Last Major Feature holding the release of 0.9).

  • Added an about box with homepage links and a list of credits.

  • If adding an RSS feed fails, Syndirella automatically prompts you to create a Web feed for the same site.

  • The Preview button in the Add Web feed dialog has been improved. Now, if the source has not yet been downloaded, it downloads it automatically and shows the preview after the download is complete.

  • The URL field in the add feed dialogs is initialized with the URL of the page currently viewed in the Syndirella browser.

  • The View Source menu item has been moved to the View menu, as I've been constantly expecting to find it there.

  • Fixed a major handle leak related to tray icon bitmaps, causing Syndirella to die if left unattended for a while when there are some updated items.

  • Various fixes related to handling of updated items.

  • Fixed the RSS parser to do proper namespace handling. It now passes all the tests from the test suite of Mark Pilgrim's ultra-liberal RSS parser. Previously, it failed the tests which had local name clashes.

Posted by yole at 01:06 AM | Comments (1) | TrackBack

January 13, 2003


The lack of updates in this weblog during the last couple of days has been caused by several reasons, but the main of them is that I've spent quite a lot of effort redesigning my main website, yole.ru. Previously, it was quite an ugly mess of PHP code and Apache .htaccess files, using frames and tables for layout, and was somewhat painful to maintain. The new layout is done the Right Way. All pages are marked XHTML 1.0 Strict, and all layout is done using CSS Level 2. (Frankly speaking, not all of the pages currently validate, but I'm going to fix that over the next couple of days.) Besides that, I've been trying to follow the guidelines in Mark Pilgrim's excellent Dive into Accessibility book. I do not care so much about people with disabilities, but I care much more about things which affect normal users, and generally about doing things the Right Way.

One thing not done quite right is that I still use absolute font sizes. I'd like to do a more flexible layout, and to specify the width of the sidebar in em units, but that makes it much harder to do a pixel-perfect layout of my drop shadow border between the sidebar and the content part.

Another thing that I'd like to fix sometime is search. Since my site doesn't use a database, and its internal structure is still quite irregular, implementing search is not trivial, and will require some work. Using Google is always an easy way out, but the Google gap makes such a search much less useful - Google doesn't index my site too often.

I really wanted to do the markover before the initial public release of Syndirella, because I expect to get at least some attention from the blogosphere, and I would just feel ashamed to point my users to a website using frames and other nasty things. The new layout is much better, and doesn't have a reason to be ashamed of it. :-)

In the meantime, I've also been doing some work on Syndirella, bringing it even closer to 0.9. It is not yet done, but really close - probably one build away. I'll probably post the build tomorrow morning, and release 0.9 early next week.

Posted by yole at 01:32 AM | Comments (0) | TrackBack

January 04, 2003


Having successfully recovered from the New Year celebration, yesterday I spent a good deal of time working on Syndirella. The release of 0.9 is even closer now - the new build adds support for automatically updating RSS and Web feeds.

Besides that, the following changes have been made:

  • Added an URL combo box which displays the current address when following links from feed entries and allows to view arbitrary Web pages in Syndirella. The functionality of the URL combo is not yet complete; probably some more changes are forthcoming.

  • The tray icon is visible always when Syndirella is running, not only when it is minimized;

  • Syndirella now explicitly remembers the last selected item for each feed. This fixes a couple of problems which occurred because of the old logic to automatically select the last unread item when a feed is selected.

  • Some fixes to the "Add Web feed" dialog;

  • New menu item "Import Web feed settings", allowing to import the settings in one step, without manually opening the "Add Web feed" dialog;

  • Improvements in the heuristics to auto-detect updated items for blogs which do not have GUIDs. The previous version, for example, considered all entries on Scripting News (which do not have titles nor links) as updates of the same single entry. The current version shows all entries correctly.

Posted by yole at 12:23 PM | Comments (0) | TrackBack