Contents
foreword xix
preface xxi
acknowledgments xxiii
about this book xxiv
Part 1 Programming the writable web 1
- 0 What you need to know first 3
- 0.1 What you need to know about Java or C# 4
- 0.2 What you need to know about web development 5
- Web services 5
- Java web development 5
- C# web development 5
- Running scheduled tasks 6
- 0.3 What you need to know about XML 6
- Java XML tools 6
- C# XML tools 6
- 0.4 Blog technology terminology 7
- 0.5 The components well use 8
- Blog application building blocks 8
- 0.6 Organization of the book 10
- 0.7 The Blogapps examples 14
- 0.8 Summary 15
- 1 New ways of collaborating 16
- 1.1 Research blogging 17
- 1.2 Status blogging 20
- 1.3 Build blogging 21
- 1.4 Blogging the business 22
- 1.5 Ninas and Rangus grand plan 25
- 1.6 Summary 27
- 2 Development kick-start 28
- 2.1 Blog server setup 29
- 2.2 The Blog Poster example 31
- Invoking Blog Poster 32
- 2.3 Blog Poster for Java 32
- Running Blog Poster for Java 35
- 2.4 Blog Poster for C# 35
- Running Blog Poster for C# 38
- 2.5 Summary 39
- 3 Under the hood 40
- 3.1 Anatomy of a blog server 41
- Blog server data model 42
- Anatomy of a blog entry 43
- Users, privileges, and group blogs 45
- Blog server architecture 46
- 3.2 Anatomy of a wiki server 49
- Wiki server data model 49
- Wiki server architecture 51
- 3.3 Choosing a blog or wiki server 52
- Narrowing your choices 52
- Comparing blog and wiki servers 53
- 3.4 Summary 55
- 4 Newsfeed formats 56
- 4.1 The birth of RSS 57
- RSS 0.91 57
- The elements of RSS 0.91 59
- 4.2 The RDF fork: RSS 1.0 61
- The elements of RSS 1.0 62
- Extending RSS 1.0 with modules 63
- 4.3 The simple fork: RSS 2.0 65
- The elements of RSS 2.0 65
- Enclosures and podcasting 67
- Extending RSS 2.0 67
- 4.4 The nine incompatible versions of RSS 68
- 4.5 The new standard: Atom 70
- Atom by example 70
- Atom common constructs 71
- The elements of Atom 73
- Atom identifiers 74
- The Atom content model 75
- Podcasting with Atom 76
- 4.6 Summary 77
- 5 How to parse newsfeeds 79
- 5.1 The possibilities 80
- 5.2 Parsing with an XML parser 81
- Parsing RSS 1.0 81
- Parsing RSS 2.0 83
- Parsing Atom 86
- 5.3 Parsing with a newsfeed library 91
- The Universal Feed Parser for Python 91
- The ROME newsfeed utilities 92
- Jakarta Feed Parser for Java 93
- The Windows RSS Platform 95
- 5.4 Developing a newsfeed parser 97
- AnyFeedParser for Java 98
- 5.5 Fetching newsfeeds efficiently 104
- HTTP conditional GET 104
- Other techniques 106
- 5.6 Summary 108
- 6 The Windows RSS Platform 109
- 6.1 Windows RSS Platform overview 110
- Browse, search, and subscribe with IE7 111
- Components of the Windows RSS Platform 113
- 6.2 Managing subscriptions with the Common Feed List 117
- Getting started with the Common Feed List 117
- Creating subscriptions 120
- Monitoring events 121
- 6.3 Parsing newsfeeds with the Feeds API 124
- A simple newsfeed parsing example 125
- Parsing extension elements and funky RSS 126
- 6.4 Windows RSS Platform newsfeed extensions 130
- Common Feed (CF) extensions 131
- Simple List Extensions (SLE) 134
- Simple Sharing Extensions (SSE) 136
- 6.5 Summary 139
- 7 The ROME newsfeed utilities 140
- 7.1 Introducing ROME 141
- How ROME works 142
- ROME limitations 146
- The ROME subprojects 146
- 7.2 Parsing newsfeeds with ROME 148
- Parsing to the SyndFeed model 148
- Parsing funky RSS 150
- Parsing to the RSS model 152
- Parsing to the Atom model 154
- 7.3 Fetching newsfeeds with ROME 158
- How the ROME Fetcher works 158
- Using the ROME Fetcher 159
- 7.4 Generating newsfeeds with ROME 161
- 7.5 Extending ROME 163
- The ROME plug-in architecture 164
- Adding new modules to ROME 166
- Overriding ROME 171
- 7.6 Summary 176
- 8 How to serve newsfeeds 177
- 8.1 The possibilities 178
- 8.2 The basics 179
- Which newsfeed formats to support? 179
- How to indicate newsfeeds are available? 179
- Static or dynamic? 181
- Which generator? 182
- Ensuring well-formed XML 182
- Validating newsfeeds 183
- 8.3 File Depot examples 185
- 8.4 Generating newsfeeds with Java 186
- Implementing the File Depot in Java 186
- Generating the File Depot newsfeed in Java 187
- Serving the File Depot newsfeed in Java 190
- 8.5 Generating newsfeeds with C# 192
- Implementing the File Depot in C# 193
- Generating the File Depot newsfeed in C# 193
- Serving the File Depot newsfeed with C# 196
- 8.6 Serving newsfeeds efficiently 197
- Server-side caching 197
- Web proxy caching 198
- Client-side caching 199
- Compression 199
- Caching and compression in a Java web application 199
- Caching and compression in a C# Web application 202
- 8.7 Summary 205
- 9 Publishing with XML-RPC based APIs 206
- 9.1 Why XML-RPC? 207
- Making a method call 207
- 9.2 The Blogger API 210
- 9.3 The MetaWeblog API 211
- The same metadata as RSS 211
- Six new methods that complement the Blogger API 212
- 9.4 Building a blog client with C# and XML-RPC 213
- Why a blog client library? 213
- Three blog client library interfaces 214
- Implementing the blog client library in C# 217
- 9.5 Using the blog client library 224
- 9.6 Summary 225
- 10 Publishing with Atom 227
- 10.1 Why Atom? 228
- Why not XML-RPC or SOAP? 228
- 10.2 How Atom protocol works 229
- Discovery and collections 229
- Atom protocol from the command line 230
- Discovering Atom resources and services 231
- Posting and updating blog entries 235
- Posting and updating media files 238
- 10.3 Building a blog client with Atom protocol 240
- Atom does more 240
- Expanding the blog client interfaces 242
- Atom blog client implementation 244
- Atom blog client in action 245
- 10.4 Summary 246
Part 2 Blog apps 247
- 11 Creating a group blog via aggregation 249
- 11.1 Introducing Planet Tool 250
- 11.2 Configuring Planet Tool 251
- 11.3 Creating templates for Planet Tool 253
- 11.4 Running Planet Tool 256
- 11.5 Planet Tool object reference 256
- 11.6 Under the hood 259
- 11.7 Summary 260
- 12 Searching and monitoring the Web 261
- 12.1 Technorati.com: Conversation search engine 262
- Subscribing to Technorati watchlists 264
- Monitoring tags with Technorati 264
- 12.2 The Technorati API 265
- Getting a Technorati API key 266
- Calling the Technorati API 266
- 12.3 Other blog search services 271
- 12.4 Open Search: The future of search? 274
- Open Search description format 274
- Open Search result elements 275
- Why Open Search? 276
- 12.5 Summary 276
- 13 Keeping your blog in sync 278
- 13.1 Designing Cross Poster for C# 279
- Design limitations 280
- 13.2 Configuring Cross Poster for C# 280
- 13.3 The code for Cross Poster for C# 281
- 13.4 Running Cross Poster for C# and Java 285
- 13.5 Summary 285
- 14 Blog by sending email 286
- 14.1 Designing Mail Blogger for C# 287
- 14.2 Configuring Mail Blogger for C# 287
- 14.3 The code for Mail Blogger for C# 288
- 14.4 Running Mail Blogger for C# and Java 291
- 14.5 Summary 291
- 15 Sending a daily blog digest by email 292
- 15.1 Designing Blog Digest for C# 293
- Design limitations 293
- 15.2 Configuring Blog Digest for C# 293
- 15.3 The code for Blog Digest for C# 294
- 15.4 Running Blog Digest for C# and Java 298
- 15.5 Summary 298
- 16 Blog your software build process 299
- 16.1 Blogging from Ant 300
- Base blog task 301
- Post blog entry task 304
- Post blog resource task 306
- 16.2 Summary 308
- 17 Blog from a chat room 309
- 17.1 A wiki-blogging chatbot 310
- Chat Blogger design 310
- Chat Blogger guidelines 311
- Chat Blogger configuration 312
- Chat Blogger construction 313
- Chat Blogger implementation 314
- Running Chat Blogger 318
- 17.2 Summary 319
- 18 Distribute files podcast style 320
- 18.1 Designing FileCaster 321
- The podcast server 322
- 18.2 Implementing FileCaster 323
- 18.3 FileCaster upload page 325
- 18.4 FileCaster newsfeed 330
- 18.5 Running FileCaster 332
- 18.6 Room for improvement 332
- 18.7 Summary 332
- 19 Automatically download podcasts 333
- 19.1 Designing FileCatcher 334
- 19.2 Implementing FileCatcher 335
- 19.3 Running FileCatcher for C# 338
- 19.4 Summary 339
- 20 Automatically validate newsfeeds 340
- 20.1 Getting started 341
- Setting up Python 341
- Setting up Feed Validator 341
- 20.2 Implementing auto-validator 342
- 20.3 Running auto-validator 344
- Using Windows Scheduled Tasks 345
- Using UNIX cron 346
- 20.4 Summary 346
- 21 The best of the rest 347
- 21.1 Monitor anything 348
- Monitor the weather 348
- Shop with your newsfeed reader 349
- Use newsfeeds to monitor eBay auctions 350
- Monitor upcoming events via calendar newsfeeds 350
- Turn mailing lists into newsfeeds 351
- 21.2 Syndicate everything 351
- Syndicate operating system and network events 352
- Syndicate vehicle status 352
- Syndicate your logs 352
- 21.3 Tag the Web 353
- Create a tagged link blog with del.icio.us 353
- Create a tagged photo blog with Flickr.com 353
- Tag your blog entries with Technorati Tags 354
- Geotag the Web 354
- 21.4 Aggregate yourself 355
- Create an aggregated blog with Planet Tool 355
- Mix your own newsfeeds with Feedburner.com 356
- 21.5 Get the word out 356
- Bring your bloggers together with aggregation 356
- Bring bloggers together with tagging 356
- Track news and blogs to find the conversations 357
- 21.6 Open up your web site 357
- Open up your site with newsfeeds, protocols, and tagging 357
- Syndicate your search results with A9 Open Search 357
- 21.7 Build your own intranet blogosphere 358
- Unite internal communities with aggregation 358
- Build a folksonomy of your intranet 358
- 21.8 Blog your software project 358
- Use newsfeeds to syndicate source code changes 359
- Pull software documentation from a wiki 359
- 21.9 Summary 360
- index 361