Blog Readers

Speaking of Blog Readers…

I switched from Google Reader to NewsGator/FeedDemon as my primary means of following all my non-LJ blogs and RSS feeds that I follow. I’m actually quite happy with FeedDemon the more I play with it, as it has a few features that I find rather helpful that make it one-up google reader

1) you can right click on a feed name to mark the feed as “read”. Now that doesn’t sound all that impressive, but it was one of my biggest gripes about google reader, that it was inefficient to “mark all as read” for a specific feed because you had to load the feed summary before you could mark them as read.

2) it supports synchronization with NewsGator’s web reader, and not simply synchronization, but selective sync, so when I log in from work it’ll show me updates from TechCrunch but not from Comics Curmudgeon, but when I get home, any Comics Curmudgeon updates will be waiting for me.

3) Using a native OS based reader software is significantly faster and more responsive than a web-based interface, particularly when you’re clicking over to the blog entry page itself to read comments without subscribing to comments.

4) Offline mode. You can download all the unread feeds with images to catch up on when you’re somewhere that doesn’t have net access. For the most part, this is something I rarely use, but when I need it, its extremely helpful to havel. How handy would it have been in Uganda to have been able to download blog posts as easily as email to read later when I’m not paying for net access by the minute? Or handy it might have been to download blog posts to read on those busy traveling days where you do a lot of hurry up and wait, such as sitting at the airport, or the other week when I was hanging out at the church patio for an hour between when Costco closed and service started. Yes, this has potential to be a useful perk.

Do any of you read blogs and feeds? How do you keep up on them? Do you use a blog reader? Do you check each page where there might be updates individually? Rely on email notifications of new content?

Poptray Subject Fix Proposal

The following is a post I made to the Poptray user/developer forum message board on August 20, 2008. I am archiving a copy of my message on my blog as well for historical purposes.

I have taken a look at the source code for PopTray and the RFC spec on email headers, and I believe the subject encoding problem is one that could easily be resolved without waiting for Indy components to do character set conversion. (I don’t actually have a Delphi compiler set up to write and test a patch, but here’s an outline of the proposal for a solution I’ve come up with so far:

In uMain.pas, there is a procedure ShowMailMessage(…). In particular, on line 1295, there is a line:
SubItems.Add(Accounts[num-1].Mail[i].Subject);
I believe at this point you need to “translate” the subject. The subject is interpreted by the Indy components as Ansi, which is correct based on the email header RFC. However, there’s some stuff that was added as an after-thought for how to accomodate international subjects in headers that only ascii is allowed in. So we can “undo” or fix the subject line at this point.
Maybe that line becomes:
SubItems.Add(FixEncoding(Accounts[num-1].Mail[i].Subject));
and you add a new procedure FixEncoding(subject:string) : string
that will “fix” the subject encoding into something more human readable.

According to the RFC, the format for specifying a non-ansi subject is:
“=?” charset “?” encoding “?” encoded-text “?=”
This should be simple enough format to tokenize using standard string tokenizing libraries. if the string does not follow this pattern, return the string as is. Otherwise, we have to process it and fix its encoding.

Encoding is either “Q” for Quoted-Printable or “B” for Base64. Those are the only two options, so not too complicated there, other than locating or creating a library function to decode those two encodings. Base64 allows for longer subjects with foriegn characters, but its not human readable, whereas quoted printable only changes spaces and non-ascii characters using escape codes. I haven’t researched this yet, but I would imagine a library or example code for how to decode Base64 and Quoted-Printable back to “normal text” is not difficult to find.

Charset slightly more complicated, in that there’s a larger list of choices that are possible. I don’t know how good Delphi’s built in support for doing charset conversion is, I’ve only done them in C++ and Java. In C++ everything had to be converted to Unicode instead of UTF-8 and displayed as “wide strings” which is a little weird at first, but doable, though it required a few format strings with %S conversions to change from ansi-unicode and vice versa. In Java its as simple as passing the string and a string with its encoding to a special library function and it auto-magically swaps the encoding. But if its particularly complicated, even just adding support for the most common one, UTF-8, would very much benefit users of pop-tray. UTF-8 to Unicode is a relatively simple conversion even if you have to code it manully. Getting the list component to display wide strings rather than ansi strings may be automatic, or might require a minor change somewhere, not sure.

I hope that is helpful! I’d be happy to discuss implementing this feature farther or do some more research if one of these steps turns out to be a hang-up…its a feature I’d very much like to see!

Mystery Solved

So that thing with my computer waking up?

Shortly before I started having the problem, on Wednesday, my new TV-tuner USB device arrived. On my lunch hour I was hooking it up and trying to get it configured. Windows Media Center is really difficult to configure despite the great lengths they went to in order to try to make it “user friendly” and nagivatable with a TV remote control.

To change the input source from coax (cable) in to RCA jack input, something I might want to do frequently, you have to re-run the entire “configure your tv tuner” setup including programming the remote and checking for updates online.

There’s also this setting about “automatically updating programming guide” which has the undocumented feature of waking the computer up from hibernate to do so at a non-configurable scheduled time, and not putting the computer back to sleep after. Aha. So now Windows Media Center is set to only download manually…and it didn’t wake up on me this morning.

Mysteries

The last two days in a row, my computer has come out of hibernate and woken itself up sometime between when I fell asleep and when I woke up in the morning. I woke up to computer fan humming and the computer sitting at the login screen in screen saver. No idea what the cause is.

VNC

If VNC is normally “a bit slow”, doing VNC to a machine in Australia? Very slow…

Flash Mob In the Conference Room @10:30am sharp

Its kind of funny to watch everyone to at exactly 10:30 (not 10:29 or 10:31) get up from their desks to walk into the conference room for the staff meeting.

My new favorite SVN command: blame

Aside from having an interesting name, it’s actually pretty useful… tells you who last edited (or created) each line of code (and when) in the file. So if you’re wondering where this [holds my mouth] code came from, there’s an easy way to tell.

Dumb Java Generics Error Message of the Day

Type mismatch: cannot convert from List<SignPage> to List<SignPage>

And why not might I ask?

Unicode in MFC/C++

To make strings not barf when you switch back and forth between multibyte encoding and unicode encoding….

when defining string literals:
_T(“StringValue”) – works always
L(“StringValue”) – works if unicode rather than multibyte
“StringValue” – works if multibyte

when defining string variables:
LPTSTR myString = new TCHAR[25];

when changing control values:
controlName.SetWindowTextW( myString.c_str() );

Yay! My code works!

I always like that point where you break through all the confusion and funky problems, and you finally run your code, and it does what its supposed to do…especially when you’re on a task that seems near impossible when you first stared at it. But as you break down “impossible” step by step into littler problems, you get problems that are actually possible to solve, and eventually you get a small enough divide you can leap from where you are to where you need to be.