Skip To Navigation

July 2005

(insert witty pun about electrons here)

I've been thinking about adding Atom support to my feed parsing code. Made a few notes, not really done anything productive. The first obstacle is namespace support, and the second is xml:base (though they're both basically the same problem). Nothing too hard, I'll probably do it after I've made sure the RSS2 stuff works.

Then I need to decide if I need to parse Atom 0.3, the format that Blogger uses. From my point of view, it's not much more than supporting the same elements with a different namespace. I'll also need some code to look for format information in the HTTP headers, and sniff it from the XML otherwise.

And yes, I'm aware this is a post about Atom tagged "rss". Tough.

Note from the future: tag changed to "atom", let's do this the other way round. ;)

Inkscape 0.42

Fucking shiny. Must remember to play with this tomorrow.

Good, bad.

The PHP manual page for curl_setopt is wrong: gzip encoding does work in PHP 4. So I get a small performance help that I wasn't expecting.

Though after two days experimenting I quite like Python and might use it more in the future, my plans for iPodder didn't work out. After figuriing out which modules I needed, where the build script was and how to run it, the executable it made wouldn't run. I used a different CVS tag, and iPodder runs but fails to download files. Shame, as I'd already fixed the first two things on my annoyances list and was half way to fixing the second.

What am I wasting time on now? You'll have to wait until the DNS propagates. ;)

Progress...

After wasting too much time playing Soldat and Flash games of excessive addictiveness, I finally got back too coding.

RdSplay (That feed reader thing) shows the subscription list in the sidebar with links to more information, and now supports RdMise timezones properly. I just need to add the forms and backend code to add and edit feeds, and I should be able to start using it normally. Firefox Live Bookmarks' days are numbered...

Well, not really, since I don't have Atom 0.3 or 1.0 support yet. Although Firefox's Atom support is technically lacking, at least it exists.

Did I Win?

I just took the Global Advanced Personality Test. Well, not really. I filled in the first page, then noticed there were 126 questions, got bored, and just clicked submit. Interesting thing is, it still worked.

trait snapshot:

messy, depressed, introverted, feels invisible, does not make friends easily, nihilistic, reveals little about self, fragile, dark, bizarre, feels undesirable, dislikes leadership, reclusive, weird, irritable, frequently second guesses self, unassertive, unsympathetic, low self control, observer, worrying, phobic, suspicious, unproductive, avoidant, negative, bad at saving money, emotionally sensitive, does not like to stand out, dislikes large parties, submissive, daydreamer

Version Inflation

This gets a WTF.

There's a Firefox 1.1 alpha 1, a Firefox 1.1 alpha 2, but there'll be no Firefox 1.1. The plan is now to release Firefox 1.5 at the end of the summer.

Why not just go all the way and call it 1.8?

*poke*

I'll be moving rdmsoft.com to RdMise 0.9 soon. There's not much exciting stuff, at least not for you, but I need to upgrade to continue working on my RSS reader. Stuff I'm still seriously considering doing:

  • Templates, either PHP-based or XML based.
  • Feedback moderation queue for suspicious comments and trackbacks.
  • Draft blog posts. I have partial support for this on my local copy, but it sucks.

One thing I do want to test is which browsers support <button>s.

pArse

After procrastinating for some time, I finally started writing the RSS parser for RdSplay. I'm calling this set of functions "pArse". I was considering using something like Magpie RSS, but in the end I thought I'd learn more by writing one myself. Also, I wanted to do the HTTP stuff seperately, and didn't want broken RSS1/Atom support yet.

I used the expat PHP extension. I still don't really like it, but my code worked first time. It's about 130 lines of code so far, including the cURL stuff to request the file.

Stuff I need to do before letting this on the Internet:

  • HTTP 301 (Permanent Redirect) and HTTP 410 (Permanently Gone) support.
  • Temporary redirect support, for that matter.
  • Etag/Last-Modified support for caching.
  • Error logging.
  • Surrounding RdSplay stuff: storage, duplicate checking, scheduled feed checks.

What iPodder needs

  • A smaller main window. After upgrading to 2.1, iPodder is huge and I can't make it any smaller.
  • An option to hide the "Catch-up" button, so I don't keep clicking it by accident.
  • An easier way to copy podcasts to players that don't go through iTunes or Windows Media Player. Does file copying really have to be that complicated?
  • A spam filter. I want to listen to OpenPodcast.org without hearing the same promo over and over. I also want to avoid having to download anything other than MP3 files. Possibly something to automatically unsubscribe if an AAC file is detected...

Hmm. Looks like I'm going to have to learn Python after all.

Greasemonkey is back.

Perfect timing. Greasemonkey 0.4 beta is almost ready, and it finally works with trunk Firefox. To celebrate the occasion, have a script:

Give Me The Freakin Download - Replaces the Flash buttons on the podsafe music network with real download links.

Minor Annoyances

  1. deviantART IRC doesn't work if I connect to "irc.deviantart.com", the advertised server. It works fine with "irc.deviantart.net". The server's looking pretty empty...
  2. The podsafe music network has lots of free music, with no download links. But viewing the source for the silly little Flash buttons and copying the MP3 URL from there works fine. That's just daft.

Indecisive...

I posted my RdSplay table layout, then I changed my mind.

Table "items"

  • Removed "fid".

Table "itemsources"

  • isid - Primary key.
  • iid - Item ID.
  • fid - Feed ID. One item can come from many feeds.

Slash removal

My URLs don't have slashes on the end of them, and don't work if you add one. Except for the home page, which does have a slash and doesn't work if you remove it. Simple, eh?

After making the slash mistake myself, I think I should finally bother to fix it. I need to redirect away the slash if it the path before it is valid, and the slash has nothing after it. I also could make the home page "/r" instead of "/r/", but I'm not sure which makes more sense. I'll see...

Edit: Done this. Also fixed an IE CSS issue that was actually me relying on a Mozilla bug. Ho hum.

Like a broken pencil

I just made ChatZilla work in Nvu 1.0. Part of me is quite impressed at the Mozilla technology that makes this stuff possible, but part of me is just wondering when I'm going to get that part of my life back.

Frustrating.

They're playing with us...

Found this from the Bulgarians in my log file:

  1. 200.196.101.98 - - [11/Jul/2005:01:09:22 -0400] "GET /r/blog/198 HTTP/1.1" 404 24 "http://www.available-credit.com/mortgage-loans.html" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)"
  2. 200.196.101.98 - - [11/Jul/2005:01:09:26 -0400] "GET /r/blog/198 HTTP/1.1" 404 24 "http://www.available-credit.com/mortgage-loans.html" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)"
  3. 69.10.151.18 - - [11/Jul/2005:01:09:46 -0400] "GET /r/blog/198 HTTP/1.0" 200 4641 "-" "-"
  4. 200.196.101.98 - - [11/Jul/2005:01:10:22 -0400] "POST /r/blog/rdpress/198.comment HTTP/1.1" 404 24 "http://rdmsoft.com/r/blog/198" "Mozilla/4.0 (compatible; MSIE 5.0; Windows ME) Opera 5.11 [en]"
  5. 200.196.101.98 - - [11/Jul/2005:01:16:05 -0400] "POST /r/blog/rdpress/198.comment HTTP/1.1" 404 1856 "http://rdmsoft.com/r/blog/198" "Mozilla/4.0 (compatible; MSIE 5.0; Windows ME) Opera 5.11 [en]"
  6. 204.83.150.116 - - [11/Jul/2005:01:16:11 -0400] "POST /r/blog/rdpress/198.comment HTTP/1.0" 404 234 "http://rdmsoft.com/r/blog/198" "Mozilla/4.0 (compatible; MSIE 5.0; Windows ME) Opera 5.11 [en]"

The first two requests got caught by my check for the X-AAAAAAAAAAAA header. These spammers have been sending distinctive headers like this for a while, and nobody really knows why. It makes them easy to filter, until they suddenly change.

However, the other hits didn't have this header. Okay, so my other filters still blocked them, but it's a bit disconcerting to see that they're actually surveying my blocking skills...

ChatZilla Update

Busy week.

  • Fixed as part of Bug 299458 (Land 0.9.68.x work on trunk):
    • Make DCC faster, and not break for really small files
    • Convert RPL_ISUPPORTS cmds to useful data
  • Fixed: Bug 250072 - Call preventDefault when using all navigation keys, to stop built-in functionality messing things up.
  • Fixed: Bug 299454 and Bug 299460 - Make the nickname drop-down button more discoverable, and show the current nickname in the Change Nickname dialog.
  • Fixed: 4 minor bugs
  • Open ChatZilla bugs: 152

Having the new features and fixes from 0.9.68.x along with the new stuff from the trunk is going to be cool. It's also great for SeaMonkey users, with 1.0 Alpha of that coming Real Soon Now. Some of the remaining stuff is listed in this dependency tree.

Culture Cache

Something I should have done ages ago: setting up my RSS feeds so readers can cache them (Stuff 1, 2, 3). First step: adding an Entity Tag to responses, uniquely identifying its content and saving bandwidth by not serving the same file to the same place twice. After generating the feed and putting the XML into $thisnode->allcode, I used this:

// generate etag
$etag = md5($thisnode->allcode);
header('ETag: "'.$etag.'"');

// look at if-none-match
if(isset($_SERVER['HTTP_IF_NONE_MATCH']))
{
   $httpinm = $_SERVER['HTTP_IF_NONE_MATCH'];
   $httpinm = get_magic_quotes_gpc() ? stripslashes($httpinm) : $httpinm;

   $matches = array();
   preg_match_all('#"([^"]*)"#', $httpinm, $matches);

   foreach($matches[1] as $cachedetag)
   {
      if($etag == $cachedetag) // clear $thisnode->allcode and send 304
      {
         $thisnode->allcode = '';
         header('HTTP/1.x 304 Not Modified');
      }
   }
}

// Note: In the case of this site, RdMise will output the content
// with the correct Content-Type header later on.

Seems to work so far, I'll just test it a bit more before putting it "live"...

"Terrorism, plain and simple."

What the hell is Baroness Amos smoking? I just watched Question Time, where she singlehandedly morphed the terrorism debate into a fairytale world of "good" and "evil". The bad people are just bad, and we should hunt them down without even trying to understand why there are more of them than before. Bollocks.

Another thing I don't quite understand is Ken Livingstone and others calling the attacks "cowardly". No matter how misguided, how screwed up in the head you are, it still takes balls to blow yourself up. Diluting the situation does not help anything. (Bonus points, the mayor contradicts himself in the last few paragraphs anyway.)

Not much else to say, except that I found Morgan Tsvangirai's comments quite insightful.

Am I paranoid?

All of the PHP code in RdMise and friends was written by me. It's partly because I want full control over the code, and partly because I'm paranoid about third-party code messing up.

PHP Blogging Apps Vulnerable to XML-RPC Exploits

Many popular PHP-based blogging, wiki and content management programs can be exploited through a security hole in the way PHP programs handle XML commands. The flaw allows an attacker to compromise a web server, and is found in programs including PostNuke, WordPress, Drupal, Serendipity, phpAdsNew, phpWiki and phpMyFAQ, among others.

Netcraft confirms it. (Sorry!)

I'm just not sure whether I'm being proved right, or if this is just proof I'm desperately trying to justify my stupid decisions. All signs point to "Meh".

DeadBrain wins again

...travelling by train in England is a cruel, yet mildly humorous torture, like Monty Python's fish-slapping dance: irritating and mildly soul-destroying, yes; but nevertheless amusing in a way only the English can ever really appreciate.

...

In Japan, it's a bit different. If you turn up two minutes late for work in Japan, or work anything less than a 17-hour day, you're forced to commit Seppuku for the shame you've brought on not only yourself, but also your family, your company and your country.

Rubbish trains are a good thing

Nativity

Just something strange I noticed whilst trying to style a XUL menu: hardly any of the programs I use regularly are native Windows applications. Most of them have something between the Windows coding and their interface code, generally because they're cross-platform:

  • Browser, Mail/News, IRC Client: Gecko/XUL
  • Podcatcher, Media Player, BitTorrent Client: wxWidgets
  • Image Editors, Packet Analyzer: GTK
  • Text Editor, FTP Client: Native Windows

I can't figure out what OpenOffice.org is. It looks reasonably good, but there are tiny imperfections that lead me to believe it's not using native menus.

Menus are the strangest thing. Even Interent Explorer manages to get menus that look wrong compared to, say, Notepad or Paint. The menus that my wxWidgets programs (ABC, iPodder, VLC) use look okay, and I can get XUL menus to look reasonable with some CSS hacks, but GTK on Win32 just feels wrong.

Overall, the differences are tiny and I don't usually notice them, but when I do notice them, they get annoying quickly.

The biggest revelation for me today? Notepad has a status bar. I could swear it wasn't there yesterday.

tH