* Snownews 1.5.12

Changelog and development journal - RSS

Upcoming changes

I've received some feedback recently (and patches) which will be incorporated soon(ish). Fraser Tweedale sent me a patch to improve the keybindings handling so you can use more vi-like bindings. The linked patch applies against 1.5.12 and will be incorporated in a new release.

Many people asked about auto-update of the feeds. I'll see about implementing that in a future version, too.

All feedback is still read even if you didn't receive an answer, yet. I prefer to answer those with more then "Thanks, cu". That's why it sometimes takes "some" time.

Script repository online again!

The Snownews/Liferea script repository is fully operational once again. So hop over and add/update your scripts!

Version 1.5.12 released

This version fixes the following things and probably even more things. It also adds OpenSSL as a requirement.

Snownews and 64bit

Right now snownews doesn't like 64bit very much. The included MD5 function, that is used to calculate hashes of RSS items does not work quite right. The sympton of all of this is: every article is unread again after a feed gets updated. *Boooooo!*… you say. And rightly so!

Sooo, after some testing and when I got HTTP digest auth working again, all of this will be fixed in 1.5.12. Alternatively, if you are on a 64bit system, here's a patch against 1.5.11 that makes the read status function thingy work again. With it comes OpenSSL as a new dependency.

File: snownews-openssl.diff 64bit read status fix

Version 1.5.10 released

2008-07-28, 09:40 GMT
- shift+t now force reloads a selected feed, ignoring the last modified value
- Added a lot of OpenBSD supplied patches (Martynas Venckus)
- net-support.c: HTTP header only needs to be ASCII in the token
- conversions.c: Determine output charset with nl_langinfo()
- xmlparse.c: Convert feed title to target charset, too. Should probaly be in interface.c
- main.c, interface.h, interface.c: Add a signal handler for resizing to work on many other ncurses implementations

There are still some changes missing, but I figured it won't hurt to make two releases. The MD5 can be moved to OpenSSL. After all OpenSSL is available everywhere anyway nowerdays. There was also a patch to use a non-blocking API in the networking code, but it had some really strange side effects like only partially downloading a feed which I didn't quite unterstand so it's just removed for now.

Version 1.5.9 released

2008-02-17, 08:58 GMT
- Added Ukrainian translation (Anton Lytvynenko)
- Include Debian patch #403812, FTBFS on GNU/kFreeBSD
- Mark unread now toggles read status, Debian bug #394312

Version 1.5.8 released

2008-01-09, 08:15 GMT
1.5.8 has made it… somehow. Well actually this is just a small change which adds two new translations and build fixes as well as moving the manpages to share/ hierachy.

In other words, I have lost track of the changes. ;)

I'm currently going through the Debian bugtracker and integrate most of what's pilled up there.

Version 1.5.7 (Woger the lost vewsion) weleased

2005-06-05, 10:21 GMT
Bwethwen and weadews of this weblog. Today on this wondewful wainy day, a new vewsion of our supewiow weblog weader shall be weleased. This vewsion's changes will be wecited by ouw public welations chief, Woger the Welease Weasel. Woger?

*clears through*


Thank you vewy much Woger. So, you heawd his wowds. Go download, go have fun!

Mailing list

2005-04-23, 16:56 GMT
Suggested often, done never (until now!). I've created a mailing list for Snownews. If you want to talk, demand, flame me or other Snownews users, join the list. ;)

This also acts as the main support address from now on. If you want to assist other users who have problems, you're welcome, too.

Instructions are at http://kiza.kcore.de/software/snownews/support.en

I <3 zer0s

2005-02-21, 22:29 GMT
Yes, this project is still alive if you haven't noticed. Just moving with Warp 0.002 at the moment. ;)

It seems that some, OK one, platform does not like the code

numobjperfeed = (COLS-titlestrlen-2)/(double) numfeeds;

if numfeeds is zero. Burns and dies with a SIGFPE and claims a divide by zero, figure that! Anyway, patch to the rescue.


This only happens if you have a completely empty feed list and was reported by Antti Vähä-Sipilä on an alpha platform afaics.

Last post of the year

2004-12-24, 11:47 GMT
The year we call 2004 is nearing its end and Snownews will see its third year of existence in a couple of days. Much has changed during this time, hopefully always to the better. Well, at least comparing to version 1.0 there was some improvement I would say. ;)

If you're still looking for somebody to do a favour... it's christmas time in case you haven't noticed the madness all christian/western countries on this planet have fallen into, you can donate something (with that Paypal thingy) or you can send me iTunes gift certificates. But for the German store if possibe please. That would be very nice.

Finally, like last year Snownews contains a new christmas easter egg (now that's a strange word) you may have already noticed. At least if you have version which is almost a month old now. If not, pester the guy who made the package for your distribution. I made it to level 11 without cheating (which is not that overly difficult if you're creative), see if you can get a higher score. The game will be playable on 24th, 25th and 26th. After that time create a file ~/.snownews/santa_hunta to play again. Happy hunting!

These shall be the last words of the year. Have a nice and quiet time and see you next year.

Version (it's-all-the-beta-testers-fault) released

2004-12-09, 12:09 GMT
I received three complaints about crashes with typepad.com feeds which happened because of an empty <dc:date> tag. Looks like strptime() does not enjoy NULL pointers... as always. So try again with

Version 1.5.6 (last-of-this-year) released

2004-12-08, 14:30 GMT
So, what's new? The publishing date of an item will be calculated correctly if the time between post and now spans over new year. Well, I hope it does. Snowsync has been added to the distribution and documented in the manpage. The script requires XML::LibXML (which opml2snow already depends on), XML::LibXSLT and libwww-perl.

Using more nifty standards

2004-11-29, 21:41 GMT
I've corrected the printing of spaces at the end of a "string ". They are now chopped off.

I've added an "Accept: mime/type" header to the HTTP requests. Snownews will now send "application/rdf+xml,application/rss+xml,application/xml,text/xml;q=0.9,*/*;q=0.1" in that header. In a theoretical, perfect world this ancient technology could obsolete feed autodiscovery. A server that has index.html and index.rdf automatically would serve the right document (if requested as index without extension) to the right client. Ah well, maybe this will be of any use one day.

Someone sent me a feature request to make it possible to mail articles easily. I can see the use for this feature, but it may be difficult to achieve. If there is any way to launch your mail program from the command line and passing subject and body of the message it would be doable. Thunderbird seems to have a (not yet documented) command line facility to do just this, but I fear this is generally impossible without tons of platform specific code.

In other words: I think I should release what has changed as a new version. Just need to write up that annoying documentation stuff for snowsync. ;)

Version 1.5.6-beta1 (I-need-a-new-codename) set loose

2004-11-21, 20:36 GMT
I've added support for dc:date (Dublin Core namespace) and pubDate. If a feed contains any of these Snownews will show the date along with the feed.
I have also created a namespace for Snownews in which all internal tags in the XML feed caches are now put. If you don't have any idea what this means: if you start 1.5.6-beta1, earlier versions will not be able to load read/unread status from the cache file anymore. The new version, however, will read old cache files without problems.

http://kiza.kcore.de/software/snownews/download/beta/snownews-1.5.6-beta1.tar.gz [.sign]

The displayed date format is pretty, don't ya think? ;)

More syncing

2004-11-19, 22:39 GMT
Syncing subscription lists between different computers is now finished. If you want to try it out write me a mail (kiza@gmx.net) to get access to the storage server. I will release the storage server later which you can use to store the sync information on a different web server than mine.


2004-11-17, 18:05 GMT
The sync feature is now mostly finished. All that is left to do is some work on the storage server, mostly security stuff, ensuring that nobody overwrites an uploaded file not belonging to her/him, etc. This will be used in a different project later so thanks for helping with the beta testing when I release it for Snownews! :P

I've also told the signal handler to catch more signals. Closing the terminal window, logging out or having screen kill Snownews will now save all settings.

Take some chilli with your chicken

2004-11-12, 10:34 GMT
I couldn't have explained it better so I just link to Lars' posting in the Liferea forum about an IMO minor security issue that might also affect your snownews installation. If you are using Snownews from day 0, please run "chmod -R go= ~/.snownews/" onto your config directory. As of version 1.4.something Snownews sets umask to 0077 for all newly created files. Older files retain their umask if it is different.

There was a crashbug discovered in the NetBSD port, see bug #28216 which was fixed by this patch: http://kiza.kcore.de/software/snownews/download/patches/filter_current- if you really want to use the "filter current" function on a completely empty feed list. ;)

I changed the code that determines new items. Snownews will now check an items title, link and guid to determine if it has already seen an item (and to restore read/unread status). This will mark feeds that contain a guid completely unread the first time you use the new version.

I'm working on a sync feature that keeps settings and feeds on different systems in sync. This will consists of the following parts:

The logic will be very simple. It will simply create a tar of the config directory, encrypt it with your PGP key and put it onto a web server. HTTP auth can be added for some more security.

Finally: What was the weirdest place you found spam? Apparently some things, AOL, never change. I don't know what motivates these guys, but some jerk came from AOL (search), searching for "new account", which spits out the Extensions new account page as hit #11, don't ask, and started creating "some" accounts. (S)he was even bright enough to figure out that a hyperlink will be created from <a href="homepage">real name</a>. After that, however the bright flash of intelligence left and (s)he forgot to actually add a script that displays the whole thing on the page. Why... just why?

Highly insignificant update

2004-10-31, 23:38 GMT
The package had wrong compiler flags. -g was switched on while -O2 optimizations were off. Not a big deal, but I replaced the package with a new one.

The next version's configure knows Cygwin and the Makefile knows DESTDIR. Thanks to Yaakov Selkowitz for this and for the Cygwin ports. :)

Version (Hotfixed Chicken) released

2004-10-30, 12:47 GMT
Obviously I failed to understand the arcane knowledge Unix signal handling is made of. 1.5.5 creates zombies and fails to exit (hangs) at least on OpenBSD. But I still claim that this is a bug in the OS. Anyway, this release fixes just this one problem. If 1.5.5 works fine you don't need to upgrade.

Version 1.5.5 (Yellow Chicken) released

2004-10-29, 17:47 GMT
I've fixed quite an amount of things in the HTTP and related code. Torturing code with randomly generated crap is a fun method to find problems. ;)

Cache file handling was also rewritten to avoid problems with filesystems that don't like binary data in filenames very much. I also fixed this on Cygwin where it was totally broken. Snownews may now generate different hashes for the filenames than before so some feeds may appear completely unread after upgrading in certain cases.

Overall this release touched a lot of core code, should've probably been 1.6.0. Ah well, have fun with the yellow chicken!

libxml2 vulnerabilities

2004-10-28, 11:24 GMT
There are several vulnerabilities in libxml2 that might also affect snownews. You should upgrade to libxml2 2.6.15. If you're using the binary packages, please redownload the latest version. I've recompiled them against a new libxml.


OPML export

2004-10-22, 16:05 GMT
I added support for exporting the subscription list to OPML. This is done via the opml2snow utility. You can find a new version at http://snownews.kcore.de/download/patches/opml2snow.

Running "opml2snow --export" should print an OPML file with your subscription to the console. See "opml2snow -h" for more options. I haven't found an overly detailed "specification" of the format, apart from the vague rantings on Mr D. W.'s pages, so I just made it produce the same output NetNewsWire does. Importing works fine there. YMMV so please report failure or successes.

New URLs

2004-10-21, 17:04 GMT
As you might have noticed all URLs have changed. The whole page was moved from http://home.kcore.de/~kiza/ to http://kiza.kcore.de/. All old URLs continue to work of course, just redirect to the new location permanently. This promptly triggered a crash in snownews on platforms that don't like snprintf("%s",NULL) when running the "check for new version" code at exit. It's fixed for the new version and for all existing versions with some crufty, not really working Apache URL rewrite rule. Versions older than 1.5.0 might not be able to determine if a new version is available anymore. But if your version is that old it doesn't make sense anyway. ;)

Pipes & gzip

2004-10-20, 17:22 GMT
What do Unix pipes have to do with gzip? Nothing of course, but I'm too uncreative to come up with better title. ;)

I've changed the filter code to use pipes instead of a temp file. Previously Snownews would write a file /tmp/snownews.tmp and popen() that to process filter scripts. Pretty lame. It now uses pipes to communicate with the forked child process. Took a bit of black magic to find out how not to create zombie processes out of the forked scripts.

The decompression code has been rewritten. Apparantly there is a bug in zlib <= 1.1.4 that makes it not return FEOF or something like that after decompression is finished. This will result in an "zlib error: -5" message in Snownews. The fix is to just ignore zlib and return if the input buffer is exhausted. Alternatively, upgrade to zlib 1.2.x.

On a side note, while hunting for the above mentioned problem I found out that (source: prototype for inflateInit2() in zlib.h) "windowBits can also be greater than 15 for optional gzip decoding. Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection, or add 16 to decode only the gzip format". Add 32 to int windowBits and the function will also decode the gzip header for you? Now wasn't that abvious?

Snownews vs. Gmail

2004-10-06, 10:52 GMT
Since a couple of days Gmail added an Atom feed for your inbox that contains new mails. This seems to be a nifty feature, but it doesn't work with snownews since they require HTTPS. But of course that can't stop us from using it with snownews. ;) Here's how to get it working:

Download the patch at http://home.kcore.de/~kiza/software/snownews/download/patches/snownews_vs_gmail.diff and apply it on top of 1.5.4 (patch -p 1 < snownews_vs_gmail.diff). This is needed to make execurls together with filters work correctly. Compile, install.

You need to download an atom2rss converter from the extensions page. I assume that you are using wget (compiled with SSL support) and xsltproc from libxslt.
Subscribe the URL "exec:/usr/local/bin/wget -q -O - https://USERNAME:PASSWORD@gmail.google.com/gmail/feed/atom".
If asked for a script to use with this feed, enter "/usr/local/libxml/bin/xsltproc /usr/local/share/snownews/atom3rss -".
(Edit the program paths as needed of course.)

Things fixed by the patch:

Oh, and if you need a Gmail account to test with, just ask. ;)

It's 1.5.4 time!

2004-09-29, 16:48 GMT
Here's 1.5.4 with just a few changes over the mysterious 1.5.4-beta2 version.

More translation stuff

2004-09-24, 17:22 GMT
I've put up a tar.gz from the main webpage here... there -> http://home.kcore.de/~kiza/software/snownews/download/snownews_web-20040924.tar.gz. If you want to translate the webpage into your language download this, add a filename[s].LANG.shtml for your translation and send me back the newly _translated_ files. This includes only the main page, not the extensions page. That should probably be translated as well, but I want to avoid non-English submissions on the page so it may be a good idea to have it in Universal Language only. ;)

Since when did I release 1.5.4-beta2?

2004-09-23, 16:07 GMT
That was my first though upon finding an ebuild that was sneaked into Gentoo of above version. Either one of the translators leaked this version or some people keep reloading the download/beta/ directory on my server. ;) Either way, this version is really to be considered beta. There was a reason for me not to announce it, ya know? ;)

Anyway, I'm waiting for the translations. These really need to be brought up to date. I will also accept offers for translations of the web page. Right now it is available in English, German and Italian. The bottom of the page now shows direct links to localized versions if Apache's mod_negotiate is confused and sends a wrong language. Or if you've misconfigured your browser. Feel free to send me translations, either of the content or already as page.LANG.shtml files. Maybe I will put up a tar.gz of the web server directory itself. Would make translating even easier (= no work for me at all ;) )

RSS news

2004-09-18, 21:05 GMT
Admittedly there haven't been much changes to snownews recently since I was busy with something else. But this is RSS related so I cross post it here as it may be of interest.

Some minor changes, mostly cleanup

The main webpage, at least the most important parts of it, will show up in Italian soon. [edit: as in "there will be an additonal translation of the webpage". Yes, everything will still be English. No need to be afraid and mail me about that. ;)]

But the most useful thing I did recently is probably the mailing list to RDF (RSS 1.0) converter I wrote. See the linked web page for more details and an example feed if you're interested. I called it Snowlist, because mail2rss sounded too lame and generic and now that I used it everywhere in the docs I'm far to lazy to change it anyway. I'm going to put this up on freshmeat soon. Feel free to give feedback or mail me if you got problems with it.


2004-09-09, 14:49 GMT
Here is a beta version for the impatient. 1.5.4-beta1 + sig

I've made the type ahead find case insensitive. Hopefully the strcasestr replacement works fine. It was stolen from somewhere else so don't blame me. ;)

Hey, the TODO list is getting smaller!

2004-09-08, 12:50 GMT
I think the list of changes has grown enough to make a new release. Some of the changes had some destabilizing effects so I held it off for so long. I think 1.5.3 was a nice release. :)

The translations and documentation need a huge update.

Marco Leli wrote a very nice tutorial for snownews [http://impression.altervista.org/]. The only problem with it is that it is written in Italian so I'm not yet sure how to include it on snownews' home page. ;)

Oh, look, something new!

2004-08-29, 16:40 GMT
I've been told that ... I should remove the following sentence. *g*

Anyway, I killed (aka fixed) a lot of items from a giant TODO list. Among them are:

Make yourself happy with a generous donation for the coolest RSS reader on the planet

2004-06-23, 20:52 GMT
Or hottest RSS reader depending on your personal preference.

Somewhere the last days I became the proud owner of one of those nifty Gmail accounts. Unbelievable that someone finally made a webmail provider that doesn't suck. I love it. =) And you will, too, because I'm now giving out Gmail invites to every donation I receive for software I have written. Of course, Snownews is the most popular. So if you always thought about donating, here is one more thing to convince you to finally do so. Hop over to the (brand new) donations page and do it. You know you want to!

Keep in mind that I don't have an endless supply of invitations. If I get more donations (which is actually the point of this posting *g*) you'll have to wait until I get more invites. The number of them left is on the donations page.

And now to something completely different.

I've ripped apart Snownews' network code. Most of this is just purely cosmetical and cleans up some mess. Though it makes room for multithreading. I will probably add this in one of the next versions which should speed up downloading significantly and allow for continuously updating of feeds in the background.
Translations need a complete overhaul I guess as some of them are starting to get out of date and I was too lazy to keep everything in sync. This also needs fixing for the next version. There is also a new Brasilian Portuguese translation Douglas Campos sent in.
Stay tuned for slow but steady updates.

Problems with php wiki feeds

2004-06-17, 11:50 GMT
PHP wiki feeds that are transferred compressed use an invalid compression format. They don't work and result in "ERROR: Invalid magic bytes for GZIP data". The only way to make it work is not to use compression, or to fix the wiki code. If you cannot live without such a feed apply the patch http_non_gzip.diff which switches off compression completely. Will result in slightly slower downloads.
It seems that the problem was already submitted in their SF bug tracker. Maybe upgrading the wiki on a site with the described problem just fixes it.

The "Do Something Stupid" contest

2004-06-08, 12:28 GMT
I get a strange satisfaction in torturing software so I might as well do it with snownews. I downloaded syndic8's directory and added all(!) feeds. Converting the OPML list to my own format took a 130MB Perl process about 5 minutes on my Athlon XP 1800. The thing is slow as hell (Xpath parser) but what I did was quite evil anyway. ;)

The 13MB OPML list ended up as a 2.5MB subscription file for snownews. It contained 54380 feeds. It takes about 2 minutes to get past the "Reading configuration settings" part which suggests that excessive strsep usage is very slow. After that I cancelled downloading of the feeds, since it would probably take a day or two. I grabbed about 1000 and filled the rest of the 53000 cache files with the telepolis.de feed (it's a rather small feed, just headlines, but I didn't want to waste a couple of GB on cache files. Plus ext3 was already crawling when I created all the files.). With that preperations I launched snownews. The actual loading/parsing of the cache went suprisingly fast. It ended up as a 130MB process and it still was perfectly fast. Well, at least with a 1533MHz CPU. The RAM consumption is pretty heavy, though.

Feel free to test (and brake) other things and send me the results. :)

Version 1.5.3 released

2004-06-04, 16:46 GMT
Ok, here is the final version. Finetuned the configure script thingy and the broken iconv conversion in -beta1. Snownews will now complain wildly if you have a potentially unsafe default browser set. See the new FAQ entry #2.4.

Boldly released as stable so the new build system gets more widespread testing. ;)

New stuff plus a beta version

2004-08-29, 15:43 GMT
I figured I could release something new once in a while, just didn't have enough time. Download: 1.5.3-beta1 [sig]

This version contains the following changes:
Prevent launching smartfeed:// URLs with the browser.
Configurable enter key broke type ahead a bit. Think I already mentioned this some time ago, no?
The "Downloading [feedname]" always shows the correct feed name now.
Finetuned display of HTML only feed descriptions a bit more.
Changed URL in user agent string to http://snownews.kcore.de/.
Error messages are now in full colour. :)
Many more errors are now written into the error.log file.

And the following brand new stuff:
Compiling now works with "./configure; make; make install" and does so on more platforms out of the box. This is not autotools, however.
All docs have been (hopefully) updated to reflect this change.

Some (who actually use it) might already have noticed that the script repository page changed a bit. To the better I hope. ;) Script descriptions generate better HTML code now, automatically placing line breaks and making links clickable, etc.

Updates to the extensions page

2004-05-19, 21:58 GMT
Now that the script repository gets some attention and others are submitting scripts I should polish the UI a bit. It is now possible to sort the whole listing. Just click on the table headings to sort by this column. I will also add a search function, but that requires a bit more time so it will follow a bit later.

If you have more complaints or ideas for the page, drop me a mail. I'm quite pleased that it worked with so few problems (none ;) ) from the beginning. If you have encountered a problem, now's the time to complain.

Repaired the changeblog

2004-05-01, 12:26 GMT
Looks like I wiped file creation dates when I moved my whole page to a new design some weeks ago. All changelog entries were dated April 19th. Fixed that again.

But I really don't understand what Perl is doing here. I used mtime to determine the date from the file itself before. Copying them onto a new location obviously destroyed that date information. So ctime is probably the thing I want. Supposed to be field #11 in Perl's stat() function. But instead I have to field #9 which is atime according to Perl in a Nutshell. Am I missing something? 8)

Extensions feed moved

2004-04-30, 21:16 GMT
Moved the extensions feed to releases.rdf to make Apache send the correct mime-type. Also updated URL in last entry.

New RSS feed for the extensions database

2004-04-30, 21:12 GMT
I've added an RSS feed that lists all new additions and updates on the script repository. The feed is at http://home.kcore.de/~kiza/software/snownews/snowscripts/releases.rdf. It will be automatically updated whenever a new script is added or an exisiting is updated and lists the 20 recent activities on the page.

The inevitable list of bugs that slipped into 1.5.2

2004-04-25, 00:37 GMT
Apart from some smallish things this seems to be a pretty good release. Ha, famous last words I guess.
I totally broke compilation on Solaris. Which was expected as I removed the Solaris specific makefile and forgot to put some replacement into the package. 1.5.2 compiles fine if you add -DSUN to the CFLAGS and and os-support.o object file to the line where all the other obj files are. Yeah yeah, or just mail me that it doesn't work. ;)
Type ahead find does strange things if you press the 'l' key (with the default keybindings). Someone suggested to make a configurable keybinding for the enter key. It defaults to 'l' and interfers with type ahead, selecting the item if you press the key.
I fixed the extensions repository page. The downloaded script had DOS style line ends. Screw you stupid CGI! Worked around that; all exisiting scripts were automatically updated.

Using scripts to generate RSS out of webpages on the fly seems to become quite common. Other readers add this functionality as well, but Snownews was one of the first to really support it I think. Yep, /me rulez. Thanks for reminding. ;)

Version 1.5.2 released

2004-04-14, 10:19 GMT
Not many new stuff since the beta1 version. Using filter extensions works fine now, if you subscribe a feed that cannot be parsed you'll be asked if you want to use a filter for this feed (=unsucked the add a filter UI).
There was a problem with accessing memory that didn't belong to us in xmlparse for strings exactly one byte long.
The feed download function behaved strangely sometimes due to some thread safety issues. Never affected Snownews, only Liferea. Just mentioned for completeness.
Snownews should also start up a bit faster now if you have many feeds and a really slow system.

Almost done

2004-04-08, 10:55 GMT
Though I'm not sure if the next version should be 1.5.2 or 1.6.0. From a user/new features POV it should probably be 1.6.0, but since most of the plugin code was already in 1.5.0 (just not used) it should be 1.5.2 code wise. I probably let the mighty D20 decide.

Recently fixed:
Titles are now stripped off every newlines and tabs which sometimes disturbed the UI.
The new headlines feed now shows which feed an items belongs to even if the item doesn't have a title.
Added Russian manpage.
Checked if opening of the cache file succeeded and if not for some reason don't write data into nirvana and get punished with a segfault.
Don't allow the creation of files with anything but numbers and letters on Cygwin since DOS + some GUI (=Windoze98) doesn't like that.
Securely create the temp file that is used by the filter plugins.
Killed a couple of calls to the main quit function since it's rather pointless to exit just because some stupid syscall failed. (Note to self: add an actual error message).

Recently improved on the extensions webpage:
Added more feedback to the account creation page. Now complains in big, red, blinking letters (ok, it's actually only red) if a required field was not filled out.
Added ASCII wizard's hat to the new account wizard. Don't ask.
Allowed more characters in the long description field for submitted scripts.
If you still have problems with the web interface, please let me know.

1.5.2-beta1 bugfixes

2004-04-06, 12:32 GMT
Unfortunately 1.5.2-beta1 is a bit crashy if you use the (New headlines) pseudo feed. Something's stompin on my internal database which leads to inconsistent calculations of unread items in the new headlines feed and the rest of the program. And ultimatively to a segfault if you open the feed in this state. The patch below fixes this. Also fixes obscure issues with smart feeds + caching, makes HTTP auth via proxy work and fixes bugs with the feed reordering in the main menu. Moved feeds had some of their internal data mixed up with others. Specifically the last HTTP status reply, last modification date and the data contentlength.

http://home.kcore.de/~kiza/software/snownews/download/patches/patch-smartfeeds-fix.diff Apply onto 1.5.2-beta1.

Plugin repository (beta)

2004-04-04, 20:18 GMT
I've finished the webpage that goes together with the plugin architecture mentioned in the last posting. The page is shared between Snownews and Liferea since both apps use a similar interface to external scripts. You can visit the page at http://snownews.kcore.de/snowscripts/. Please read the documentation available on that page if you're interested in this feature and feel free to download anything and add your own extensions. :)

The script repository is beta code right now. If something brakes, please let me know.

1.5.2-beta1 download link

2004-04-03, 09:59 GMT
Oops, here is the actual download link for the things mentioned in the last posting. (Note: don't only check the speling, check the contents of what you write!)



2004-04-03, 00:25 GMT
Reports about me having been eaten by a grue are highly exaggarated. Anyway, here's the list of things changed recently:

The enter key has now a configurable key binding. So if you want to have 'l' to select an item, it should work now.
Multi byte characters are now handled correctly. Well, everywhere except in the article (if provided) itself since the word wrap function still doesn't like multi byte characters. Should work everywhere else if you link against libncursesw.
I rewrote all of the build system. Nothing fancy, but it's one single Makefile now and does not depend on GNU make anymore. Building is probably broken on Solaris atm.
A feed that contains all new items from all your other feeds can now be added by pressing 'H' in the main menu.
Filters and external feed sources work now.

External sources:
Write a script/program that outputs RSS and you can add it via an URL exec:/path/to/script. Snownews will execute it everytime you refresh the feed/all feeds.
In short: [your script] -> RSS -> Snownews

You can subscribe to Atom, any other syndication format, heck even HTML pages with this feature. All you need is a script that converts whatever resource from the web to a valid RSS document. The external script must accept data via stdin and write valid RSS to stdout. Snownews will execute this filter everytime it downloads a resource from the web. This automatically takes advantage from Snownews' http features (last mod, gzip, auto redirect, etc.). To use this, subscribe anything you want, ignore the parser errors, press 'e' and enter the location of the filter you want to use, refresh the feed.
In short: [resource on the web] -> Snownews -> [your script] -> RSS -> Snownews

Yes, you can combine an external script with a filter. But why? 8)

I will add a script collection page to the main project webpage for the final version. Either with the CGI interfaces I already wrote or via a Wiki, not sure yet.

New translations and packages

2004-03-10, 11:30 GMT
Dmitry Petukhov sent a Russian translation and also pointed to some problems in UTF-8 character handling which only happens for feeds that use multibyte characters.
Yaakov Selkowitz did a Cygwin port which is available on his SF page sf.net/projects/cygwin-ports.
I just noticed that there is a crash in type ahead when using it in the feed overview and it contains items with no title. Fixed for the next version.

Version 1.5.1 released

2004-03-07, 22:04 GMT
This is just a collection of bugfixes that have been done since .0. Mainly to fix a weird crash on Solaris that probably existed from day one and to make snownews behave correctly again with compressed http content.
New keybindings, to jump to the first and last feed and first/last item in a feed have been added. They default to 'w' and 'W'. The keybindings and color configurations are now updated correctly on the fly if a new version introduces new settings.
As noted earlier you can now select multiple categories to filter for. They are all added up if you select a new category while another one is already applied. A max of 8 categories can be applied this way. Filtering can be done by combining them with logical AND or logical OR. The default toggle key to switch this is 'X'.
The external filter/pipe through filter stuff is not finished yet. Some code is already there. If you want to play with it write any script/program that writes valid RSS to standard out and add an URL exec:/path/to/script/script.pl. It's unsupported, experimental and probably not working everytime/everywhere, but it should just work fine most of the time. ;)

Categories v2.0

2004-03-04, 14:20 GMT
I've improved the category handling quite a bit. The category configuration UI now doesn't just cover the whole screen, but has a dynamically calculated height. Adding multiple categories to a feed has been fixed so it does not suck anymore. If you now add an nth category you are always presented with the available categories before getting to the free form entry field. Multiple categories can now be selected to filter for. They can be either combined with AND or with OR.

I threw out HTTP deflate code since it was broken anyway. gzip content encoding is supported by every webserver (yes, even IIS) and works just fine.

New 1.5.0 package uploaded

2004-03-03, 20:16 GMT
I've uploaded a new 1.5.0 tarball that doesn't provoke strange errors in some tars. Apparantly GNU tar 1.13.93 is also affected. I added a file named PADDING which is 682 bytes in size and somehow solves the problem. Don't ask. 8)

1.5.0 tarball oddities

2004-03-03, 14:19 GMT
Some versions of tar seem to have a problem with the 1.5.0.tar.gz package. They print out "tar: End of archive volume 1 reached" at the end of extraction. This happens on OpenBSD for example. I have no idea why and what to do about it. If you compare the pgp signature after downloading and it's fine, the package is ok. The extracted data seems to be ok as well, I checked md5 of all files after extracting, so you should just ignore the error. Odd.

Version 1.5.0 released

2004-03-01, 15:27 GMT
With this version the snownews website will get a new URL which is much shorter than previous one. All stuff can now be accessed via http://snownews.kcore.de/ which will redirect to the usual it-hurts-my-fingers! location.

A couple of days ago there was a buffer overflow in libxml2 which affects downloading external DTDs via libxml's internal http client. Please use at least version 2.6.6 of the library! Binary packages are now built with 2.6.7. You should really upgrade to 1.5.0 if you've installed snownews from a binary package.

3:00am changes

2004-08-29, 15:44 GMT
I did a bit more GUI work. From now on only the URL rather than the whole browser command will be shown on the bottom of the screen. It's probably indeed a good idea. Nathan Lutchansky suggested this together with a bunch of other stuff. It also simplifies the code greatly (there go another 100 lines of code) and moves processing of the URLs to a centralized place. URLs will now be shown as the feed specifies them and if they contain some nasty stuff (like "http://bla';rm -rf /;") Snownews will not hide it anymore. But do not fear, it will still catch such attempts. ;)
If a feed has categories defined they will now be shown on top of the screen in the feed overview. It will list all categories in a comma seperated list and this time make sure a too long string doesn't overwrite the program name/version header.

Random stuff:
Slashdot had a story about RSS today and how it may change the information flow on the web. Someone mentioned snownews in the comments. Gives a strange feeling if you find slashdot referrers in your webserver's access log when you have to pay for the bandwith. :P


2004-02-27, 14:42 GMT
The digest auth support should work fine now. It took some time to get it working with permanent redirects (updating the URLs correctly with auth info) and "See other" redirects where the request should always go to the old URL first. The cryptographic quality of the code has been also greatly improved since it now uses /dev/random (or rand() if that doesn't work) instead of 0xdeadbeef to seed the hashing function. Also requests with the same cnonce value are never repeated.

Other minor things:
On startup, if a cache file for a feed gets messed up and is unparsable snownews will try to reload the feed from the network and if that doesn't work just continue. The feed will then be blank (only URL shown) in the GUI. There used to be an abort trap before, but I figured it's stupid to halt program executing just because of a broken cache file.
When downloading a feed the name of the feed instead of the URL is shown. So instead of "Downloading http://slashdot.org/slashdot.rdf" you will now see "Downloading "Slashdot"" for example.
On startup the endless "Loading cache for http://crappyurl.com/feedname.rdf" has been replaced with a progress bar. Yep, that's right, GUI polishing is much more fun than writing network code. ;) Same progress bar is used at the end when "Saving settings" is shown. Though you'll likely only see the progress bar for more than 0.01434 sec on a slower system.

HTTP digest auth

2004-02-25, 22:42 GMT
I think I have digest authentication working now. Turned out to be some task. The strange hashing functions used were copied directly from the RFC's sample implementation. Finding a suitable MD5 implementation was not that easy though. RSA's implementation in RFC 1321 referenced in the HTTP auth sample implementation was out of question since it contains an annoying advertising clause which I really dislike, because I don't want to scatter two page copyright notices all over the code. On top of that it's probably GPL incompatible and therefore I cannot include it in snownews. I found a public domain implementation from Colin Plumb which fits in nicely.

The only problem this one has is an endian check via endian.h that only works on Linux. Or some other systems, but failed on OS X and OpenBSD. The only way out were evil hacks, multiple makefiles or probably autoconf. So it now checks endianess at runtime which works without any portability problems. You can now even grep for "0xdeadbeef" in the code. ;)

I hope the stuff works correctly and if you have a non-x86 system, a 64bit platform or even better, a non-x86, 64bit platform please test this version for me. See download links below.

Since I don't even know any feed that uses authentication 8) (Nathan Lutchansky said Livejournal will use this in the future) I made two testfeeds using both authentication mechanisms. Just subscribe both and see if it works. If you get "Authentication failed!" it obviously doesn't, so please tell me if that happens. Of course you can also tell me that it works. Non-x86 archs only please, I already know that it works there. ;)

Basic auth feed: http://test:basic@home.kcore.de/~kiza/test/test-basic.rdf
Digest auth feed: http://test:digest@home.kcore.de/~kiza/test/test-digest.rdf

You can delete the feeds from your feedlist after testing since they will never be updated.

http://home.kcore.de/~kiza/software/snownews/download/beta/snownews-1.5.0-beta1.tar.gz - [sig]

Oh btw, you can try out the new sorting function, it will ignore the "The" prefix of both feed names.

Coding rampage

2004-02-24, 12:08 GMT
Removed newlines, tabs and spaces from beginning of the displayed article text.
"No title" is now printed centered on the screen.
Ignore "A" and "The" prefixes when sorting feeds. Yes, this has been blatantly copied after seeing in the the current Raggle changelog. ;)
Username and password has been removed from the URL that is displayed in the feed info box. Whether a feed uses auth or not added to the info box.
Parsing of HTML only feed descriptions has been improved. Livejournal feeds are no big chunk of text anymore. This changes (improves?) the overall rendering of feed descriptions. Hope it's better than before.

3:00am changes

2004-02-24, 02:24 GMT
I've torn apart the HTTP client for the new auth support which involved some fundamental changes. When loading a feed that requires auth snownews will send a request without auth info at the first time after the program start. This will result in a 401 reply from the webserver that contains the auth type that should be used for the request. All following requests will be made with auth so this is now the same behaviour like a webbrowser when hitting an URL that requires login (request->401->request->200->request->200->etc.).
The automatic update check can now be completely deactivated by putting the value -1 into ~/.snownews/updatecheck. The command line switch --disable-updatecheck may go away in future releases.

All you ever wanted to know about the next version

2004-02-23, 12:56 GMT
The following things will be in the next version, probably named 1.4.5.

The add feed dialog now assumes http:// if you just type in dotslash.org/feed.rdf.
The feed info now doesn't overrun the screen space anymore if the feed title it wider than the "window" in which it is shown. Same goes for the feed url.
^L will now forcefully redraw the screen.
interface.c has been reduced by about 100 lines, main.c by about 650 lines. Ok, all of this went into a new file setup.c (part of it into ui-support.c). ;)
The "#ifdef SUN" stuff has been moved to a central place rather than being scattered all over the place. I hope it still compiles on Solaris.
The HTTP client now accepts even more broken webserver replies. (CRLF and LF line ends in the header field)
Should compile cleanly on BeOS (with BONE) now or derivatives.

And things that (probably, no promise, no warranty) will be in the next version.

Digest HTTP auth.
Some HTML tag conversion, <p>, <br> -> newline, etc. Yes, I'm aware of the fact that livejournals RSS feeds look like one big annoying blob of text.
Support for more (=all ever existing) XML syndication formats. Not sure if this one will work out as planned, but the idea is as follows: Snownews itself will only natively support RSS/RDF. There will however be a plugin architecture to support all sorts of different XML formats. This is (will, could) be done via xsltproc from libsxlt. An XSLT stylesheet needs to be written that converts the feed you want to parse to RDF so the internal parser can handle it. As long as the syndication format you want to have is XML based this should be possible. No need to have any code to support this in snownews, and everyone can add support for different formats without my intervention. The plugin idea came to me during dishwashing yesterday evening (don't ask :P) and the usage of XSLT was Kianga's idea. Don't expect this to work as easily as thought and within 2 days.

Nathan Lutchansky sent me a patch to support Atom 0.3 parsing which I will just list here. Though this will likely be done with the plugin system in the end if it works out as planned.

My (famous) last word on HTML entity conversion

2004-02-23, 10:43 GMT
As there seems to be a debate about what HTML entities should be converted into what and why (not) it should be done, etc. Here's the deal: Snownews will now only convert the 5 entities defined in XML: &amp;, &lt;, &gt;, &quot; and &apos;. Everything else will be read from a new config file ~./snownews/html_entities. This will include a reasonable set of defaults in the final release. You can put in anything else you want yourself. The file format is described in the comments on top of the file, it will be created when you have started the new version at least once.

Please note that putting the a whole UTF-8 conversion table with 65535 entities in place will probably have a significant performance impact. 8)

snownews-1.4.5-beta2 - [sig]

Please see the announcement for -beta1 on reporting bugs and useful information. Thanks!

Welcome BeOS

2004-02-11, 00:46 GMT
Snownews now has a BeOS port done by Daijiro SUENAGA. You can find it on bebits.com or on the download page. :)

Anyone brave enough to test a beta version?

2004-02-13, 14:57 GMT
I'd be happy if you can try out this version. It reports itself as 1.4.5-beta1, but should, in theory, be much better than 1.4.0-beta1 was if you had the honour to try out that one. The following changes have been made since 1.4.4:

Fixed memory leak in my iconv function. Trivial change.
Touched delicate HTML "parsing" code that might have caused a crash with certain malformed entities. Not entirely sure about this, I just removed a bunch of lines code and it has worked for me. That's what the beta testing is for. ;)
Whitespaces, tabs, newlines, etc. are now removed from feed/item title and descriptions if there are any. This makes feeds that looked totally messed up before usable.
"Mark all items read" (feed display) and "Mark all feeds read" (main menu) are now seperated key bindings. Both default to the same key as before ("m"), but can now be bound to different keys. If you have reconfigured the markallread key it will be reset to the default.

Downloads are below. If you're running Linux I'd be especially happy if you can try this out with valgrind (valgrind.kde.org). Run snownews with "valgrind --num-callers=10 --leak-check=yes -v snownews" and just use it normally. If you quit the program, take a look into ~/.snownews/error.log. Among other stuff, there will be a line

==20933== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 174 from 2)

If this contains anything else but "0 errors from 0 contexts" I'd be happy if you mail me the complete file. The "Leak summary" will list some leaks if you're using categories. I know about those. Shouldn't be more than 2 KB. ;) Please be aware that the program will run much slower under valgrind. Depending on your system a lot slower.

snownews-1.4.5-beta1.tar.gz - [sig]

Website updates

2004-01-24, 14:25 GMT
I've added a bug reporting section to the FAQ and linked there from the download page and the BUGS section in the manpage. This will hopefully give bug reporters an idea what's general useful to send in a report (not only limited to snownews). Other than "Hiya, it crashed!". ;)

I wanted to add such a page for some time now, but you know how this goes: "Yeah, maybe tomorrow...". And then you end up doing something else or playing NWN. The current editorial on freshmeat, Providing Good Feedback for Bug Reporters, finally convinced me to do it. I'm sending most of the things in the FAQ to people reporting problems anyway so why not collect it on the page. The linked freshmeat article is a really good writeup from the user's point of view on tho whole thing. It mentions a lot of things that also piss me off when I send a bug report to certain (unnamed) projects. And I'm likely to add the article's URL to every report I filed in Apache's bugzilla... uh, never mind.

I also linked to the donations page from the download page... just in case someone missed it on the main page... just in case. ;)

Version 1.4.4 released

2004-01-23, 12:26 GMT
1.4.3 crashes on systems where it runs the first time. Thanks Eric Sherman for spotting this.
Also contains the cookie code from the last patch since it turned out to work just fine.

Here, take a cookie

2004-01-22, 20:11 GMT
I was going to add a quote from "Life of Brian" here, but then I realized it would only fit for the German version (Reg speaking when they search Matthias' home. Either you know what I'm talking about or not. ;) ). Anyway, Snownews now supports cookies. You can for example use your Livejournal's login cookie to get items marked as private in your friends' RSS feeds. I don't know if it can be used for anything else, but that's at least one use.

Snownews will read its cookies from the file ~/.snownews/cookies (and only from there) which has to be Netscape's original standard cookie file format. You should be able to just cut&paste the cookies you want from your browser's cookie file. Tested at least with Mozilla's cookie.txt. I guess you can also just use a symlink to Mozilla's cookies.txt, but I do not recommend it. Snownews will only send the cookie if hostname and specified path match the URL requested.

If you want to have it, patch against 1.4.3 is at: http://home.kcore.de/~kiza/software/snownews/download/patches/cookies.diff.gz

Version 1.4.3 released

2004-01-21, 14:52 GMT
100th changelog entry! And the first public version was released exactly 7 months ago, on Jun 21st 2003. That must be good for something. :)

There are some minor new things I haven't mentioned yet: the feed title in the feed overview menu can now be assigned a color via the colors config file. I know that some people probably want more colors (for the highlight, title, status bar and probably alpha transparency for the help popup menu...), but this does only work if you define a standard color for background/foreground. Which I don't like, period, stop asking. ;)
updatecheck.c has been cruft reduced to 50% of its previous size. I figured I could easily use the exisiting full featured http client instead of duplicating code... well, I figured wrong since there are calls into ncurses, the update check runs after shutting down ncurses -> boom! Used it anyway and probably changed netio.c to be less painful for Lars who recycles the code for Liferea.
Translations have also been updated since the changes in the help menu code broke some of them which made the untranslated strings appear on the screen.

HTTP authentication

2004-01-20, 20:01 GMT
Snownews now support HTTP authentication. I don't think this is terribly useful, but... oh well. Works by using @ URLs: http://username:password@server.com/feed.xml.

Unsorted changes and bugfixes of the day

2004-01-19, 13:00 GMT
Requested changes: '?' now brings up the help menu as well. 'M' in the feed overview now sets an item to unread status.
I have deactivated the Chinese Big5 translation since so many versions of msgfmt choke on the file. Only the UTF-8 version gets installed now.
Fixed oddities in the network code triggered by weird combinations of using certain shells, terminals, ssh and screen's auto remapping/auto completion feature. Don't ask. 8)
I'll package this as 1.4.3 in the not so far future.

Usage statistics

2004-01-14, 16:28 GMT
These stats are generated from the last 30 days of Apache logfiles and requests of the version file from Snownews' versioncheck code. If you deactivated it you are not part of this statistic. ;) I wanted to have an operating system overview to see on what systems people are successfully running (or at least compiling) Snownews. These stats are only a snapshot from the last 30 days and since Snownews checks for an update once a week many people are probably counted 4 times.

Versions:    3
1.4.2      198    3
1.4.1      140
1.4.0      25
1.3.5      57
1.3.4      42
1.3.3      8
1.3.1      4
1.3.0      6
1.2.3      10
1.2.2      4
1.2.1      0
1.2        2
1.0.5      1
1.0.4      0
1.0.3      1
1.0.2      0
1.0.1      0
1.0        1
Operating systems:
Linux      396
FreeBSD    31
OpenBSD    24
NetBSD     22
Darwin     18
Solaris    1
Cygwin     1
SunOS      1
Unknown    8
German     49
French     24
Dutch      7
Spanish    5
Chinese    2

Oh, looks like it is 2004 already...

2004-01-11, 14:24 GMT
So here comes the First post!(tm) with some bugs. Snownews doesn't like HTTP headers that are strange uPpEr/LoWeRcAsE. And there I though this is supposed to be case sensitive until the HTTP RFCs told me otherwise. This was initially discovered in Liferea which recycles my HTTP client. You can find the bugreport on their project tracker page. My patch posted with the bugreport also applies somewhat fuzzy to Snownews 1.4.2(.1) if you want to have it.

Getting rid of libxml error messages

2003-12-28, 17:10 GMT
As you have probably experienced at one point, libxml prints errors onto the console messing up the GUI until it's redrawn. One way to fix this is using libxml >2.6.0 where you can suppress those error messages. Though I didn't like that option since it either means breaking compatibility with older versions of the library or adding some #ifdefs to check for the library version and use the appropiate code path. Instead I chose the other way around this problem. Snownews now redirects everything that gets printed to stderr into the file ~/.snownews/error.log. This file will only contain output from the current running session of snownews so you don't need to run logrotate on it. ;)

I've created a patch. This might interfer with any startup scripts that redirect stderr to /dev/null. See FAQ, section 2.2. You shouldn't need those scripts anymore.


gettext incompatibilities

2003-12-27, 13:14 GMT
There seems to be a bug with msgfmt from early versions of gettext. Generating the Chinese translation out of zh_TW.Big5 fails on gettext 0.10.40 and earlier.

msgfmt -o zh_TW.Big5.mo zh_TW.Big5.po
zh_TW.Big5.po:353: invalid control sequence
zh_TW.Big5.po:376: invalid control sequence
zh_TW.Big5.po:388: invalid control sequence
zh_TW.Big5.po:563: invalid control sequence
zh_TW.Big5.po:606: invalid control sequence
found 5 fatal errors

Tested and works fine with gettext 0.12.1 and 0.13.1. This will probably brake on OpenBSD if nobody updates the gettext port which was last touched 2 years ago.

A working Chinese translation

2003-12-26, 13:55 GMT
It looks like we finally found a way to make the translation work. Ncurses really seems to mind utf-8 so I added another version of the translation with traditional Big5 charset. They will be available as zh_TW (utf-8) and zh_TW.Big5 (Big5) in the next release. Once everything works with Unicode the Big5 one can be dumped. If that will ever happen...

At least it works on OS X's terminal, http://home.kcore.de/~kiza/software/snownews/snownews_sc_zh_TW.png. I have no idea how to make Chinese characters work on my Linux, it all ends in white noise (random ASCII) 8).

Translations and packages

2003-12-25, 23:18 GMT
Bruce J.A. Nourish added Snownews to pkgsrc which makes it available on a variety of system by just typing pkg_add. :)

Cheng-Lung Sung sent in a Traditional Chinese translations. Though I have some annoying encoding issues. I told him to use utf-8 and the file itself is ok. Though ncurses on OS X behaves kind of weird and prints the strings somewhat randomly over the screen. At least they are in Chinese. 8) I cannot test under Linux since I don't seem to have a console font capable of displaying Chinese. I have no idea what the correct charset of zh_TW should be, Unicode should be fine I thought (and the way to go, IMO). wget or gnupg use Big5 instead and it seems to work fine on my OS X terminal, though they don't use ncurses. This stuff sucks. If anyone knows how this is supposed to be done, please tell me. :)

Version 1.4.2-drunk-santa released

2003-12-23, 18:50 GMT
This version bundles all the bugfixes since 1.4.1 plus some minor translation updates and fixes a crash with the auto update code on OpenBSD.

The Makefiles changed a bit, "install" is not hardcoded anymore, but instead defined as "INSTALL = install" in Makefile.inc so you can override it in case your install utility wants parameters. Probably only of interest for people who create ports and packages.

This will also be the last release for the current fading year. Nice holidays, merry christmas and a happy new year to everyone. Have a look at Snownews' About screen ('A' from every menu) between 24th and 26th. =)

Localizations suck less now

2003-12-15, 17:01 GMT
I've changed the help windows slightly. The function descriptions should now be lined up correctly everytime. Happened with a few items in some translations. The function key is now seperated from the actual translation string. Sucks less. :)

Since 1.4.1 you can launch your browser with an item's URL directly from the overview. This change also added a segfault if you load a feed that doesn't contain any items at all. Fixed that one, too.

Also, translations in the feed categorization dialog are not shown correctly. The program always picks the English string.

Review on unixreview.com

2003-12-10, 21:13 GMT
Snowews is featured as the Tool of the Month (http://www.unixreview.com/documents/s=8925/ur0312d/) on unixreview.com. :)

RSS feed brokenness

2003-12-10, 15:25 GMT
I just noticed that feedvalidator.org spits out an error on my Snownews feed. It looks like the <rdf:Seq> section must go into the <channel>. Sorry 'bout that. It's error free now. Proof. :)

Moving around things on the website

2003-12-09, 22:37 GMT
I've moved the compilation issues stuff from the download page into the FAQ. This unbloats the download page a bit and moves everything to a more centralized page. The FAQ now has some sort of navigation menu on top (looks slicker, too :) ). German FAQ removed since syncing it with the English one everytime takes too much time and I'm too lazy.

I also try to avoid putting anything on the page described in detail in the manpage. I'm not sure what to put in the FAQ. It should probably be a tricks/hints addendum and contain things that don't fit into the documentation. I'm open for suggestions about what might be useful in the FAQ.

Two bugfixes for your downloading pleasure

2003-12-09, 15:35 GMT
Feed descriptions that only contain html tags <img src="wonderful pic one"/><a href="link to even more"><img src="wonderful pic two"/></a> caused a segfault in the code that removes the tags. The description will now show "No description available" instead of crashing. Improvement, eh?

If we hit a redirect for a feed that just points back to the front page (They're thieves! Filthy little thieves, stole the precious bandwith from us!) Snownews will dump a nice little corefile somewhere onto your filesystem where you'll probably never find it again. Fixed that one, too.

I was tempted to generate a new request with a referrer from their main page for this stuff. Though someone probably points a DMCA ICBM at me, because I circumvent their oh so wonderful anti-leech technology and make him lose money as nobody clicks on his blinking, flashing, bouncing, annoying ads anymore. So Snownews just ignores this and prints out an "Invalid redirect" warning instead.

Patch for 1.4.1 is below if you're interested. Doesn't contain anything interesting otherwise. :) http://home.kcore.de/~kiza/software/snownews/download/patches/patch-1.4.1-

Version 1.4.1 released

2003-12-07, 13:42 GMT
This one fixes the alphabetical category sorting bug, prevents reloading of a feed while a filter is applied (which messes up things otherwise) and adds a keybinding that let's you open article links directly in the feed overview. Defaults to 'O'.

Random unsorted core changes I did not want to squeeze into 1.4.0

2003-12-04, 20:29 GMT
The help menu and about dialog now have customizable keybindings.
Rewrite and cleanup in the http client:
- code is now thread safe (see also: famous last words)
- rewrote redirect handling code. Added a quirksmode for webservers sending broken headers. Redirecting should now also works with every incarnation of IIS and even the most braindamaged PHP scripts that print out their Location header themselves.
Will merge your http cleanup patch, Joerg, in case you're wondering why it didn't get into 1.4.0. :)
1.4.0 sometimes behaves unfriendly if you have a category filter applied, then go to the feed overview and then reload the feed. Don't do that.
Feeds containing new items will now appear colored (new item color) in the main menu. Don't know if this looks too good and if I still like the change in a week. ;) This triggers a bug in whatever part of Snownews or ncurses. if the topmost item in the list is colored (because it contains new items) the highlight bar will be invisible. No idea why.
When adding categories their sort order is not always alphabetical in 1.4.0. Sometimes the topmost item should not be the topmost one. Restarting will fix this. Doesn't trigger everytime though and I could swear I never triggered it while testing the release. Must've been a solar flare.

Version 1.4.0 released

2003-12-03, 11:01 GMT
Took a long time. If you read the previous changelog entries, you know what's new. If not, read it. :)

Moving towards 1.4.0

2003-11-28, 15:02 GMT
This is going to be the release with the most fundamental changes ever. Maybe I shouldn't have packed categories into 1.4.0, but now it's too late. The release is mostly done, UI weirdness in the add/remove catagory interface is fixed and all functions not safe for using while a filter is applied are deactivated. Like moving around items, adding/deleting feeds. These need some more work. The rest works nicely, at least for me. I'm only waiting for the translations of the new UI functions. Just sent out a mail to all translators.

A working beta

2003-11-27, 17:05 GMT
If you've tried out -beta4, try out this one, too. Categorization and the user interface should work nicely together now. A few minor things, like feed reloading while a filter is applied, do not work, but other than that it should be fine. The version survived extensive testing with valgrind so bug count should be below average. ;)

Download here: http://home.kcore.de/~kiza/software/snownews/download/beta/snownews-1.4.0-beta5.tar.gz, [pgp sig]

Missing files from 1.4.0-beta4

2003-11-26, 22:04 GMT
Looks like categories.[ch] didn't get included in the tarball. Please redownload -beta4 if you're wondering why it doesn't compile.

More on feed categorization

2003-11-26, 19:10 GMT
About 1000 lines of code later the feed categorization seems to work. I tried adding color labels that can be attached to every category but either I or ncurses sucks to much so I gave up after countless hours. I'm only using foreground colors and leave the background color untouched. However, it seems to be rather impossible to do things without taking over the whole terminal and redefining background/foreground explicitely. Ah well, the color chaos on the screen sucked anyway. ;)

If you want to know what the new feature looks like, try out -beta4, download link below. It should be as stable as 1.3.5 as far as the functions beside categories are concerned. You can add a feed to a category by pressing 'C' when it's highlighted in the main menu. Either choose an exisiting category or add a new one. Adding a dozen of feeds to a specific category should work pretty fast. Press 'f' in the main menu to apply a category filter to the main list. This currently only matches the first category of a feed. It will match every category a feed has. The categories are shown next to a feed in the main menu. This only shows the first category of a feed. Currently sorted alphabetically, maybe a bad idea. If you highlight such a feed and press 'g' an auto filter will be applied and only show items matching the current category (the one shown next to the feed). To remove every applied filters press 'F'.

If filtered mode, navigation with the cursor key does not work yet! Use type ahead to get to the feed you want. The user interface will get out of sync, if you remove the filter everything should work fine.

Well, that pretty much sums up most things. Further documentation is not yet written. Translators, look forward to some work coming up. ;)

The code should not crash. If you can crash it, I'd be happy if you can send me a backtrace of the crash. -beta4 is compiled with debug on, start with "gdb ./snownews", crash it, type "bt" within gdb and send me the complete output of gdb.

If you want to try out this version on OpenBSD (maybe other BSDs, too?) you'll have to switch on -O2 in the Makefile as a strsep() in netio.c:DownloadFeed() will fail for some reason. You can ignore the compile warnings, they're just a reminder for me to clean things up.


More on colours and new Italian translation

2003-11-24, 14:18 GMT
Marco Cova sent me an Italian translation of the main program and manpage. Thanks! :)

I've changed the colour code from a compile time option to a config option. It can now be switched off/on by setting an enabled flag in the config file. This makes it behave better on multi user systems where everyone can now have her/his own preference.

I've also fixed the broken Makefile.solaris, it should now compile its translations and manpages again (I hope). I'm currently working on feed categorization. Originally suggested, by Marco as well, was a feature that allows putting feeds into subfolders to reduce clutter with large feed lists. I will implement a function that allows putting feeds into a category. Then you can activate a filter and only show feeds from a certain category. Should be more straightforward and easier than managing things in subfolders.


2003-11-20, 18:40 GMT
Snownews does now support colours. It'll work on terminals with black and white background without changing the background colour (took me forever to figure out how to do that) and is fully configurable via a config file ~/.snownews/colors. Snownews will not be built with colour support by default, you can switch it on by activating a line in config.h (for now). The default style I set is mostly black and white. Only new items in a feed are magenty instead of bold which looks nice on every terminal I tried.

I'd like to know what parts of the user interface you want to have coloured. Please send me your suggestions (by mail to kiza at kcore.de) on what you want to have coloured and which colour.

To try it out, download the version at http://home.kcore.de/~kiza/software/snownews/download/beta/snownews-1.4.0-beta2.tar.gz. You don't need to change anything in config.h in this version, just compile and become blind by my default style. :P

Changes in Type Ahead Find, http client and obscure bugfixes

2003-11-13, 10:36 GMT
Type Ahead will now match substrings instead of just matching the beginning of each line. It also contained a bug which lead to rather strange behaviour like just ignoring some lines even if the search string matched.
Crash with broken feeds where libxml couldn't figure out the document's root element (for whatever reason) has been fixed, too.
The feed info now displays the HTTP status the webserver sent for the feed. Sometimes useful, most of the time probably not. :)
Finally the HTTP client should be thread safe now making way for multithreaded downloads.

If you want a patch with these changes, apply this onto 1.3.5: http://home.kcore.de/~kiza/software/snownews/download/patches/substr_mt-1.diff

Fixed feed deletion bug

2003-11-12, 13:56 GMT
There is a bug in the feed deletion code. If you scroll down the list with page_down until the last item is on top of the screen and now delete this item sync of the internal database and the screen is lost. The selected item is now off screen. Scrolling up by one page fixes it again.

Workaround for 1.3.5: don't delete the topmost item. ;)

Send in your feedlist

2003-11-12, 11:53 GMT
In order to minimize release bugs I'm building a giant list of RSS feeds that I use for testing whenever I release a new version. If you want your feeds added to the list mail me the file ~/.snownews/urls. If for some reason you want to stay anonymous send via a remailer. If you have feeds that don't work with Snownews for whatever reason, please send them in, too. Parsing errors from libxml (Invalid XML. Cannot parse this feed!) or other error messages like that are impossible to fix in Snownews. Please talk to the author of the feed about fixing his XML instead.

Send the lists to kiza+feedlist at kcore.de. I will, however, most likely not reply to each mail individually, but your mail is still appreciated. :)

Version 1.3.5 released

2003-11-12, 10:09 GMT
This should fix screen corruption once and forever. If you still see occasions where the interface gets messed up, send a bugreport.

Say goodbye to the 1.3 tree since this will (hopefully) be the last version. Plans for 1.4.0 include substring matching for type ahead find, maybe colors (which will default to off by default) and on the horizon in the distant future there is also https support.

Console messed up

2003-11-11, 23:16 GMT
If you hit a feed that contains XML errors libxml will vomit the parsing errors onto the console. This was normally no problem since a screen refresh after downloading cleared everything. Since the new drawing code in 1.3.4, however, this doesn't always work leaving a mess on the screen until you resize the window. Since I'm apparently too stupid to understand the ncurses function clrtobot() (erase from cursor position, set to 0,0, to bottom of screen so why does it leave things on the screen then?) I'll just call clear() again everytime an external program/code runs. This seems to fix it.

Strange keybindings behaviour

2003-11-10, 15:39 GMT
If you changed the default keybindings of Snownews make sure that you don't define empty bindings like "open url:" as this will result in the enter key being bound to this function which might have unpredicatable effects on your computing experience. Next version will fix this.

Fernando J. Pereda sent in a Spanish translation which will also go into 1.3.5.

Version 1.3.4 released

2003-11-08, 16:49 GMT
Since a lot of people probably like the flicker free drawing fix, I'll package this as 1.3.4.

Screen flickering annoyance on some terminal resolved

2003-11-08, 16:25 GMT
I finally fixed the flicker problem that happened on some terminals, for example rxvt, aterm and Eterm. Now it's perfectly smooth everywhere. Turned out that I must not use clear() from ncurses which was the function that caused the flicker.

New FAQ page

2003-11-08, 11:53 GMT
I've added an FAQ page containing the question I get asked at least more than once. So before asking me one of the questions listed there, read the FAQ for an instant answer instead of a 2 hour replay delay via email.

New default keybindings

2003-11-08, 10:13 GMT
Configurable keybindings for page down and page up has been added. They default to "space" for page down and "b" for page up. Normal page up/down key will still work of course. Page up however clashes with the binding for changing the default browser, which has been moved to "B". If you still have "b" defined in your keybindings file Snownews will silently change this to "B". Alternatively you can just delete ~/.snownews/keybindings and start with a fresh configuration if you encounter any problems.


2003-11-06, 15:31 GMT
Since I needed a Premier Paypal account for some other projects I also added a donations page http://home.kcore.de/~kiza/software/snownews/donations for Snownews that you can use if you like. Of course I'd be happy if you find Snownews useful enough to donate some money to the project. :)

Alphabetical One-Click Feed Sorting(tm)

2003-11-05, 09:54 GMT
I've added a function that sorts the feed list alphabetically. So don't request this feature anymore! ;)

Version 1.3.3 released

2003-11-02, 20:56 GMT
When I added the feed rename feature in 1.3.1 I accidently broke the code which lets you reorganize the feed list (move items up and down). Items that were renamed appeared with a wrong name after program restart. Thanks William Rapha for spotting this!

IIS redirection fix

2003-11-01, 18:21 GMT
Snownews crashes if it hits a 30x redirect on a IIS server that doesn't send a valid Location: header. Someone mail a Microsoft programmer RFC2616 please. This fix will avoid the crash and handle the redirect correctly. Apply on top of 1.3.2 if you want/need it. :)


Version 1.3.2 released

2003-10-30, 12:37 GMT
This release puts an end to the C preprocessor abuse in the Makefile and compiles/installs cleanly again on OS X 10.3. And since I'm running that on my iBook the change is significant enough to warrant a new version. ;)

Works with Panther

2003-10-27, 21:58 GMT
I've installed Mac OS X Panther on my iBook today. Fortunately Snownews still works perfectly. Adding -liconv to LDFLAGS doesn't seem to be needed anymore and Apple included libxml2 with Panther so no further libraries are needed on OS X anymore. Well, gettext if you want translations. Something is strange with the C preprocessor though. It prints out some debug which makes the version string extraction in the Makefile fail. But maybe it's time to make this less hack and more robust anyway. :)

Signal handling, UI tweaks and cleaning up the mess

2003-10-24, 19:48 GMT
You can now quit Snownews with CTRL-C. This will have the same effect as pressing 'q' in the main menu.

When skipping through items in a feed Snownews will now jump to the next item below the current one. It doesn't jump back to unread items above the current one any more.

I was looking for a way to get the terminal's charset for the charset conversion function. Unfortunately I haven't found a reliable way to find out the user's charset. Somewhere on the net I found an example using nl_langinfo(CODESET), but this is only supported by glibc >2.1 and some newer BSDs. Compilation fails on far to many platforms. Additionally on my terminal this returns ANSI_X3.4-1968 which looks really weird.

Snownews converts into ISO-8859-1 by default. If you want a different charset you can change the default in a #define in config.h at compile time.

I splitted interface.c into 2 files. With over 2000 lines of code it was getting way too big. Every dialog, the help menus was moved to dialog.c. The file is still 1330 lines, but it's much easier to navigate through it now. :)

Version 1.3.1 released

2003-10-21, 18:19 GMT
I've thrown out the exit confirmation dialog again in this version, because I really didn't like it. If you really do and really, really want it uncomment "#define QUIT_CONFIRM" in config.h before you compile Snownews.

Exit confirmation

2003-10-20, 18:35 GMT
The latest changes (feed renaming) introduced a lot of little, annoying bugs. Sometimes I hate memory managment in C. Though it seems to work fine now.

An often request feature (twice actually *g*) was a confirmation before exit dialog. Well, I never closed the program by accident. At least not often enough that it became annoying, but since the feature can be done with minimum hassle I included it. If you exit Snownews it will now prompt for confirmation and only if you press the exit key again it will shut down. So quitting Snownews now involves hitting the exit key twice.

Renaming feeds

2003-10-19, 23:48 GMT
...is now possible. And it is also possible to reset the title to the original name the feed provides.

More on XML parsing errors

2003-10-18, 16:26 GMT
I was trying to find a way to get rid of libxml's error output. There doesn't seem to be an official way to silence libxml on parsing errors. Well, there is a way via a non-public function in parserInternal.h, but using these might not be a wise idea since it could break with never versions of the library. There will be a much improved xmlParse* function in future versions of the library where you can actually pass arguments to the parser. Ah... innovation. ;)

I will use that when it happens. Until then it may be possible to redirect stderr to /dev/null or use a similar ugly hack. Or just live with the error messages from libxml.

I've also closed a small memory leak that happened if you add a feed that doesn't exist on the server or can't be parsed by libxml at all ("404 Not found" error page packed into a 200 server reply or other stupid things people do with their webservers).

XML parser error recovery

2003-10-17, 19:26 GMT
Snownews will now parse feeds which XML is not well-formed. I cannot guarentee that it'll work all the time, but it now parses feeds that forgot to specify char encoding and don't use UTF-8, XML tag mismatches (to a certain degree), etc.

Use the patch at http://home.kcore.de/~kiza/software/snownews/download/patches/xmlRecover.diff on top of 1.3.0 if you want/need this change. Contains every change since 1.3.0 mentioned in the changelog.

Valgrind loves me again

2003-10-16, 18:00 GMT

==15093== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 208 from 2)
--15093-- supp:  106 __pthread_mutex_unlock/_IO_funlockfile
--15093-- supp:  102 pthread_error/__pthread_mutex_destroy/_IO_default_finish
==15093== malloc/free: in use at exit: 277304 bytes in 1779 blocks.
==15093== malloc/free: 38180 allocs, 36401 frees, 43859499 bytes allocated.
==15093== searching for pointers to 1779 not-freed blocks.
==15093== checked 5544140 bytes.
==15093== LEAK SUMMARY:
==15093==    definitely lost: 0 bytes in 0 blocks.
==15093==    possibly lost:   0 bytes in 0 blocks.
==15093==    still reachable: 277304 bytes in 1779 blocks.
==15093==         suppressed: 0 bytes in 0 blocks.
==15093== Reachable blocks (those to which a pointer was found) are not shown.
==15093== To see them, rerun with: --show-reachable=yes

The last one of Snownews' memory leaks is fixed. It was rather complicated to find since Valgrind only told me "there, this struct has become lost", but now the last 24 bytes leak is squished. Yes, I'm satisified now. ;)

So, if you find more memory leaks somewhere in Snownews, let me know.

I also forgot to include some translation updates (French and Slovenian) for the program and the "Type Ahead" manpage section. Those will follow in the next version.

Leaking some memory

2003-10-16, 15:39 GMT

      _-- ---__
   _--      __ )
  (__     __- /
   \ --_--   /
    \        /
    \        *
     \      / **
     \      / ***
      \____/   ****

I've squished a memory leak that caused two filename strings go lost forever when deleting a feed from the program. Once again, thanks to valgrind for finding this. :)

Crash when deleting non-existent feeds

2004-08-29, 15:46 GMT
Snownews crashes if you try to delete a feed that doesn't exist ... what?

If you delete a feed from your feedlist that doesn't contain any information, because it doesn't exist on the server, it was removed from the server and at the same time no local cache exists a couple of NULL pointers get free()'d which is bad for the mental health of a C program.

Snownews will now show an exclamation mark in front of a feed that had troubles updating (temporary network error, XML parsing error, etc.).

Version 1.3.0 released

2003-10-15, 11:38 GMT
This version contains gzip, deflate support in the http client, some minor code cleanups, zaro bugfixes over the previous version (hey, I didn't find any) and the new Type Ahead Find search function which is really cool, IMO. :) Read about it in the manpage.

The Type Ahead feature was originally suggested by Kianga. So, don't forget to upgrade asap.

I'm stupid

2003-10-14, 11:22 GMT
Right after I finished the Type Ahead thing yesterday I wanted to copy the code onto another machine. So... "rm -R snownews/ /pub/home/kiza/private" copies the directory recursively onto the NFS mount, right? Uh, except for rm which maybe should be replaced by cp. Stupid. And there went the latest changes. Together with stuff on my NFS mount, Argh! Luckily I had a packaged test version lying around from just some minutes ago. Conclusion: think before you use -r/-R in any command line.

Type Ahead now also works in the articles overview list to get quickly to a specific item in large feeds. And it doesn't behave strange anymore. :)

Type Ahead Find

2003-10-13, 18:08 GMT
Or Find As You Type in newer Mozilla versions. This should make navigation through large feed lists easier and faster. This will also be included in the next release after it got some testing and polishing.

New (experimental) gzip,deflate support

2003-10-13, 11:19 GMT
Snownews does now accept gzip and deflate Content-Encoding from webservers that support any of the two features. The code is a bit experimental, but should work fine. If you can try it out, please do so and report problems if you find any.

Download http://home.kcore.de/~kiza/software/snownews/download/snownews-1.2.4-gziptest1.tar.gz (http://home.kcore.de/~kiza/software/snownews/download/snownews-1.2.4-gziptest1.tar.gz.sign) to try it out. This will become 1.2.4 if I'm convinced that it works flawlessly. :)


2003-10-10, 11:41 GMT
There is an OpenBSD port available in the CVS ports tree (though I doubt it'll make it for 3.4 release) and a Gentoo ebuild in their CVS ports collection. So, if anyone wants to package DEBs, RPMs, whatever please make sure to tell me about it. :)

Version 1.2.3 released

2003-10-03, 10:32 GMT
Before if takes forever to get out a new version with the improved http client behaviour (see previous changelog entry) I'll just package this as 1.2.3. :)

HTTP client upgrades

2003-09-27, 10:35 GMT
Lars Lindner pointed me to http://diveintomark.org/archives/2003/07/21/atom_aggregator_behavior_http_level which lists a lot of suggestions on client behaviour on the http level. I've added status code 307 to the normal redirect code. Snownews uses HTTP/1.0 but it shouldn't hurt to understand some 1.1 codes. On 403 and 410 Snownews will now prompt the user to remove the feed that raised this error from his subscription list.

Version 1.2.2 released

2003-09-20, 10:47 GMT
Probably the most boring release ever since this only fixes the "fun with freeing NULL pointers" bugs and moves around some code to clean up things a bit.

Clean up

2003-09-15, 18:25 GMT
I've completely rewritten the development journal. The new location is http://home.kcore.de/~kiza/software/snownews/snowlog.rdf. Snownews will update this automatically. It's now a static page that is generated everytime I add an entry in contrast to the slow CGI before. The changelog's website has changed too, but no URL should've been broken.

I've cleaned up the code a bit. Inspired by OpenBSD's porting docs it's now 100% sprintf free. ;) Every piece of doubtful C code is gone now. The remaining uses of strcat and strcpy should be fine (and in some cases difficult to replace with their "n" version).

Word wrapping and other conversion code is not part of interface.c anymore. This file is getting too big anyway. Those functions have been moved to conversions.c where the charset conversion function already lived a lonely life.

No luck with releases

2003-09-12, 00:05 GMT
Jere McDevitt noticed a rather stupid bug in the XML parsing code:

if (feed->link != NULL);
free (feed->link);

Which will obviously crash of we try to free a NULL pointer. There is also a similar problem where we might strcmp() against a NULL pointer.

Fortunately the impact of this problem should be rather small since only a few feeds are affected. A fix is available here: http://home.kcore.de/~kiza/software/snownews/download/patches/patch_1.2.1-fix1.diff

Version 1.2.1 released

2003-09-11, 14:01 GMT
It is now possible to scroll through the feed list/article list/article itself with the page up/down keys.
I've shrinked the ASCII logo on the about page to 80 COLS width.

More performance improvements

2003-09-08, 00:34 GMT
There was a pretty stupid CPU hog in the main menu code that made the program really slow with a large number of feeds that contain unread items. Fixing this makes the program behave much nicer on slow systems.

Mental note: profiling code at 2:35am with a headache is bad.

Text scrolling performance improvements

2003-09-07, 20:15 GMT
I've managed to speed up the text scrolling code from "slow as hell" on a 486 to "pretty damn fast". It's now perfectly smooth on my 486 test machine.

If you want to try out the changes, apply this patch http://home.kcore.de/~kiza/software/snownews/download/patches/patch-scroll_speedup.diff on top of version 1.2. Will bump the version number to 1.2.1-beta1. (Contains the previous patch "Connecting to non-standard ports")

i386 builds

2003-09-06, 21:02 GMT
I've resurrected my old 486 and installed Slackware 9 on it. The hardware is about 10 years old (BIOS copyright notice 1993), but it still works. Compiling the 2.4.22 kernel took almost two hours, then it complained about CONFIG_X86_TSC being set (although I selected 486) and paniced. Compiling again after "make clean" took another two hours.

Binary packages are now produced on this system and should run on everything 386 and above. Slack 9 compiles with gcc 3, but since C++ is not involved this shouldn't be a problem. If you're using the binary packages and they don't work for you anymore let me know.

Connecting to non-standard ports

2003-09-05, 15:57 GMT
I've received a patch that let's Snownews connect to URLs like http://feedserver.com:8080/myfeed.rdf. A port can now be specified together with the hostname.

This also revealed a problem with my entity conversion function which might crash Snownews on some rare occasions. Finally I've found an invalid free() in the code that extracts the proxy server from the environment variable, because the manpage of getenv didn't tell me "never, ever alter the pointer returned by getenv()!". :P

If you want the changes apply the patch at http://home.kcore.de/~kiza/software/snownews/download/patches/port-entity_remove.diff.

Version 1.2 released

2003-09-05, 10:00 GMT
Now that aborting network connections works all the time I thought I just name this 1.2, because it makes Snownews feel much more robust. Translations have also been updates with minor things that were missing in 1.0.5.

Binary packages are now built for i586.

No luck with BeOS

2003-09-04, 21:21 GMT
Since I could port Tornado to BeOS without hassle I tried it with Snownews, too. Interestingly it compiled with only a few glitches. No strsep() on BeOS and the ncurses header file redefines true to false and false to true which is kinda... uncool. After deleting this from ncurses.h it compiled without warning. But that doesn't mean it works. Using fdopen() on sockets doesn't work on BeOS. In fact this code will just silently return success making debugging really annoying. Since I don't feed like rewriting the network core to use send/recv BeOS is out of luck for now. Maybe it's possible to work around this problem with a clever hack.

Even if it's somewhat obsoleted nowerdays I always liked BeOS. :)

Programming rampage

2003-09-04, 13:05 GMT
Fixed 1 byte buffer overflow in the add feed dialog when entering exactly 512 bytes.
Made allocation of memory for strings in the change default browser dialog dynamic.
Stopped wasting memory in the feed info dialog.
Reduced memory usage of the program by about 50 KB (depending on number of feeds, usage, etc.)
Ripped out every sprintf (except in the program's init code) and replaced it with snprintf.

Portable code...

2003-09-03, 12:31 GMT
After some hours of fun with BSD sockets the latest changes to the network code now also work on FreeOpenNetBSD and OS X. Little differences between Linux and BSD can make programming painful...

This is also the reason for the compiler warning on BSD systems when compiling conversions.c. BSDs want "const char ** inbuf" for iconv's second argument, Linux wants a non const "char ** inbuf". Portable code... yeah, right. :P
Well, it works so I don't complain.

I hate the program, because I cannot interrupt the connection process if it hangs there!

2003-09-03, 00:29 GMT
It is now possible to interrupt the connection process. If Snownews hangs with "Connecting to ..." you can press "z" and it will skip the current feed. It is now possible to cancel every part of the download process where in earlier versions only ctrl+c was the last possibility. :)

Reduced memory usage

2004-08-29, 15:46 GMT
Ok, the releases 1.0.4 and 1.0.5 were really bugged. 1.0.5 still contains the feed info display bug. Unfortunately now it's broken on every platform where long and long long is not the same. Hopefully now I finally fixed this.

I've also reduced the memory footprint of Snownews. XML data (the actual RSS document) was kept in memory, but wasn't used for anything at all. Clearing this memory gives back a few KB. The more feeds you added to the program the greater the impact.

Snownews 1.0.5
kiza 706 0.6 0.3 3632 2060 pts/1 S 23:22 0:00 ./snownews

Snownews 1.0.6
kiza 933 0.3 0.3 3512 1892 pts/1 S 23:25 0:00 ./snownews

That's with 15 feeds added on my system. All further reduction of the memory footprint would mean higher CPU consumption.

Version 1.0.5 released

2003-08-31, 19:23 GMT
Argh, 1.0.4 had a buffer overflow in the code that constructed the new user agent string leading to one byte being overwritten... somewhere. Interestingly enough it never crashed during my testing, but who knows what broke. This version also fixes the cache filesize display problem mentioned in the previous changelog entry.

Feed info display bug

2003-09-02, 21:29 GMT
On some platforms (Mac OS X at least) the feed info display always says that the file in the disk cache in 0 bytes. Which is obviously wrong. :)

The problem was caused due to different sizes of the used variable. On Linux and OpenBSD it came out ok, but other platforms might even print weirder sizes than 0 bytes. Ah, the wonders of C...

Credits fly to Kianga for suggesting a workaround that seems to work nicely.

Version 1.0.4 released

2003-09-05, 16:02 GMT
Customizable keybindings, bugfixes, documentation updates, more robust network core and a new user agent string that now contains the URL of the program's webpage.

Snownews will now report itself as "Snownews/1.0.4 (OperatingSystem; language; http://kiza.kcore.de/software/snowews/)". The OS string will be the output of "uname", so something like Linux, FreeBSD, OpenBSD or Darwin and "language" will contain the locale setting if one has been set ("de_DE" for example).

Customizable keybindings

2003-09-05, 16:01 GMT
Snownews' keys can now be customized if you don't like the default settings. To change the bindings you can edit the file ~/.snownews/keybindings which format and settings are pretty much self explanatory.

I also fixed a bug that would lead to a crash if you deleted a feed's cache file and snownews was unable to refresh the feed from the server (connection refused, etc.) on the next program start.

Once all of this has received a bit of testing, version 1.0.4 will be released.

Version 1.0.3 released

2003-08-18, 19:50 GMT
This version adds the OPML subscription import utility, fixes the strange scrolling bug and adds a feed info display that shows the URL of the feed you're reading and its last modification date. Finally all translations and manpages were updated to document the latest changes ... and the changes before the latest version. :)

Text scrolling bug

2003-08-16, 13:46 GMT
There was an off-by-one error in the scrolling code of the article view. For some feeds that provide descriptions for the items you could not scroll to the topmost line anymore if you scrolled down a bit. And all that because "if (linenumber > 1)" is wrong and "if (linenumber >= 1)" is right. :)

Opml subscription lists import feature

2003-09-05, 16:01 GMT
The next version will include a script (http://home.kcore.de/~kiza/software/snownews/download/opml2snow) that converts opml subscription lists into Snownews' format. This works well with subscription lists from NetNewsWire and hopefully any other rss reader that uses this format.

The program is written in Perl and uses the XML::LibXML module. Grab it from http://search.cpan.org/author/PHISH/XML-LibXML-1.54/

Version 1.0.2 released

2003-08-02, 11:27 GMT
Highlights of this release: http proxy support, bugfixes and correct display of special characters (like German Umlaute) in the terminal.

Charset conversion

2003-09-05, 16:01 GMT
Non ASCII characters (German Umlaute for example) are often displayed as ASCII junk by Snownews. I've used libiconv to convert UTF-8 into ISO-8859-1 to make these appear correctly in the terminal window. Credits go to Kianga for fixing my conversion function. :)
Apply this patch http://home.kcore.de/~kiza/software/snownews/download/patches/patch-iconv.diff.gz on top of version 1.0.1 to try it out. Conversion is done strictly into ISO-8859-1 for now which should be the most common case anyway. Once I've found out how to get the terminal's charset setting it'll be converted into that.

Memory leaks...

2003-07-31, 14:28 GMT
Fixed a memory leak of 2 byte per item parsed in the XML document. That caused about 1-3 KB depending on how long the program already ran and how many feeds you have subscribed to. Valgrind's current summary is "definitely lost: 168 bytes in 7 blocks.", but I don't understand why that is leaked at all. Looks like you'll have to say goodbye to that 168 bytes for now. :)

UI behaviour changes

2003-09-05, 16:01 GMT
If you select a feed the program will now place the highlight on the first unread item rather than on the topmost every time. This change was inspired by a feature request to have a seperate "jump to next unread" key. However I think the current idea is better. If there are unread items snownews will place the highlight on them automatically, so no need to waste another key for this. :)

This only changes the behaviour if you select a newsfeed from the main menu and the submenu is shown for the first time. While reading the newsitems snownews already behaves this way (it will move highlight to next unread while you read through the feed).

Less crashes

2003-07-29, 16:19 GMT
Snownews crashes on feeds that don't have a <link> section inside the <item> section. If you want this fix right now or want to try out the http proxy feature, apply this patch on top of 1.0.1 http://home.kcore.de/~kiza/software/snownews/download/patches/patch-http_proxy.diff.

Proxy support

2003-07-28, 20:43 GMT
I fixed a bug that caused only the visible items for each feed to be marked as read when using "mark all read" and I added support for http proxies. Snownews will now use a proxy server if the environment variable "http_proxy" is set. This is the same way lynx and wget handle it.

Version 1.0.1 released

2003-07-26, 16:07 GMT
This version includes (obviously) everything mentioned in the changelog after version 1.0.

Little improvements and cruft reduction

2003-09-05, 16:01 GMT
Snownews will now use "Last-Modified" for HTTP connections if the feed supports it. This results in fewer network traffic and faster updates of your subscribed feeds.

And it will delete the cache files for feeds you have deleted as well now which results in less cruft in the cache directory. :)

Non blocking network connection

2003-09-05, 16:01 GMT
If the connection to a webserver is broken snownews will hang indefinitely on some occasions (or until the operating system notices and the TCP connection is terminated). The network connection can now be aborted by pressing 'z' if it hangs for a longer time.

Please try this patch if you're interested in the functionality and report any problems you encounter: http://home.kcore.de/~kiza/software/snownews/download/patches/netio_select.diff
Unpack snownews-1.0.tar.gz, copy netio_select.diff in the source directory and apply with "patch -p 1 < netio_select.diff".

Version 1.0 released

2003-07-18, 14:29 GMT
Slovenian translation, French manpage, bugfixes and finally it compiles on Solaris. Enjoy. :)

Slovenian translation ...

2003-07-11, 16:02 GMT
... added. Not much else to say. I added a new file (os-support.c) that contains lowlevel functions the program uses, but are not available on some OSes. There is no strsep() function on Solaris for example. This library will contain replacement functions to make snownews work on more different systems.

1.0-beta3 released

2003-09-05, 16:00 GMT
One more beta before the final. Some translations will get finished next week, but the changes done warrant a new version.

This version also fixes a security issue that could lead to shell code execution when you open a link in the program. I'm not sure if it was really possible to execute stuff, but better safe than sorry. :)

Even more robust cache handling

2003-07-08, 20:04 GMT
The cache is now written using libxml. It should now be next to impossible that the cache gets corrupted.

Main menu UI changes

2003-07-08, 12:43 GMT
The unread/total count for each feed has been removed and shows only the number of new messages now. Have a look at the new screenshot http://home.kcore.de/~kiza/software/snownews/screenshot to see the change.

French translation and upcoming version 1.0

2003-07-07, 22:31 GMT
I added a French translation to the program today. After all outstanding issues have been resolved (Dutch manpage needs updates, French manpage needs to be written, there will be an ebuild for 1.0) I'll release version 1.0.

Dutch manpage and fixed memory leak

2003-07-07, 17:36 GMT
I received the translated manpage some days ago and included it in the current tree. And I finally was able to fix a damn annoying memory leak that got on my nerves for a long time already. The program leaked the length of the hostname for each connection. Not really significant since the leak was 10-20 bytes per connection, but it annoyed me that I couldn't find it. ;)

Changed display feed behaviour

2003-07-05, 14:31 GMT
The program will now jump to the next unread items when you go from the display article to the display feed menu instead just jumping to the next item.

1.0-beta2 released

2003-07-02, 23:32 GMT
Most important things include: more robust config file and cache handling, fixed crashbug in non English locale settings, new Dutch translation of the main program. Manpage will follow.

Dutch translation

2003-09-05, 16:00 GMT
I received the Dutch translation of the main program today. I'm not sure if/when I will get the translated manpage, but if it happens I will make beta2 available.

"Thank you" goes to Frank van der Loo for the translation who also did the Dutch translation for Tornado. :)

More robust configuration settings

2003-09-05, 16:00 GMT
The program now creates a backup copy of the configuration file "urls" that holds your subscribed feeds. If something really goes wrong when writing settings to disk you can recover your feeds by moving urls.bak onto the file urls.

I will probably make version beta2 available with all changes and hopefully a Dutch translation included the next days.

Fixed problem with configuration dirs/files not being created

2003-09-05, 16:00 GMT
There was a problem with configuration directories and files not being created if you started the program for the very first time. I forgot to check the exitcode of the stat() command. However this problem only affected people compiling Snownews with gcc 3.x and only if the program was compiled with optimizations (-O2) turned on.

Talk about strange side effects.

Change browser crash fixed with non English locale

2003-06-21, 15:16 GMT
Fixed a crash bug that happened when changing the default browser when running Snownews in German. I accidently overran a statically malloc'ed buffer that was hardcoded with the stringlength of "Current setting: ". Fixed that one and added this development journal. Available via the RSS link on the changelog page and the changelog page itself. :)

Version 1.0-beta1 released

2003-06-21, 15:16 GMT
First officially released version.

<- back

Changelog & News