Thursday, February 28, 2002




RadioService v1.0a1 is now ready for download. This version fixes a number of bugs and streamlines the implementation. It also adds the rest of the post related Blogger API functionality; get, get recent, edit, and delete. The hot key to create a new post has been changed to "|" (a post?) and, as such, should be available in more apps most of the time. All functionality is available to non-service aware apps by manually filling the pasteboard (i.e. select some text, press copy), selecting the appropriate functionality via the RadioService's dock menu, and then manually posting the result. As such, RadioService functionality is now available to Classic applications.

The documentation (i.e. ReadMe) has been mostly rewritten (again) and should be better than before. Select the 'RadioService Help' menu item from within the app to view the ReadMe in your favorite browser.
3:16:58 PM    


  Wednesday, February 20, 2002




RadioService v0.9a3 is now ready for download. No new features, just works better-- see previous post regarding encoding of characters. You can pretty much select any hunk of 8 bit content from anything and post it via the service without worry that you'll have to diddle the quotes and other characters in the Radio desktop interface. As the application has all necessary frameworks embedded within, the download jumped from 50k to 280k.

Anyone want to submit a custom Aqua Styled icon for this thing?

(Still haven't fixed the request-caused-app-to-launch-so-it-doesn't-post problem. Not sure what is up with that. Now that the silly character encoding stuff is [hopefully] gone, I'm going to focus on features and tweaks.)
1:05:56 AM    


  Tuesday, February 12, 2002




Radio Services alpha release

An initial alpha release of Radio Services is available as a disk image.  The image contains full documentation (including instructions for those that might want to experiment with RadioServices and other Blogging services).  Pleaselet me know if you have suggestions or problems. The app is far from perfect and there are a couple of known bugs (documented in the README). However, it does work-- this post was created in <b>WebObjects Builder</b> (the closest I have to a WYSIWYG HTML editor, at the moment) and posted via RadioServices.

Enjoy.


1:46:58 PM    

  Sunday, February 10, 2002




Web Entourage released Blog App 1.0 for OS X today. Very cool. I downloaded it and had it configured and running within a minute or so. The trick is to use a username of 'default' and an URL of 'http://localhost:5335/RPC2/'.

The only problem is that it has no awareness of Radio's categories. Not that it should-- categories are not a part of the Blogger API.

It appears that you can simply 'post' from Blog App, then go into your local Radio desktop and categorize the post prior to publishing there. Of course, there is the chance that the rather proactive Radio should-I-upstream-right-now test will upstream prior to your categorization...
10:20:13 PM    




Kay Narumi asked if there was some way that Bad Clock Detector could automatically fix the date in some fashion. Without a network connection, there isn't as AppleScript does not directly provide a means of setting the date and any indirect means is going to end up with the user in the System's date and time panel anyway to perform final adjustments (My best guess is that I could remember the last date/time the script was run, set the clock to that and at least get the user to within a few days/weeks of the correct time).

However, if there is a network connection, there is no reason why the clock can't be set from network time. This version offers that functionality. In particular if the script detects that the system clock's year is preposterous (prior to 2002), it asks the user to reset the clock either manually or via the network. If the user answers 'via the network', then the script executes 'ntpdate' against Apple's time servers. This requires administrator privileges and, as such, the script will ask for the user's password (all source is provided if anyone wants to do a security audit).

Of course, the user can cancel entirely.

An RTF document describing installation and implementation in detail.

Bad Clock Detector Icon
11:35:26 AM    


  Friday, February 8, 2002




SBook was the best address book ever. Unlike every other address book, SBook didn't force entries to conform to some set of fields. Instead, you simply typed whatever you wanted into an entry and SBook would take care of parsing out phone numbers, addresses, and email addresses (this was before the web). The best part was the search-- you simply started typing into the search field and SBook would refine/update the match list in real time. While it was written for the 68040 NeXT the matching and parsing functionality was incredibly fast-- realtime.

SBook is coming to OS X!! Same great speed, same great verstility. An alpha version can be downloaded from the SBook5 web site.

CodeFab has long had a web based contact manager; very convenient when you have access to the net, but completely useless when on the road and without a net connection. We have long had the ability to export to a text file, but sorting through hundreds of entries to find the right one could be tedious.

Turns out that SBook can import an XML document of a very simple format. What follows is a hunk of Java code that uses the JDOM API to produce content that is stuffed into an HTTP response. The resulting XML doc can be directly imported into SBook.

import org.jdom.*;
import org.jdom.output.*;
//
public class SBookExporter {
// this is copied directly from a WebObjects app.  Converting it to non-WebObjects
// should be trivial;  there is no magic here.
// Contact:  class containing your contact-- implement asSingleLargeString() to
//     return a text representation of the contact.
// This would have *some* whitespace, but Radio triple spaces if I do so...
//
    NSArray contactsToExport;
//
    public WOResponse generateResponse() {
        if ( (contactsToExport == null) || (contactsToExport.count() == 0) )
            return null;
//        
        WOResponse xmlResponse = new WOResponse();
//
        xmlResponse.setStatus(200);
        xmlResponse.setContent( generateDOMResponse() );
        xmlResponse.setHeader("Content-type", "text/xml");
//
        return xmlResponse;
    }
//
    public String generateDOMResponse() {
        return new XMLOutputter().outputString( generateJDOMResponse() );
    }
//
    public org.jdom.Document generateJDOMResponse() {
        Element rootElement = new Element( "entries" );
        Enumeration contactEnumerator = contactsToExport.objectEnumerator();
        DocType docType = new DocType("plist", "SYSTEM", "http://www.simson.net/sbook/sbook.dtd");
        Contact nextContact;
//
        while (contactEnumerator.hasMoreElements()) {
            nextContact = (Contact) contactEnumerator.nextElement();
            Element entryElement = new Element( "entry" );
            Element contactElement = new Element( "text" );
            contactElement.addContent( nextContact.asSingleLargeString() );
            entryElement.addContent(contactElement);
            rootElement.addContent(entryElement);
        }
//
        return new org.jdom.Document(rootElement, docType);
    }
}

9:32:42 AM    

  Monday, February 4, 2002




It annoyed me that everytime I lost power to my TiBook, the clock would reset to 1970, I would subsequently forget to reset the date/time and a bunch of people would make fun of me for sending email from the distant past. Worse, some people sort their email by date and, as such, never noticed that I sent them email that their mail client thinks is from Jan 1, 1970.

This silly little bit of AppleScript can be installed as a login item under OS X and will automatically launch System Preferences and select the Date & Time preferences pane if the year of your system's clock is preposterous (as in, prior to 2002).

An RTF document describing installation and implementation in detail.

Bad Clock Detector Icon

(Aha! Figured out how to refer to an image such that it renders both locally and [hopefully] remotely. Neat. And a bit more digging revealed that optional arguments are passed as key/value pairs. Cool. radio.macros.imageref ("http://radio.weblogs.com/0100490/images/BadClockDetector.jpg", width:64, height:64, alt:"Bad Clock Detector Icon") does the trick. Now, why did I have to dig and dig and dig until I found the Frontier macros guide to find documentation on the macros in the local Radio desktop??)
5:18:49 PM