February 25, 2003

Syndirella testing tips

Syndirella is getting ever closer to the release of the version 0.91. The release of 0.9 was plagued with quite a lot of problems (I even had to do two successive updates to fix the worst of them). I do not want the release of 0.91 to look the same. And I need your help.

First of all, if you ever reported a problem to me, please verify if it is fixed in the recent builds. If it is not, you should report it again. I will go through all the unanswered bug reports and try to contact everyone, but you will make my work easier if you confirm your reports after testing the latest build.

If you don't have any obvious problems, here are some tips for finding new ones. Generally, the main things to watch out for are drawing problems - specifically, drawing the list views and the toolbar. You should also check for resource exhaustion - load a lot of feeds into Syndirella, do some "heavy reading" (holding down the spacebar for a couple of seconds is a nice approximation), do some stuff with the toolbar and so on, and watch for exceptions signifying that Syndirella has run out of resources. There were some reports of resource leaks, and I've made some changes that could probably fix that, but I'm not too sure.

Another thing to be watched is the feed updates. Do all the feeds update correctly? Do you see the proper dates for feeds which have the item dates specified? Do any of the feeds get stuck in the "updating" state?

Please report problems by e-mail, not by ICQ and not by comments here. E-mail is much easier for me to keep track of.

And thanks in advance for your help!

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

February 24, 2003


  • New date parser from Jeremy Dunck. The parser passes all the date tests in the RSS Validator testsuite with no problems. Thanks for the excellent job Jeremy!
  • Added support for logging. If you have ever had any problems with feed updates (for example, feeds stuck updating, or items marked as updated for no apparent reason), please run Syndirella with the "-log" command line parameter, and e-mail me the file "syndirella.log" in the Syndirella installation directory if you encounter any such problems.
  • Fixed a problem that caused Web feeds to get stuck in the "Updating" state if any HTTP problem occurred.
  • Better policy for handling feed update errors. If a feed update fails, Syndirella does two more retries with 1 minute intervals and then switches to retries once an hour.
  • Added the notion of "fatal update errors" (now reported for HTTP 403, 404 and 410). Fatal errors are shown as message boxes, and a feed with a fatal error is not updated until Syndirella is restarted.
  • Increased the size of the HTTP buffer from 1K to 8K. This should speed up various HTTP downloads in different places of Syndirella.

Download binaries, sources or installer.

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

February 23, 2003


  • Hopefully fixed all the problems with the feed list drawing.
  • Fixed a problem with saving the widths of columns which could be hidden (Category and Author).
  • The default referrer is no longer set to "http://www.syndirella.net/". Moreover, if the referer was set to that value, it will be cleared automatically when the new build is first started.

Download binaries, sources or installer.

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

February 22, 2003

A (not at all) subtle hint

My birthday is February 25th.
My Amazon wishlist is here.

Technical note: Amazon shipping to Russia has been tested and found to work. The cheapest option takes about a month to deliver, but I'm not in any kind of hurry. :-)
Technical note 2: The out-of-print books in my wishlist should probably be bought elsewhere and not on Amazon. If you're willing to buy any of those, drop me a line, and I'll remove them from the wishlist.

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


Despite all the good things that have been said about VMWare, I find that I'm not really able to use it for testing Syndirella under different OSes. The thing which causes the most OS compatibility problems is drawing - but I cannot rely on VMWare to show me how Syndirella would look when I run it on a real machine with that OS. For example, today I noticed that Syndirella running under Windows 98 in VMWare doesn't show checkboxes in the "Import feeds" list view correctly. I was a bit surprised that no one reported such an obvious problem, and spent some time trying to debug it, but to no avail - I couldn't see any problems with the code. Then I revived Windows Me installed as a dual-boot OS on my wife's computer and tried Syndirella there - and the checkboxes were drawn perfectly.

I guess I should try using Virtual PC instead of VMWare. It is significantly slower, but at least it is something I can trust.

Posted by yole at 05:32 PM | Comments (4) | TrackBack


  • Reverted some of the changes to UtilityLibrary that I made to ensure that device contexts were always disposed correctly. Turns out that I was disposing too early some DCs that I do not own.
  • Rewritten the way Syndirella detects its existing instances. Hopefully this will fix the problems with starting up Syndirella that some users were having.
  • Fixed a RSS parsing problem that sometimes caused the title of a <textInput> element to be picked up as the title of the channel.

Download binaries, sources or installer.

Not much, but enough to prove that I'm alive. :-) Expect more fixes in the next three days - Monday is a state holiday here in Russia, so I'll have enough time for Syndirella in the coming days. And for the e-mail backlog, too.

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

February 19, 2003

First to game

One of the interesting features of the computer game market in Russia is that quite often new games appear in Russia earlier than they do in Europe and the States. Probably the most noticeable case of that was Arcanum - Russians could play the final and complete version of it more than a month before it appeared in stores all over the world. And today I saw ads announcing the availability of Master of Orion 3 (which has the official release date of February 25th).

The reason for that is simple. There is always a delay between the date the final gold build is made and the date it appears in stores. And the pirates don't have to wait - they just grab the gold build as soon as it's available and start printing the CDs. And it looks like the distribution network of the pirates here is quite a bit more efficient than the official one.

And only in very rare cases, and for the most wanted games, pirates publish betas or other early versions. (For example, "Doom 3, Russian and English version" has been available for several months already, but the CD actually contains the leaked E3 demo, and not the complete game. Of course, this isn't advertised anywhere on the CD.) Thus, when you buy a pirated English version of the game, you can be pretty sure that it's the real thing.

However, the majority of the people here prefer buying Russian versions of the game. Thus, as soon as a new game appears, various pirate companies hurry to translate it as quickly as possible - every additional day taken by the translations means many thousands of lost CD sales. And you can imagine the usual quality of such translations, when the whole production cycle of a translation takes three or four days.

Nowadays, more and more games are officially localized and published. Official localizations generally use the same "per CD" pricing scheme as the pirates do, and the prices are just a little bit higher - $3 per CD, as compared to $2 per CD for pirated disks. The quality is, of course, much higher, and usually the pirated releases of a game magically disappear from the stores once the official localization is published. But official localizations take much longer to appear - several months, usually - so most people don't bother waiting for them and buy whatever appears earlier.

(I really want this blog to become more than a list of announcements for new builds of Syndirella. Hopefully there will be much more posts like that in the future. :-) )

Posted by yole at 12:50 PM | Comments (2) | TrackBack

February 17, 2003

More downtime

The reason for today's about 3 hours downtime was worse than usual. It's not running out of prepaid traffic or network connectivity problems. It is some nice people putting 380 volts in our power supply. Luckily, only one thing burned before I rushed to turn off the power switch of the apartment - but quite unluckily, this thing was the power supply unit of our main computer.

I've brought back the site on my wife's PC for now, and I hope to replace the PSU of my old PC within a day or two... if there are some problems with the site, feel free to e-mail me, and I'll find a fix. And I cannot afford not to buy a UPS this time around.

Update: Site back up with a new PSU. Total cost of repairs: $24 and about 4 hours of my time.

Posted by yole at 11:51 PM | Comments (3) | TrackBack

Responses to feature requests

Response to the comments here :

Ricky: I don't really want to add the default browser preference to Syndirella itself. Why don't you and the other people create a separate user account for each of you, and specify different default browsers for each user account?

sub: Searching for text in news items will be implemented in one of the future versions, most likely in 0.92.

Mattias: Possibility to specify a custom stylesheet for news items is also planned for 0.92.

Posted by yole at 10:02 AM | Comments (12) | TrackBack

Textile Test

I have just upgraded to MovableType 2.6, and installed Brad Choate's MTTextile plugin. This is a test of the Textile formatting.

  • I love bulleted lists. I hate entering HTML by hand.
  • WYSIWYG would be even better, but Textile is better than raw HTML.
  • I wonder if tools like w.bloggar could support it.
Posted by yole at 12:34 AM | Comments (2) | TrackBack


Big fat bugfix for yesterday's blunders.

  • Fixed the performance problems with the XP theme support. The problems were caused by the implementation of the list column autosizing, which I based on this CodeProject article. Setting the column width to -2 at every WM_PAINT worked decently with ComCtl 5, but causes a terrible slowdown in ComCtl 6.

  • The button to select the news items font was not working. Again, I forgot that Visual Studio loses event handlers when copying and pasting controls.

  • Fixed the mismatch between toolbar buttons and their icons.

  • Fixed a problem with the URL combo box disappearing when the form is being resized.

  • Fixed a problem preventing correct Windows shutdown when the option "Close button minimizes to the tray" was checked.

  • The unread and updated counts are now stored as member fields in the NewsFeed class. Thus, the values of these fields can now be retrieved without locking the news feeds. This significantly speeds up feed updating (to the level of early 0.9 versions).

  • The Space shortcut and the mouse back button stopped working after a non-HTML document was viewed in the content pane.

  • Various problems could happen after clicking the "Close" button of Syndirella if the option "Close button minimized to the tray" was checked. Should be now fixed.

  • Clicking a link with target=_blank or selecting "Open in New Window" from a link popup menu now always opens the link in the system default browser, and not in Internet Explorer.

Download binaries, sources or installer.

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

February 16, 2003

20030216 performance degradation

If you are experiencing slow drawing performance in 20030216, you should simply delete Syndirella.exe.manifest from the Syndirella installation directory. This removes XP theme support but restores the performance to that of the previous builds.

I'll try to investigate why exactly the slowdown occurs, and make a proper fix which doesn't cause performance degradation.

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


  • Improved detecting of updated items. Now an item is not marked as updated if only the HTML tags or whitespace have been changed, and the publication date (when present) is used as the unique identifier of the item.
  • Made some tweaks to ensure that Graphics objects are released as soon as possible. Hopefully this will fix the resource exhaustion problems some Win98 users have encountered.
  • Added the possibility to configure the default feed settings. Changing a default setting modifies the respective setting of all feeds which used the previous default value for the setting.
  • Syndirella now displays authors and categories for those weblogs which have them. Just as usual, the new fields will appear only for new items, and not for those which have already been loaded with previous Syndirella builds.
  • It is now possible to sort the list of items in a feed by any column in any direction.
  • Added support for Windows XP themes. The drawing glitches that prevented earlier inclusion of the manifest file are now fixed.
  • Added a command line option '-minimize' to run Syndirella minimized.
  • Added an option "Close button minimizes to tray". If the option is checked, clicking the "X" button of the Syndirella window hides it to the tray. To exit Syndirella, you should select "File/Exit" or "Exit" from the tray icon popup menu.
  • Added keyboard shortcut for the feed properties dialog - Ctrl-F10.
  • Added the link to the Syndirella discussion group in the About dialog.
  • Marking all items as read now happens faster and with less flicker.

Download binaries, sources or installer.

From now on, I'll start pushing towards the release of 0.91. I'll stick to the initial plan and leave the new hierarchical feed list code developed by Joe Hildebrand to the next version (the code is not yet finished enough to be integrated quickly and with few problems).

There are two main things that need to be addressed before I can release 0.91.

One is the tray icon animation, which is annoying to many people. I'll have to find some option that, on one hand, provides a sufficiently visible notification that some new items have arrived, and on the other hand, doesn't attract attention when the user wants to focus on something else.

Another problem is feed update error handling. I've already got some complaints from the web site administrators that Syndirella is polling their sites far too often (once a minute or so). I'll need to make sure that fatal errors (like 404 errors) are reported as message boxes and not as status bar notiications. And for intermittent problems, Syndirella should switch to polling once an hour if five update attemps in a row (done once a minute) fail.

Other than that, my main focus will be stability and performance enhancements. Don't expect any major new features after today's build.

Posted by yole at 12:52 AM | Comments (5) | TrackBack

February 09, 2003


James Robertson pointed me to BottomFeeder - another free news aggregator currently on the market. The interesting part about BottomFeeder is that it is written in Smalltalk, which is not quite a common language nowadays. BottomFeeder is cross-platform, running even on such exotic systems as HP/UX and SGI - but that is also its main downside. It is not too hard to create a cross-platform UI toolkit, but it's much harder to create one which obeys all the UI conventions on all the platforms which it supports.

So, here is the log of my experiences with BottomFeeder. Sorry if I'm being too harsh in some places. But in fact, I'm trying to hold myself to the same standards when doing Syndirella development. If there are any similar problems with the Syndirella UI, feel free to tell me about those - and feel free to sound as harsh as you like. :-)

First, the download is quite large - more than 5 megabytes. On one hand, the .NET Framework is four times bigger, but on the other hand, you need to download it only once, and not with every update of Syndirella. Does Cincom Smalltalk have a way to separate the application from its runtime?

OK, it starts with no problems. I take a look through the menus... well, quite a lot of options here. I wonder who would need to use all the four kinds of "save settings" and "restore settings" commands... shouldn't this be done automatically and transparently for the user?

Looks like BottomFeeder supports OCS, so bringing in my subscriptions from Syndirella should not be a problem. I export the OCS file from Syndirella, go to BottomFeeder, right-click the "Feed Lists" icon and select "Add Feedlist..." Oops... it prompts me for an URL, but I want to import from a local file. After some guessing, I make the file:/// URL for my feed list, switch to BottomFeeder and press Shift-Ins to paste it to the dialog. Oops... nothing happens. They did implement the standard edit box popup menu, but forgot about the shortcuts.

OK, I paste the URL anyway... "Unable to process feed!". Let's see what went wrong. I go to Help / View Current Error Log... and see a non-resizable window with no horizontal scrolling. Do I have to export the log to a file, so that I could read the complete messages? Anyway, it's clear that probably I need a real http: URL, not a file one.

I put the OCS file to my local webserver and enter the real URL. OK, now it shows a feed list with 45 feeds.

First thing I see: it fails miserably to process Cyrillic feeds. Only squares instead of Russian letters. So I wouldn't be able to use BottomFeeder even if I wanted to.

Next impression: it shows "(rss0.91)" after all the feeds. Why do the users care? Wouldn't it make more sense to show the unread item count, or some other useful information?

The list of items is quite inefficient in its use of the screen real estate. Why all the borders and padding? Why is the "Item Title" column by default wider than the pane containing the item list? Also, this may be subjective, but I do not think that it's really important to waste some more screen space on the latest update dates.

(Update: There is an option not to show the table, but that hides the item dates. Quite a typical thing - instead of implementing one good behavior, the author allows the user to choose which of several bad behaviors is less bad than the others.)

The HTML browser is more or less OK... but the cursor doesn't change when pointing to a link. At least it does show a tooltip with the link destination. All the links are opened in the external browser, but looks like it is not determined quite correctly. My default browser is NetCaptor, but BottomFeeder opens new IE windows instead of new NetCaptor tabs.

(Update: There is an option to do all the browsing in BottomFeeder, but it's quite hard to do any kind of browsing with no Back button and no popup menu to replace it.)

Out of habit, I tried to press Space... of course, it doesn't move to the next unread item, but it does something strange instead - it just removes the focus from the selected item and clears the item text pane. Pressing Space again brings the focus back. Why is that needed?

Clicking on a feed which is not yet loaded produces no feedback on what the program is doing. If the feed is slow to load, it may seem that the program has hung, or something.

Even though I am a developer of an RSS reader myself, I don't understand what is "Run Server Interface for Feed Gathering", why is that different from "Run Server Interfaces Compatible with Other Tools", with what other tools it is compatible, and why one checkbox is checked by default and the other one is not. And there is no help or anything to guide me.

(Update: No, there is actually a help file, and a description of these settings. I wonder why the authors created yet another standard for subscription icons, and did not stick to using the Radio standard. Just think of how many icons each weblog would need to have if every single aggregator invented its own subscription standard.)

The "Apply" and "Close" buttons in the settings dialog are located on different sides of the dialog. Is it an UI standard on some platform? On the platforms which I have experience with, the standard recommends placing the buttons next to each other.

The content:encoded RSS element is not supported, so on many feeds I see only excepts instead of full item texts. And for dive into mark, I see nothing at all. The error log shows some XML parsing error, but I can't see the full error text, so I don't know what's the problem with that.

So, I could continue for a while more, but I think it's enough for now. :-) And even functionally, BottomFeeder doesn't have many advantages to Syndirella. It does have a tree view of the feeds, it does sort the feeds by name, it does have a preference for automatically following links in items with empty descriptions, but that's about it. And it doesn't even support RSS autodiscovery.

Sorry again if I'm being too harsh, and I do hope that the BottomFeeder authors will be able to correct most of the problems that I've complained about. But for now - well, see for yourself. :-)

Posted by yole at 11:15 AM | Comments (7) | TrackBack


  • The changes to the locking code introduced in the previous build were incorrect, causing people to have deadlocks and other problems. These problems are now corrected.
  • Syndirella automatically backs up its data file, and automatically loads the backup if loading of the latest version failed. Also, when saving data, it saves to a temporary location first, and replaces the real file with saved data only after the save has been successfully completed. This greatly reduces the probability of losing all the Syndirella subscription data in case of a crash.
  • Removed the "unsupported version" checks from the data loading code. Now it should be safer to move from a newer build of Syndirella to an older one.
  • Proxy authentication support. You can enter the proxy username and password in the Syndirella preferences dialog. Note: the password is stored in the settings file as plain-text, with no encryption.
  • The handling of the isPermaLink attribute of the <guid> element was totally broken.
  • Integrated rODBegbie's patch for changing the tray icon tooltip text.
  • Added a menu command to mark all items in all feeds as read.

Download binaries, sources or installer.

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

February 08, 2003

Crossing off

Sam Ruby gives his list of reasons why he likes the Radio aggregator better than Syndirella. Here's my list of responses.

  • Accessing subscriptions from outside the program: I actually plan to implement support for the Radio aggregator API. But for now, there is quite a lot of more urgent problems and requests, so the subscription control API will have to wait for a couple of versions.

  • Control-clicking on links: I will support some way of clicking on links that will force them to be opened in a new window. Looks like Shift-clicking is intercepted by IE, so I will need to use something else. Middle-clicking would be certainly good, but a bit harder to implement.

  • Making the post author more apparent: I will add a more visible display of the item properties (author and title) above the item text itself. I haven't yet decided on the implementation strategy yet (either add that directly to the HTML text and allow restyling with custom stylesheets, or add a separate pane like the e-mail clients do).

  • Feed sorting: Coming in version 0.92. I do not want to implement something temporary now, because I would have to scrape this code after 0.91 is released and the new feed list implementation goes in.

  • Reviewing today's items: Two things are coming here. First, Syndirella will probably get the ability to show an aggregated list of all posts in a group (or in all subscribed feeds). Second, it will be possible to mark an item as "permanent" and to see the list of all items with this mark. But both of these will have to wait until 0.92.

  • Marking all items in all feeds as read: Coming in 0.91.

Come back in a month or two, and you won't be disappointed. :-)

Posted by yole at 10:51 PM | Comments (5) | TrackBack

February 06, 2003


Some long-awaited fixes today.

  • Support for RSS feed languages. The language is now parsed from RSS feeds, loaded and saved in OPML and OCS files, and shown in the import preview dialog.

  • It is now possible to sort the feed list in the import preview dialog by title, language or description.

  • Another fix for the "Collection was modified; enumeration operation may not execute" problem. Hopefully the locking is now fully correct.

  • Fixed a crash which occurred if Syndirella was started through a shortcut in minimized mode.

  • Another attempt to fix the timer problem: "System.InvalidOperationException: Handle is not initialized. at System.Runtime.InteropServices.GCHandle.Free()"

  • Fixed crash after viewing a non-HTML document (for example, a Word document or a PowerPoint presentation).

  • The OK button in the feed preview dialog is now anchored correctly.

Download binaries, sources or installer.

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

February 05, 2003

To Helsinki

I will be going on a business trip to my employer's office, from Thursday till Saturday. Most likely, I will not be reading e-mail during that time.

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


  • OCS Export. Contributed by Victor Sanchez.
  • Rearranged somewhat the "File" menu.
  • Incremental search in the feed import preview dialog.
  • Improvements in error handling when importing feed lists.

Download binaries, sources or installer.

That's not much... too bad I don't have time for more. :-(

Posted by yole at 01:16 AM | Comments (2) | TrackBack

February 02, 2003

Mozilla support in Syndirella

Thomas Gage asks why I want to support embedding Mozilla instead of IE in Syndirella. My answer is simple: the users want that, and it is simple to implement. This is a low-priority feature for me, since I don't use Mozilla myself, but if someone implements it and sends a patch, I will be happy to integrate it.

Posted by yole at 10:02 PM | Comments (3) | TrackBack


A productive day, indeed...

  • Encapsulated the browser code (with all IE-specific hacks) in a separate control, making it possible to reuse the control within Syndirella and to support an alternative Mozilla implementation in a later version.

  • As a side-effect of that, the Back and Forward buttons are enabled more correctly.

  • The main part: Import of channel directories in OCS and OPML formats from the Web, with the possibility to browse the directory and select the feeds you want to import.

  • Possiblity to import feeds from My.Yandex, MoreOver, NewsIsFree and MyRSS directly from the menu.

  • Support for the blogChannel RSS module. If a weblog contains a link to an OPML file with the list of feeds it is subscribed to, you can now view this list of subscriptions from within Syndirella. Tested on scripting.com.

  • Several improvements to the OCS import code.

Download binaries, sources or installer.

The import preview functionality still needs a lot of polish (search, language filtering, error handling). All this will be implemented in the following builds.

And after that, I think it's time to start pushing for the release of 0.91. The only major piece of functionality planned for 0.91 that is not yet implemented is the possibility to configure the default settings for feeds. Besides that, only bugfixing work remains. I think that it will be possible to release 0.91 final in two weeks.

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

February 01, 2003

Archive navigation

Dorothea complains that no one likes her style of archive navigation.

Well, in my opinion, weekly archives are the most convenient reading form for weblogs that do not provide full post texts in their RSS feeds. I read Dorothea's feed from Syndirella, and it is very easy for me to click the link on the first unread post, read all the new posts on a single page, then return to Syndirella and hit Ctrl-M to mark the feed as read. It is made even better by the fact that the archive page lists the newest entries in the bottom, so I can use the natural top-to-bottom reading rather than the ugly back-and-forth scrolling required for reading the front pages of weblogs. If every post was on a separate archive page, it would involve far more clicking for me to read all her latest posts.

Posted by yole at 01:39 PM | Comments (0) | TrackBack


An important achievent today: My.Yandex, the only RSS syndication service in the Russian Internet that I'm aware of (maybe the only one that exists), now exports its list of feeds in the OPML format. This is especially exciting because this finally makes Syndirella useful for Russian users - most of the sites which have the feeds do not advertise them in any way at all, and I myself was not aware that so many sites actually have feeds.

Of course, quite a lot of RSS advocacy in Russia still needs to be done - writing and publishing articles, pushing webmasters to fix their broken feeds, to add autodiscovery support, to add feeds for sites which don't yet have any... However, we do have a base to work from now.

So tomorrow I'll implement my part of the agreement with Yandex - support for importing OPML files from HTTP sites, with the possibility to preview the feeds and select the ones that should be imported. This will, of course, open the doors to other major RSS feed directories like MoreOver and NewsIsFree.

So, a lot of exciting stuff coming soon. And now - sleep! :-) And quite a large backlog of e-mail to answer tomorrow.

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