Month: 2003/06
-
2003 June 30
-
Please fix the XML-RPC spec
I've written before that I love XML-RPC, and that it has served me well in the past couple of years. I think it's the right tool for a broad range of jobs. But, after having studied the spec, and after having implemented it in a handful of languages for a handful of well-used apps, I think the spec needs just a bit of fixing. In particular, the spec needs a tweak with regards to this "ASCII limitation". There is confusion about this, period. I've had to hash this out with clients before, this was an issue of note while working out an XML-RPC based Wiki API, and it's obviously an issue in many other projects. This, of course, includes the current hubbub surrounding weblog APIs and whatnot. So, please fix the spec. It shouldn't take long to make this issue a non-issue by some simple clarification in the main XmlRpc to which everyone refers. Yes, I know there's a bit of clarification at the end of the spec, involving escaping ( not encoding) < and & along with the statement that "A string can be used to encode binary data." Well, yeah, I do that all the time with Base64. And, since the spec earlier had called for "ASCII", I assume that's what encoding binary data means in the context of this spec. To me, encoding implies a transformation from original form to some other form later requiring decoding. But, apparently, my interpretation and the interpretation of others is wrong on that score. But still, I've been confused, and so have others. Consider this a bug report. I've been referred by Fredrik Lundh (via Dave Winer), to "private conversations", "various public fora", and "early archives for the XML-RPC mailing list". And, again by Fredrik Lundh, I'm told: But even if you don't know all this, it's not that hard to figure it out for yourself. Just make sure you read and digest the entire specification, apply some common sense to sort out the contradictions, and you'll find that it's pretty obvious that the intent is that you can use any character allowed by XML. Well, let's see. I read the whole spec, more than once, and what I figured out for myself with my "common sense" is what I wrote above. I thought the spec called for ASCII (as in: ASCII), and assumed that encoding binary data called for something like Base64. Yes, I realize that XmlRpc is XML, but when a spec calls for ASCII as a particular part, I assume that there's a reason for it since that's what the specification specified. In my experience, specifications are not about common sense, figuring it out, and connotation. Specifications are about declaration, clarity, and denotation. Yes, I understand that no spec is perfect, and that many are steaming piles meeting none of the criteria I just mentioned, but that doesn't alter the goal. A spec can always be made better by revising with these things in mind, given the input of consumers of the spec. This is what a process of communication is all about, and specifications are intended as a form of communication. So, instead of talking about intent and things that have been talked about somewhere at some time, with the implication that I should just go off and search for these things, can we just get a clarifying fix to the XmlRpc spec? I don't want to send my clients off to mailing list and discussion archives, or present XmlRpc with any corrections or caveats. I want to say, as I have been, "Here, go to xmlrpc.com, read the spec, implement to the API I emailed you, and get back to me." Only, it'd be nice if the first question is about my API, not about character encoding. I've been confused, and so have others. I consider myself a smart person, and I consider most of the others who have been confused as even smarter. I apologize if my "common sense" is of a different sort, but that's what you have to deal with in the world of people. As young as I am, even I've discovered this already. So, can we just get a clarifying revision of the spec? And if not, why not? Update: Rock on. After catching up on a bit of banter over at Sam's place, I see that the same Fredrik Lundh I quoted before has already begun an XML-RPC errata page with the goal of clarification. (I just missed it in my daily reading thus far.) As Mark comments, I fear bumps in the road as any confused implementors find things weren't what they thought, but I'm happy to see the clarification accepted. Update again: If you've stopped rocking, resume. Dave Winer updated the XML-RPC spec. It was a small change, could have been more, but had not been done at all until now. I doubt that my asking please really had much to do with it, but I couldn't guess that it hurt. Thanks! [ ... 1015 words ... ]
-
2003 June 26
-
Like I was saying about RSS...
So yeah, like I was saying, I've kept my head out of the RSS frey lately. This past post about GUIDs and their properties of rocking in RSS hadn't had much thought behind it, other than that the idea of having something well defined and uncontestably intended for the use or uniquely identifying a weblog post seems like a good idea, especially if it's a permalink. Because, you know, permalinks seem great things to serve as both globally unique identifier and locator in one go. I had a feeling that I was confused about the purpose of the link element in RSS 2.0, but having not really studied the spec, I just kept to maintaining a student mind and assumed that there were Things Not Yet Understood. Now I read the spec, curiosity sparked by the recent hubbub over at Mark's place and Phil's place. Dave wrote that the link tag in items was "designed for something else". Cool by me, I assume that I am not yet well informed. So, I read in the spec, where assumedly I'll be illuminated as to its designed purpose, that link is "The URL of the item". To me, this means that the link tag was designed to point at the item, being the URL of that item. And, as far as I can tell, "the item" is what is being described by the item tag, in other words: the weblog entry. But this seems contrary to the statement that it's been "designed for something else". Designed when and documented where? Jon Udell writes that RSS is in no way broken, but I personally think it's got a funky widget or two in it and is not free of confusion. Bah, really I don't care. I still think a GUID for a weblog entry is a good idea, and that maybe some people who comment on links exclusively should have a tag devoted to that. Maybe in a separate namespace devoted to link-blogger vocabulary. Meanwhile, I'll be making occasional pokes at participating over at Sam's wiki and The Echo Project. I like the wiki approach he's offered for participation, especially the potential for zero-ego participation when it works. I love seeing something I contribute in a wiki eventually float free from my attribution, to later land in the midst of a summary elsewhere. And in the end, if it all works right, it'll be something that everyone had a part in, yet no one owns, and further yet didn't take a formal committee to approve. [ ... 802 words ... ]
-
2003 June 25
-
No Google AdSense for Me
Google ?AdSense is for web publishers who want to make more revenue from advertising on their site while maintaining editorial quality. ?AdSense delivers text-based Google ?AdWords ads that are relevant to what your readers see on your pages and Google pays you. Source:Google AdSense Your website is a type of website that we do not currently accept into our program. Such websites include, but are not limited to, chat sites, personal pages, search engines, sites that contain predominately copyrighted material, and sites that drive traffic through cybersquatting. Source:Response to an AdSense application for decafbad.com Hmph. No chat around here. I suppose things are a little personal, and there's a search engine. But, if there be warez here, I must've been hacked, and nobody seems to want this domain but me, so there doesn't seem to be any squatting going on. Guess I'm not a web publisher who wants to make more revenue while maintaining editorial quality. :) (I'm guessing I've been rejected as a web publisher.) [ ... 403 words ... ]
-
GUIDs in RSS rock
Guids sure have a funny name, but they're quite useful. If your weblog tool supports them, use them. If not, ask the developer to add the support. It's not very hard. Further, I strongly believe that all aggregators and readers should pay attention to guids where they are available. It's a convenience that many users will appreciate, especially people who are in a hurry Source:Guids are not just for geeks anymore ;-> Haven't really been saying much lately about the recent plunge, albeit more amiable this time, back into the RSS and weblog syndication frey. Mostly because I haven't had the time, and mostly because people more eloquent than I were already saying what I thought. In the meantime, I've been working, and puttering around with my own aggregator as spare time comes up. And you know, I'm tired of having to come up with some mechanism to detect new entries. This GUID thing is what I need. I don't want to run MD5 on another RSS item, and I don't care to track the minor edits people do on their entries, like Dave said. Personally, I think the GUID should be the permalink, if at all possible. I used to think that that was what the link of an RSS item should be, but then I never really maintained a weblog in the quote-link-comment style for long stretches. My entries aren't usually completely about someone else's article. But, some weblogs are like that. So, link points to a subject under comment, GUID identifies the entry and ideally does it via permalink. Nifty. [ ... 719 words ... ]
-
Why is my Monaco Borken?
Okay, what's wrong with this picture? Each of those lines is from a terminal I have open, trying to find one of my monospace fonts that works correctly and I don't hate. My past favorite has been Monaco for the longest time, but recently (when, I can't quite remember) it seems that it likes to combine "l" and "/" into one symbol. So does Courier. On the other hand, I have this font called Monaco CY which looks close enough to my favorite Monaco, until I discover that it mashes double dashes together. This leaves me with only two monospace fonts on my ?PowerBook that don't mangle things (however minor) in the terminal. They are Courier New and Andale Mono, both of which I very much dislike. So, though I've found one other person complain a bit about this, I can't seem to find any explanations why. Best I can figure is that I had to dump a slew of fonts onto my system recently in order to be able to do some client work, so maybe I clobbered an out-of-box version of my previously favored Monaco. But that doesn't make much sense, since I tried snagging a copy of Monaco from my girlfriend's iBook to no avail. Anyone out there have a clue as to what this is? [ ... 554 words ... ]
-
Sync My Bookmarks No Longer!
So, I downloaded Safari 1.0 yesterday and was very pleased to notice a new checkbox option on the Bookmarks section of the preferences. Notice the off state of the checkbox. Goodbye, bookmark syncing, I hardly wanted to know ya. [ ... 59 words ... ]
-
2003 June 23
-
WWDC (or, I love the net)
At the moment, I'm working on a bit of HTML and form processing, but I'm also monitoring three IRC channels and two web pages since I can't be at WWDC for the Keynote. But, it's almost like I'm there. Except I don't get a free iSight. Bummer. [ ... 61 words ... ]
-
2003 June 20
-
About That Algorithm
Let's say you're torn between two worlds. You know that one is a fevered delusion that your mind has created and the other one is reality, but which is which? ... Apply this algorithm in both worlds... Source:Algorithm for Determining Imagination from Reality So, after having seen Matrix Reloaded, and having read advice on how to live in a simulation, I find myself wondering, how might I determine whether I'm living in a simulation?Well, I figure chances are, I'm not even living in a decent simulation. In fact, I could just be hallucinating right now. So, Aaron Swartz comes to the rescue with a very reasonable empirical test I can perform. Everything seems to check out. Problem is, though, the test is completely dependant upon me and my perceptions. First, I have to pick a really big number that's outside my ability to perform a square root on it in my head. Then, someone else performs the square root on a calculator. I then square that number by hand, and that answer should match my first, and since I couldn't possibly perform a square root that large in my head, the answer must've come from outside my head. Except for this: If I'm hallucinating, then there's a subdivision of me controlling the perceptions of another subdivision of me. Who's to say that the me who's performing this test isn't a complete idiot, and all the math skills are in the part producing the hallucinations? Or, hell, what if for the duration of the test my hallucination producing side decides to make me blind to any numbers greater than 4? Hmm. Well, just to be safe, I won't try the alternate "Step in front of a bus and see what happens" test. [ ... 395 words ... ]
-
2003 June 19
-
Desktop server + Flash GUI?
Still have been busy like crazy, but as I wrote back in April, some of what I'm doing has been pulling me further into Flash MX and XML. Also, in the few moments of free time I've had lately, I've been toying with my own news aggregator. It's a PersonalServer, written in Python, based on Twisted, and uses SQLite via PySQLite for storage and juggling of items. So, today I've been thinking: How hard would it be to bundle together a desktop app composed of a backend in Python and a GUI in Flash? Connecting the two is no problem given whatever method of XML communication you want to pass between them. Pairing the two together to be launched on the guest OS would seem to be a bit of an oddity. See, I like my news aggregator GUI in the browser. It seems native there. But on the other hand, as far as interfaces go, what I want to make the browser do tends to sound ugly. I mean, yeah, there're all sorts of DHTML and CSS tricks and XUL looks promising, but damn have I been noticing how slick Flash is lately. And fiddling around with ?ActionScript has been pretty fun lately.?JavaScript has gotten a pretty bad reputation via crashy implementations, but as dynamic scripting languages go, there are some nifty elegances I can pull off in it. So... I've been reading a bit about Macromedia's Central as far as desktop Flash goes, and I've seen the News Aggregator sample app, but how about a maniacal mutant hybrid of Python and Flash? [ ... 322 words ... ]
-
2003 June 13
-
Newly Digital in 1983
I caught Gizmodo 1983 this week, along with the news that NBC may be revisiting the old 1983 scifi series "V", and I was reminded that that was right around the time I got my first computer. I've been meaning to write something for Newly Digital, so here goes: My history with computers starts a few years earlier than 1983, though. I think it was during the first grade, when I was a hyper, easily bored kid. I would get class work done quickly and early, yet forget to turn it in. Then, I would disrupt class until I was somehow calmed down or sent to the principal. I seem to remember that, once, I was caught scaling a classroom wall via the curtains. How far I made if before being caught, I'm not sure, but it seemed like miles to me at the time. I remember being the only one happy about it. One day though, the usual trip to the principal changed. I remember him as a tall, bald, and imposing man whose breath always smelled funny. (This was long, long before I knew about coffee and had become hopelessly addicted myself.) The man scared me, since he was known have spanked students in the old days, and though he wasn't allowed to do that anymore he still had the power to call my Mom. And I'm pretty sure most everyone knows the little-kid terror of that. This particular visit, though, he led me back into his office, and sat me down in front of an Atari 800 and a TV screen. Though I had already been introduced to video games via our Atari 2600 at home, I had little idea what this thing was. He showed me how to turn everything on, and introduced me to a stack of workbooks as tall as I was. Each book was about 1/4" thick and the cover colors were a rainbow of progressive difficulty. He told me that he was trying to decide whether or not to start teaching computers in the school, and that these books were what the company sent him for classes. He wanted me to try them out for him and see what I could do with the computer before he bought more for the school. From then on, when my class work was done, I had a pass to go to the principal's office and work through the books with the computer until either I ran out of books or the year ended. I worked mostly on my own, with a heavy sense that it was something special I'd been trusted with. As the principal went about his daily work, I was barely supervised with this expensive machine, and I felt I needed to prove I was worth it. My grades and my behavior improved as I tore through the workbooks in his office. There was so much to learn and play with. I remember with unusual clarity writing a program that asked me for my birthday and replied with my age in the year 2000. It dazzled me that something I programmed into the computer could tell me about myself, all grown up, in the twenty-first century. You know, the year when all science fiction stories came true! But there I was, playing with the stuff of sci-fi already. And the greatest thing, as the books began to ask more creativity and originality from me in my assignments, I felt my mind stretch. I'd never quite felt that before, and it was so amazing. Part of it was, I'm sure, just a property of the elasticity of the brain at that age, but I'm sure my time at the computer helped. Every day, I remembered and could do more. My thoughts were becoming more ordered and organized, as programming the computer required it. But, after a few months, observing my obvious enthusiasm for the work, the principal took me out of his experiment. I was disappointed but he told me that he'd decided to build a computer lab and turn what I'd been doing into a real class for everyone in the school. I crossed my fingers: There were still plenty of books left to get through, and I was just getting to the fun things like graphics and sound. When the school's little computer lab was finally opened, all the kids got sorted into groups of five or so, and each rotated through a weekly schedule of hour-long visits. When my group's turn came, I was crushed: I found that there were no assignments, just Pac Man and Missile Command and a smattering of math and vocabulary games. We were handed joysticks and told not to touch anything else. These machines were Atari 400's and looked so much less advanced than what I'd been used to. I remember there being an intense nervous aura radiating from the supervising teacher on duty in the lab, just waiting for one of us to destroy these things. And, when I asked if I could have a BASIC cartridge to work on some of my programs, I told that if I didn't want to participate in the computer activities I could just go back to class. As bitter as a first or second grader could be, I was. See, I'd gotten teased a bit for the special treatment in the beginning, but I didn't mind. And, now that everyone played with the computers, I got teased for not being so special anymore. What I couldn't get across to anyone, not even my teachers, was that they weren't getting what I had. There was so much more they could have. Well, I'm not sure my thoughts were so mature at the time, but I felt like everyone, including me, had been cheated. So that ended my education in hands-on programming, temporarily. I took to reading more computer books, often bought from the school book fair, like David Ahl's BASIC Computer Games. Lacking a computer of my own, I read and ran though the programs in my head. For the next year or so, I had sporadic access to computers. My Uncle had a TRS 80 Model III that he let me use during visits. That thing mostly confused me though, as I was introduced for the first time to an alternate flavor of BASIC. And still, there was the not-mine feeling and my Uncle's protectiveness of his expensive business machine. My grandparents also had a VIC-20, but sans tape drive or hard drive, so every visit was starting over from scratch. Nothing would substitute for what I'd had: My own time with the machine, doing things myself, building one thing atop another. Then, the Commodore 64 arrived at the local K-Mart. I was in love. This was it for me, and I raved about it constantly. I never quite expected to get one, though, since the thing was expensive, especially for a kid my age. And besides, computers were always something that someone else had. But I guess I must've really gotten on Santa's good side, because I was met with this surprise on Christmas morning that year: That first computer was really something. It was mine, given to me by my family as a whole. No one protecting it from me, fearing I'd break it. So I attacked it. I learned everything about it, buried myself in books and magazines, figured out how every bit of it worked and could be used. More than once, I'd gone at it with a screwdriver to see what was inside. Then I went at it with a soldering iron to add things like a reset switch and RCA audio output. I made friends with people at a local computer store, and they let me be a guinea pig to test new software and hardware for the thing. At one point in fourth grade, I learned 6502 assembly, printed out a disassembly of the machine's kernel, and mapped out what everything did. I still have that print-out, bound with rubber cement, and full of my scrawlings. That Commodore 64 would be my gateway to all sorts of further hackery and geekery, as well as a means of meeting more of my kind. After getting a modem, it became my entry point to local (and not-so-local) bulletin boards, and eventually my first tastes of the Internet. I was still using that Commodore 64 up until my last year of High School, coincidentally the year of the machine's last production run. I've had other computers since that Commodore 64, but it was opening that box on Christmas Morning that let me continue the process that my Elementary School principal had started for me, and I haven't stopped since. I love to feel my mind stretch, and I love to take things apart and see what's inside. [ ... 1529 words ... ]
-
2003 June 02
-
Blo.gs Pings Gone Wild
Shawn Yeager just dropped me a line to let me know that my blog has apparently been pinging blo.gs like crazy today, and since he's set to recieve IM's on blog updates from blo.gs, he's been getting flooded with IMs. First off, if this is happening to you: Sorry out there! Second thing, this might be interesting for anyone using a blosxom plugin to ping blo.gs or weblogs.com like me. Basically, I took the ping_weblogs_com plugin for blosxom, replaced the weblogs.com request with one to blo.gs, and searched for the pattern 'congratulations' instead of 'Thanks for the ping' in the response. Finding the pattern is assumed to mean the ping was successful. A successful ping, then, causes the plugin to update the contents and timestamp of the status file with the response. The status file is used by the plugin to determine whether or not a ping should be sent. This check is made everytime an item is viewed on my blog, and if the plugin sees a blog item whose timestamp is newer than that of the status file, a ping is sent. So! Onto the punch-line: The appearance of the word 'congratulations' and the successful registration of a ping are not the same thing. Apparently, blo.gs has been throwing up an error message in response to a ping, while still registering a ping. This error message does not contain the word 'congratulations', and so my plugin never updates the status file, and so it happily tries pinging blo.gs again with the next blog view. Two lessons learned here: When using a web service, whether a "real" service or a "scraped" service, be very sure to know and handle the difference between a valid response and an exception or error in the service itself. When using a web service, take care with your usage pattern. That is, just how important is success? Important enough to try again and again? Or could you wait awhile, whether successful or not? Or should you even try again? My plugin doesn't know the real meaning of the response to a ping. And further, the fact that it's designed to try, try again in the case of apparent failure is not the greatest choice for a usage pattern. So... longwinded post, but I think the realizations are valuable. [ ... 440 words ... ]