Kids online
Today, I set up a new computer for the kids. I took the new 2.8Ghz Celeron box that had been serving as my Linux file-server and swapped it with the old 450Mhz P3 box that the kids were using. I was a little surprised how easy it was to make the switch. I just took the hard-drive out of the Celeron and put it in the P3 and Linux came right back up.
I set up Windows XP Home on the Celeron box and installed the important software (Warcraft and SimCity 3000) for the kids. I would have preferred something other than Windows, but we have quite an investment in games and educational software for Windows.
I also added a wireless adapter. So now, for the first time, the kids computer is on-line. I didn't setup any parental controls or filtering software and I'm not really sure what to do about "internet safety." The boys are 7 and 8 and I'm pretty sure they aren't going to go looking for trouble quite yet, but I am a little worried that Google will send them to a site of ill-repute or some horrible porn-spam message will land in their inbox. If you've got kids around that age on-line, I'd love to hear what you do to protect them from porn-spam and other internet threats.
del.icio.us links [June 09, 2005]
- Why arenât you blogging?
Ruby: "Forget all those excuses. If you're engaged enough to be reading this site, you probably have some opinions to share with the world." - JSPWiki 2.2-stable released
Best little wiki around and on top of that, it's Java! - Just use Media Types?
May be required knowledge for Atom Protocol implementors
Dr. G on my iPod
Thanks to the wonders of podcasting, an interesting talk by SAS CEO Dr. Jim Goodnight appeared on my iPod this morning. You don't have to have an iPod to listen to Dr. G explain the secrets of SAS Institute's sucess (it's all about the M&M's by the way, 22 tons per year) at the Software 2005 conference. You can download the talk directly from the IT Conversations site.
Raleigh/Cary Bloggers meetup tonight
Join us tomorrow (Tuesday, June 7th) for the first Raleigh/Cary Bloggers meetup of the month. What: An open meeting to talk about blogging, podcasting & whatever's on your mind When: Tues @ 6:30 p.m. Where: Cafe Cyclo, in Cameron Village 2020 Cameron St Raleigh, NC 27605 (map) (919) 829-3773 Who: Bloggers & people who want to blog (Podcasters welcome!) Hope to see you there!via Josh
Weekly status, CC:world
- Roller 1.1.2: still haven't released this minor bug-fix release, maybe later today.
- Roller 1.2: not a whole lot of progress 1.2 last week, but I did take three full days (1 holiday and 2 vacation days) to work on RSS and Atom in Action and as part of that, I implemented Atom Protocol Draft 04 in Roller's CVS head. The code will be part of 1.2, but will not be enabled.
- Roller 2.0: made some more progress in Roller 2.0 data model work last week, but not much.
- Roller@Apache: All accounts appear to be in place. Perhaps we'll make the move to Apache's Subversion repo this week?
- RSS and Atom in Action: Those two vacation days I took were part of a final push to finish the book. Although I was able to write a useful blog entry on Atom Protocol, I found that it is not yet stable enough to allow me to complete Chapter 8 Publishing with Atom. So, the plan is now to push all the rest of the chapters through production and wrap Chapter 8 just before going to print.
Atom has better podcasting support than RSS
Podcasting originated as a feature of RSS, but as the world moves to the new standard Atom format, podcasters will too. Atom can support podcasting through the element. As is the case with RSS 2.0 based podcasts, you can only have one podcast per entry. But, with Atom you can have a different representation for each language and for each content-type. For example, if you want to make a podcast available in both English and German and in both MP3 and WMV formats, you can do it by adding links like those below to the entries in your feed:
<link href=âhttp://example.com/podcasts/show001-usenglish.mpgâ hreflang=âen-USâ length=â21472922â type=âaudio/mpgâ /> <link href=âhttp://example.com/podcasts/show001-usenglish.wmvâ hreflang=âen-USâ length=â23889921â type=âaudio/wmvâ /> <link href=âhttp://example.com/podcasts/show001-german.mp3â hreflang=âde-DEâ length=â20032879â type=âaudio/mpgâ /> <link href=âhttp://example.com/podcasts/show001-german.wmvâ hreflang=âde-DEâ length=â19907766â type=âaudio/wmvâ />
Disclaimer: Atom is a work in progress (but nearly complete). This is based on Atom format draft 08. Atom experts: did I get something wrong in the above example?
del.icio.us links [June 05, 2005]
- Wiki wiki world
"Business wikis are being used for project management, mission statements and cross-company collaborations." - Two garbage trucks
"it could well turn out that Sun made the right call by doing the unexpected" - Spring honeymoon over
Rafe: "Spring is too smart for its own good when binding values from an HTTP request to a Java bean"
del.icio.us links [June 04, 2005]
- Apple goes X86?
According to CNET. Say it ain't so! - SiteMaps = LRSS
Bob: "The existing degree of almost gratuitous incompatibility is simply not useful"
How Atom Publishing Protocol works
Unlike the other RSS and Atom books that are hitting the shelves these days, RSS and Atom in Action is going to cover the Atom Publishing Protocol. So, I'm following the protocol development very closely. This blog entry is a summary of Atom as it stands today (based on Draft 04 released May 10, 2005). It's a follow up to my post earlier post Atom in a nutshell which explained Atom API 0.9.
Atom Publishing Protocol (a work in progress) is a new web services protocol for interacting with a blog, wiki or other type of content management system by simply sending XML over HTTP, no SOAP or XML-RPC required. Your code interacts with collections of web resources by using HTTP verbs GET, POST, PUT and DELETE as they are meant to be used. Here's how it works.
Discovering your workspaces and collections
To start out, you do an authenticated GET on a server's Atom URL to get a description of the services available to you. You get back an an Atom Services XML document that lists the workspaces and within each the collections available. A workspace could be a blog, a wiki namespace or content collection that you have access to via your username/password.
Each workspace can contain two types of collections: entries and resources. Eventually, the spec will probably allow for (at least) five types of collections: entries, categories, templates, users, and generic resources.
Here is an example of a services document XML for a blog user with access to two blogs "My Blog" and "Marketing Team Blog":
<?xml version="1.0" encoding='utf-8'?> <service xmlns="http://purl.org/atom/app#"> <workspace title="My Blog" > <collection contents="entries" title="Blog Entries" href="http://localhost:8080/roller/atom/myblog/entries" /> <collection contents="generic" title="File Uploads" href="http://localhost:8080/roller/atom/myblog/resources" /> </workspace> <workspace title="Marketing Team Blog"> <collection contents="entries" title="Blog Entries" href="http://localhost:8080/roller/atom/marketingblog/entries" /> <collection contents="generic" title="File Uploads" href="http://localhost:8080/roller/atom/marketingblog/entries" /> </workspace> </service>
Working with collections
So, a workspace is a blog and a blog contains collections of things like entries, uploaded file resources, categories, etc. All of these collections are handled the same way and respond the same way to the HTTP verbs. All support paging, so the server can return a collection in easy to digest chunks. All support query by date, so you can filter collections by start and end date.
To get a collection, do a GET on it's URI (that's the collection's 'href' as listed in the services document).
The services document specifies a URI for each collection. If you do a GET on a collection URI, you'll get back an Atom Collection XML document that lists the first X number of members in the collection. If there are more than X members, then the document will include a next URI which you can use to get the next batch of members. You can also specify an HTTP Range header to restrict a collection to only those between specific start and end dates.
Here is an example of a the collection document XML you might receive by doing a GET on the Blog Entries collection from My Blog above.
<?xml version="1.0" encoding='utf-8'?> <collection xmlns="http://purl.org/atom/app#" next="http://localhost:8080/roller/atom/myblog/entry/77088a1" > <member title="The Connells: Fun and Games" href="http://localhost:8080/roller/atom/myblog/entry/7700a0" updated="2005-04-16T23:07:08-0400" /> <member title="The Connells: Boylan Heights" href="http://localhost:8080/roller/atom/myblog/entry/7700c9" updated="2005-04-15T23:06:09-0400" /> <member title="The Connells: Gladiator" href="http://localhost:8080/roller/atom/myblog/entry/7700c8" updated="2005-04-14T14:05:31-0400" /> </collection>
Each member in a collection document has a title and a URI. To get a member of a collection, you do a GET on the member's URI. To delete it you use DELETE. To update it you use PUT. Here's an example of the entry XML you might receive by doing a GET on the first member of the Blog Entries collection example above:
<entry xmlns="http://purl.org/atom/ns#"> <title>The Connells: Fun and Games</title> <id>7700a0</id> <updated>2005-06-01T19:07:45Z</updated> <content type="html"> Let me tear down into your heart Let me take a seat and stay awhile Let me have a half of your whole Let me keep it for myself awhile </content> </entry>
To add a member to a collection, you simply POST the member to the collection's URI. If you're POSTing a new entry, send the XML for the entry (example entry XML shown below). If you're POSTing a file upload, then send the file.
That's it. Pretty simple huh?
What about authentication?
The Atom spec requires that a server support either HTTP digest authentication, which can be difficult for some bloggers to implement (depending on their ISP and web server), or CGI authentication, which can be a lot easier to implement (I believe WSSE qualifies as CGI authentication, and that's what my Atom implementation uses).
What about devices with limited HTTP support?
Some devices have crippled HTTP client capabilities. For example, some Java J2ME powered cell phones can't do an HTTP PUT or DELETE. If you can't do a PUT or a DELETE, you can use POST instead with a SOAP wrapper that specifies a Web-Method of PUT or DELETE. Atom servers are required to support SOAP POSTS and returning results in SOAP envelopes.
What about draft vs. published states for entries?
Still undecided. Some folks suggest using different collections for entries in different states (draft, approved, published, etc.). But it's more likely that a new element will be introduced in the Atom format to specify the state of an entry.
Summary
That's my summary of Atom protocol as it stands today. I think it's a great improvement over existing blog APIs in terms of features and design. And it's not very difficult to implement. I know because I'm almost done with my server and client implementations. I hope to release them shortly for review. The release will probably be a standalone release of Roller (the Atom server) and my BlogClient UI (the Atom client).
If you see some opportunities for improvement in the protocol, please join the Atom Protocol mailing list and help out. Last call for spec changes in now slated for October. And for the Atom experts out there: what did I get wrong? Leave a comment.
del.icio.us links [June 03, 2005]
- Google Sitemap Protocol
"The Sitemap Protocol allows you to inform search engine crawlers about URLs on your Web sites that are available for crawling" - Digital handshake
WSJ: "Now [blogging] is also becoming a corporate job." - Trackback autodiscovery
Allen explains how to add Trackback autodiscovery to your blog - RSS Ripoff Merchants
Read/Write Web: "What would you do if someone was ripping your RSS feed off"
Apache XML-RPC 2.0 is out
FeedPoster (the little blog app that posts my del.icio.us links via MetaWebog API) stopped working, complaining about unknown XML entity #8217. I didn't see any weird characters in my del.icio.us feed and the error was coming from Apache XML-RPC. I dropped in the brand new Apache XML-RPC 2.0 and problem solved! I love it when that happens. I didn't even have to recompile FeedPoster.
del.icio.us links [June 01, 2005]
- Sco Bro
Scoble's brother is blogging for ComputerWorld - Yahoo blog guidelines
Yahoo! Employee Blog Guidelines: The official version and my own advice (by Jeremy Zawodny) - Participation age
Van Den Hoohen: "Our cause at Sun will be about eliminating the digital divide" - Pint lock
Keep your Ben and Jerrys pint safe and secure - Feedmesh
eWeek reports on Feedmesh, a "next-generation approach for distributing update notifications to the syndicated feeds" - Productive blogger
Keith: "People often ask me how Iâm able to keep my sites moving forward and updated with (hopefully) good content as often as I do."
Status, CC: World
I post my status every Monday on our internal blog server and I'm going to start doing the same thing here. Except for the boring day-to-day operational stuff, most of my status is CC: World.
- Roller 1.1.2: I fixed serveral bugs in Roller's built-in (Lucene based) search engine last week. I got some tips from Matt Schmidt at Javalobby, who had done the same but in the Roller 1.0 branch. I hope to release 1.1.2 with those fixes this week; probably the last release from the 1.1 banch. David Lindsey helped with testing.
- Roller 1.2: since integrating Planet Roller and adding some UI unit-testing stuff, I've haven't been contributing much to 1.2, except for testing and deployment. Roller 1.2 is due out in mid-June, but it's already running a couple of sites (incuding this one).
- Roller 2.0: I've been trying to focus on work in the Roller 2.0 (the group blogging release), but daily fires and 1.X kept getting into the way of progress. Plus, I didn't want to create the 2.0 branch until I had UI unit testing stuff ready in CVS head. Last week, I started working on the database and persistent object changes.
- Roller@Apache: Apache has the Contributor License Agreements for all Roller commiters and the grant form, now we just need some karma. I hope we'll be moving into Subversion in the next week.
- RSS and Atom In Action: After completing all chapters, I went back and looked at Chapter 5 How to parse newsfeeds again. It was really bad and I ended up completely rewriting it over the Memorial Day weekend. Now I'm focused on implementing an Atom protocol client and server so I can wrap up Chapter 8.
- JavaOne 2005: I made travel arrangements for JavaOne. I'll be arriving Sunday before and leaving on Friday after. I'm also planning on being in Menlo Park for a Thursday afternoon blogs.sun.com users group meeting. My talk is at 12 noon, Thursday.
Roller 1.2-dev
This site is now running Roller 1.2-dev (the latest from Roller's CVS HEAD), which includes Allen's cool new configuration system, Anil's new configurable ping feature and Anil's new topic tags plugin which makes it easy to add Technorati tags to any post, for example:
Tags: topic:{technorati}[RollerWeblogger]
Update: I'm not sure why Technorati is not picking up my tag. The tag looks to be properly formatted and I have "pinged" Technorati several times now (included a couple of manual pings).
del.icio.us links [May 27, 2005]
- aigre-douce
"Journal personnel pour usagers avertis" - powered by Roller - FAR2000 blogs
Free Architecture Report blogs - powered by Roller - Battle for the Blogosphere
Yahoo360 and MSN Spaces not "open, flexible platforms that tech-savvy users can extend" - Geronimo nightlies
Tom: "If you're ready to start playing with Geronimo, this is the version to download" - GNOME with Java
Developing GNOME Applications with Java and GNU gcc-java - Dangerous Music
Janne: "Is copyright still enabling innovation and creativity?" - Bruce on Virtuas
"I will be focused on Java application servers and databases" - Matt on Virtuas
Matt: "I will focus on my core expertise as the Spring and Web Frameworks Practice Leader"
Feed poster
I combined a couple of examples from the book to create Feed Poster, a program that checks a list of newsfeeds, composes a blog post listing the items from those newsfeeds posted in the last X days. You could use it, for example, to post a summary of your del.icio.us links at the end of each day. I considered using David Czarnecki's Java API for del.icio.us, which looks awesome, but I ended up using a simple newsfeed parser and blog client instead.
del.icio.us links [May 26, 2005]
- Juan Cole on blog ads
"Do I worry about blog advertising corrupting the medium? Not very much." - Netscape breaks IE
We're not done till IE won't run - Pragmatic Rails
Pragmatic guide to web development with Ruby on Rails (Dave Thomas, et al) - Curry Winer split
Dave Winer explains his bitter breakup with podcast wingman Adam Curry (in a 17 minute podcast)
Under contract!
To continue my little string of personal entries, I've got great news. The house that we bought when I worked for Rogue Wave in Charlotte, couldn't sell when we moved to Raleigh to work for HAHT in 1999 and have been renting-out ever since is finally under-contract (and for a reasonable price).
Sunstone
Leo and I spent the night at my parent's place in Chapel Hill last night and we all went to the Carborro farmer's market this morn in search of berries. I snapped this photo in Mom's garden with my new Treo.
Leo's done surprisingly well this weekend, BTW. He didn't cry at all when we dropped his Mom and brothers off at the airport and he's hardly mentioned them at all since then. He has been very clingy and constantly wants to sit in my lap, so I think he is a little uneasy. On the way home from the airport, we stoppped by the RTPBloggers lunch at Crazy Fire (Leesville Rd.) and the lucky little dude got to meet Rafe Colburn, Scott Parkerson, Mark Pilgrim, Sam Ruby and Josh Staiger.
Fortunately for me, I was able to work my normal routine on Friday because he was in preschool during the morning and had a nice long nap in the afternoon. But, he and the 70F weather is going to make it difficult to finish the chapter 5 rewrites by Monday.
First flight
My boys Alex(8) and Linus(6) didn't know until this morning, but today they're about to take their first airplane ride. Their mom's taking them down to Orlando to see uncle Chris compete in the Florida Half-Ironman and spend a day at Universal Studios. I'm staying home with Leo(2). I told them the news this morning and Alex's response was classic Alex: "awww, I don't wanna to miss school for two whole days." Linus, who consistently plays Pig Will to Alex's Pig Won't, was ecstatic.
« Previous page | Main | Next page »