Simon Fell > Its just code > April 2003

Wednesday, April 30, 2003

Sara Williams joins the fray.

Wednesday, April 30, 2003

Matt Croydon points out JEP-0072. I see the examples in this suffer from the same problem the original samples from the rpc-jig mailing list, in that the symbol element in the soap request actually ends up in the http://www.jabber.org/protocol/soap namespace not the empty namespace as intended.

Wednesday, April 30, 2003

still digging around with the v2 beta. I wrote a little no-op WebPart which other than some deployment pains, was straightforward enough, I plan to write a few more complex parts today. I'm still trying to get to grips with how development is managed, WebParts being straight .NET assemblies are easy, manage the source code etc as per any other project. But what about portal structure, customizations, look & feel changes etc, how do is that managed. Its unclear how you manage anything at less than portal granularity. On top of that the document management parts seems to be broken, which of course, is the thing I'm most interested in.

Monday, April 28, 2003

Greg is looking to expand on IBlogThis. Greg, how about this instead ?
public interface IBlogIt : IBlogThis
{ 
	// Display configuration dialog to user, if applicable 
	void Configure();

	// Return true if an editing GUI will be shown to the 
	// user when BlogItem is called. In this case, the 
	// aggregator will not display its own editing UI. 
	bool HasEditingGUI();
}

Sunday, April 27, 2003

a new drop of Relaxer is available, it adds pingback and trackback client support as well as support for the WMP blogging plug-in.

Sunday, April 27, 2003

Here's the deal, I have a decent hifi, I want to hook my PC upto it to do 2 things, listen to streaming MP3's (like SomaFM) and to rip vinyl to mp3's. Oh, they're not particularly close and I'd rather not do long rca cable runs, there's conveniently already ethernet access next to the hifi (for the xbox & tivo). couldn't find anything for going to the PC though. Suggestions welcome.

Saturday, April 26, 2003

Ted Leung is tracking gzip support in aggregators. Given that its less than 10 lines of code to support gzip & deflate in .NET (via #ziplib), none of .NET aggregators have a very good excuse for not supporting it. I rev'd my build of Syndirella to include gzip/deflate support (this build also includes blogThis support). binaries or source.

Saturday, April 26, 2003

fixes for the perf problem I mentioned earlier are in CVS. A significant chunk of time is now spent thrashing the COM heap, I don't think there's a lot I can do about that, the typical object per XML type mapping just results in a COM object model that's too fined grained.
Update PocketSOAP 1.4.3 RC3 available. In addition to the perf fix, it also now faults on mU='1' headers that it doesn't know off, as per Glen's suggestion.

Saturday, April 26, 2003

of PocketHTTP and PocketXML-RPC now available.

Saturday, April 26, 2003

Is down, looks like there's been a change at the MSN server end, as it its failing to login with an 'internal server error'

Friday, April 25, 2003

Goods new on the MSDN front from Sara Williams

Thanks Simon! Glad you like the new RSS feeds - we're pretty pleased with them. :-)

I hear ya on the broken links. Seems like it'd be a simple thing to fix, but it's surprisingly complicated. Skipping the overly boring details (which I will share if you'd really like), here's the scoop:

  1. we've actually been working hard to reduce the total number of broken links on the site, and have reduced the overall number by about 95%. Of course, it's not done until we get to 100%, but we are making progress.
  2. we do have a spec for new infrastructure that will provide unchanging, human-typeable URLs. I can't give you a ship date yet, but it is something that we're actively working on.
Thanks Sara, its great news that you're going to tackle this one.

Friday, April 25, 2003

MT
Dave has his Movable Type migration well on the way.

Thursday, April 24, 2003

Brad doesn't like the new MSDN design. I'm basically agnostic, the old site I think looked better, but took forever to load, the new site is noticeably faster and the RSS feeds make me very happy. Spotted a few layout problems using Safari (the right hand column extends out past the right hand side of the window and there's no scroll bar), could be a Safari issue, looked ok in IE 5.2. However I'd give it all up if they would just grok the web and stop breaking links ! I've abandoned trying to bookmark msdn pages, they normally 404 the next time I goto them. Please please please please please give us stable links.

Thursday, April 24, 2003

Shipping confirmation for the new laptop

Thursday, April 24, 2003

SPS
Anyone know if SPS is supposed to work with IE on the Mac ?, when I try and pull up the portal in IE 5.2 on OSX all I get is a page with -1073741428 (0xc000018c) The sys requirements page leads me to believe its not supported. A web interface that only supports IE on Windows is not much of a web interface.

Thursday, April 24, 2003

Hey Keith, can you go show the SPS folks WSE so that they can use DIME for shufling attachments around.

Wednesday, April 23, 2003

Pro choice, as long as you choose doc/literal. Based on Yasser's comments on inferring programming models from WSDL, can I assume that .NET 1.1 no long has the hideous hack of picking the programming model based on whether the message part is called parameters or not ?

Wednesday, April 23, 2003

Sean totally gets it. [Don Box's Spoutlet] Cool, WMP finally catches up (I've been doing this since Jan 2002 with Winamp!) also see the radio code and WS-Amp

Tuesday, April 22, 2003

  • Sam has a bunch of thoughts on RSS. Apparently its my fault that Dave pulled namespaces from RSS 2.0, so I apologize for that. All I really wanted was for Dave to not treat every paying Radio customer as his personal test bed.
  • Joe says some nice things about PocketSOAP, thanks ! Dispite (or because of <g>) Joe's performance claims, I've found a nasty perf bug when you have lots (1000's) of forward refs during deserialization, working on the fix now.
  • We RTM'd the remaining products I was working on, looks like my next project will be based on Sharepoint Portal Server 2.0. So I'm following what Justin is upto with interest.
  • Chris took the red pill.

Monday, April 21, 2003

Is the linchpin of SOAP's extensibility model. If you're doing ASP.NET based web services, run don't walk and go read Tim's latest article on mandatory headers. I've pointed out in the past that the default for how mU='1' is handled in ASP.NET is wrong, and is the reason why ASP.NET still shows a failure for the MustUndertand=true interop test. Lets face it, if a MSFT authored service can't get it right, what hope is there for the rest of us ?

Of course I should point out that a number of other toolkits fail the test, and that PocketSOAP doesn't do anything specific if it receives a response with an mU='1', however 4s4c does the right thing. I haven't seen discussed the expected behavior for WS clients handling mU='1' anyone know what the popular toolkits do ?

Monday, April 21, 2003

Steve mentions how he handles etags for his RSS feed. Steve you should check out HttpCachePolicy.SetETagFromFileDependencies and HttpCachePolicy.SetLastModifiedFromFileDependencies which'll do all that for you.

Monday, April 21, 2003

.....And until then should I just chalk DIME up as out-of-band literally and contractually?  Or do I eat Deem's Dogfood? [Scott Hanselman's Weblog] Personally I think the fact that WSE shipped without any WSDL integration means that the WS folks at MS are rethinking this, particularly in light of the recent discussions about how to represent attachments in the infoset. Once the dust from that settles, I expect to see another proposal that maps that into WSDL.

Monday, April 21, 2003

ok, I totally get why wsdl.exe /server could be useful, but how are you supposed to use it ?, I run wsd.exe /server {some-url} it generates an abstract class, I compile that to a dll, write an asmx page with a new class that inherits from the abstract class, overrides all the methods, but as far as I can tell the asmx engine is ignoring all the attributes on the abstract class, and I need to re-specify all the attributes on my class as well. Is that right ?, seems seriously screwy to me. I checked Keith book, but it doesn't seem to mention it.

Sunday, April 20, 2003

If all goes to plan this should trackback to Sam. So close, got it second time around :)

Sunday, April 20, 2003

In trying out Cocoa I noticed that by default your code has a much better gui/business logic separation than when doing a Winforms app. Perhaps the ASP.NET folks can show the Winforms guys their codebehind stuff.

Sunday, April 20, 2003

For those of you looking at the opml browser, Andrew Grumet points out that XmlDocument.Load won't handle a 302 redirect.

Saturday, April 19, 2003

I added the pingback module to my RSS feed. Looking at how this and trackback:ping handle RSS 1.0, I'm wondering if wfw:comment in RSS 1.0 shouldn't follow the same pattern and use an rdf:resource attribute ?

Saturday, April 19, 2003

The black and orange color scheme was fun for a while (thanks Kelley!), time for something a little less in your face for a while.

Saturday, April 19, 2003

Saturday, April 19, 2003

I updated the BlogThis enabled version of Syndirella to include the rss/channel level bits, its based on Yoles April 13 drop. Binaries Source.

Saturday, April 19, 2003

1.4.3 RC2 posted contains HTTP related fixes.

Friday, April 18, 2003

I've been trying to decide what more (if anything) to do with PocketSOAP, given that both CE.NET (aka WinCE 4.0) and the Compact Framework ship with SOAP support, it seems like the need for a 3rd party soap stack on the mobile platform is coming to an end. Comments/suggestions welcome!.

Thursday, April 17, 2003

OML
OPML has issues (the worst of which go away if the various applications that extend it go to the trouble to document the new attributes they've added), but I don't get it, I'm not seeing why OML is any better. How are naming clashes for the type attribute handled ?, how do I say what type of data is in the data element ? how are naming clashes in the metadata and item elements handled. What are the standard types ? XML has a standard extensibility mechanism, why isn't it used ? In fact I'm borderline on why a hierarchical data structure (an outline) needs a spec to describe how to store it in a hierarchical structure, isn't XML by definition an outline to start with ?

Thursday, April 17, 2003

WSE
Is the DIME support in WSE limited to unreferenced attachments, or can it do referenced attachments as well ?

Thursday, April 17, 2003

Implemented Simon Fell's BlogThis plugin interface. If you save your plugin into a "plugins" subdirectory, SharpReader will find the plugin and make it available in the listview popup menu (shortcut ^B). Simon's last drop of Relaxer uses this plugin mechanism to post to RESTLog. Make sure you do NOT put IBlogThis itself in the plugins directory as this causes .NET to load this interface twice. Since SharpReader will use one copy of IBlogThis and your plugin another, SharpReader will not be able to find the plugin (because it will implement the wrong copy of IBlogThis) [SharpReader 0.9.0.1] Way coooool :)

Wednesday, April 16, 2003

Been meaning to write this up for a while, I finished reading Keith's book, overall I liked it, I'd recommend it (along with Yasser's book) to anyone looking to dive into web services on .NET. It covers a few things I haven't seen anywhere else (YMMV) such as the WSDL handling extension points, and WSE. One minor thing anoyed me, there are HTTP samples that show a HTTP/1.1 request, but is missing the host header (required by 1.1), and SOAP message examples missing namespace declarations, I don't mind this been done to improve the clarity, but it really does need a note to say something's missing.

Wednesday, April 16, 2003

I ran with Sam's idea and put up a modified version of the OPML directory browser that supports trackback. Send a trackback with just a title to add a new folder node, send a trackback with a title and link to add a link. If the link ends in .opml, then it inserts the linked tree at that leaf. An OPML doc of the additions is available. Source code is also available.

Wednesday, April 16, 2003

A new drop of Relaxer, various changes including the BlogThis support rev'd to match yesterdays post.

Wednesday, April 16, 2003

Hey, what's my name doing on this list already? Oh. So, you all know already? K, I'll give you the details shortly. [Robert Scoble: Scobleizer Weblog] Congrats to Scoble on the new job.

Wednesday, April 16, 2003

Dave talks about OPML based directories. I knocked up an ASP.NET based viewer, straight forward enough, you can see it in action (its using Dave's example directory), or grab the source (C#). Couple of comments, (i) I tried to point it at the soapware.org OPML file but was getting XML parser errors on the &oslash; entity at line 61 (my understanding of XML agree's with that). and (ii) looking at the extension on the URL to determine if a link is a sub OPML doc or an external link probably should be using a different type attribute value instead. This'll make dynamically generating OPML for intergration into directories problematic for some platforms/web hosts.

Monday, April 14, 2003

Has soaked up way more time than I'd like, I think I managed to upset pretty much everyone in the process. Anyway, I've settled on the XML based interface, that is contained in the last assembly I published.

namespace Syndication.Extensibility
{
	public interface IBlogThis
	{
		void BlogItem(IXPathNavigable  rssFragment) ;
	}
}

The fragment should contain a RSS document containing the item of choice, the aggregator is free to use the source RSS as is (other than removing the additional items), or to generate a synthetic document from its internal data structures. no normalization of the source data is required. The document should conform to the spec for the RSS version it indicates itself to be.

Example, I selected Sam's post about xhtml:body in Radio from his RSS 0.91 feed, If the aggregator preserves the original RSS, then I'd get a document like

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"
	"http://my.netscape.com/publish/formats/rss-0.91.dtd">
<rss version="0.91">
  <channel>
    <title>Sam Ruby</title>
    <link>http://www.intertwingly.net/blog/</link>
    <description>It's just data</description>
    <language>en-us</language>
    <item>
      <title>xhtml:body in Radio</title>
      <link>http://www.intertwingly.net/blog/1333.html</link>
      <description>&lt;p&gt;
&lt;a href="http://weblog.infoworld.com/udell/2003/04/14.html#a666"&gt;Jon
Udell&lt;/a&gt;: &lt;em&gt;Sam Ruby and Don Box have both demonstrated valid
RSS 2.0 feeds that include a &amp;lt;body&amp;gt; element, properly
namespaced as XHTML. Quietly, last week, I joined the
party.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Way to go Jon!&amp;nbsp; I'm very much looking forward to your
upcoming O'Reilly Network column.&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>

As stated above, the aggregator could also choose to send a synthesized RSS document, perhaps like

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
 <channel>
  <title>Sam Ruby</title>
  <link>http://www.intertwingly.net/blog/</link>
  <description>It's just data</description>
  <item>
      <title>xhtml:body in Radio</title>
      <link>http://www.intertwingly.net/blog/1333.html</link>
      <description>Jon Udell: Sam Ruby and Don Box have both demonstrated valid RSS 2.0
feeds that include a &amp;lt;body&amp;gt; element, properly namespaced as XHTML.
Quietly, last week, I joined the party. Way to go Jon!&amp;#160; I'm very
much looking forward to your upcoming O'Reilly Network column.</description>
      <dc:date>2003-04-14T15:02:28-05:00</dc:date>
  </item>
 </channel>
</rss>

I'm specifically not indicating how the aggregator should find the plug-in, thats upto the aggregator writer. Don has a sample that pulls it from the config file, I posted a version of Syndirella that looks for assemblies in a plugins directory that implement the interface, I'm sure there are plenty of other approaches as well.

Sunday, April 13, 2003

The docs say that path is a physical path, but if you pass it a physical path it throws an exception saying its expecting a virtual path.

Sunday, April 13, 2003

Dare and Sam continue to argue that an XML based interface is better than an interface based on .NET interfaces. I'm not seeing why. Yes, with XML you can add new elements without changing the CLR interface, and do runtime checks for if the element exists or not. How is this different from having the rssItemObject implement multiple interfaces ? and having the plug-in attempt to cast the IBlogThis to the different interfaces it understands (QueryInterface for the COM heads)

namespace Dare.Extensions
{
	interface IBandit
	{
		string language { get ; }
	}
}
namespace RssBandit
{
	class rssItem : Syndication.Extensibility.IBlogTHis, Dare.Extensions.IBandit
	{ 
		...
	}
}

Dare says "I have a choice between being ghetto and coming up with an IWeblogItem2 ..." but how is that any more ghetto than adding {http://dare.extensions}language to the rss fragment and having the plug-in check for its existence ?

So, I'm still not seeing why one is fundamentally better than the other, however having said that, I'm likely to stay with the XML based version because at some point, someone will write an aggregator that preserves the original XML and will be able to pass that through to the plug-in. At that point, the plug-in can handle extensions to RSS without the aggregator specifically supporting it.

Sunday, April 13, 2003

Looks like the Comment API implementation doesn't use any of the XML API's to generate the comment XML, When I use it to reply to a post with an & in the title, it generates this POST
POST /weblog/stories/comments.html?pid=22 HTTP/1.1
User-Agent: RssBandit 1.0d
Content-Type: text/xml
Content-Length: 244
Expect: 100-continue
Host: localhost

<item>
 <title>RE: RESTLog.NET Installation & Configuration</title>
 <link>http://localhost/weblog</link>
 <pubDate>4/12/2003 10:02:23 PM</pubDate>
 <description>did it work ?</description>
 <author>Simon Fell &lt;sf@sf.com&gt;</author>
</item>

Sunday, April 13, 2003

I've rev'd the comments / trackback / pingback code to a new structure, ready for integration into the RESLog.NET server code. Let me know if you spot any problems.

Saturday, April 12, 2003

Don has a suggestion for melding the Data and Object BlogThis interfaces. Looks good for the plug-in writers, who can take whichever approach they want, sucks for the aggregator writers though who have basically implement both. Personally I don't see that the XML version is a big overhead, other people do. Sam and I continue to discuss the relative merits of both approaches.

Saturday, April 12, 2003

I added trackback:ping to my RSS feed. I noticed that for RSS 1.0 it uses an rdf:resource attribute and for RSS 2.0 its just element content. I wonder if wfw:comment should follow the same pattern ?

Saturday, April 12, 2003

I'm sure I've been through this before, but can't find any mention of it. I'm loading a assembly using Assembly.LoadFrom the assembly isn't in any of the probe paths. It loads fine, it calls BinaryFormatter.Deserialize() which fails with a "Initialize error File or assembly name ZakBlog, or one of its dependencies, was not found." How do I tell the remoting goo where to look ?

Saturday, April 12, 2003

Saturday, April 12, 2003

Cool, its gaining some interest. There's pushback on the use of XML, which i can understand, I was trying to stay with XML to run with something similar to what Sam is thinking about, How does this grab you ?
interface IWeblog
{
          string Name     { get ; } 
          Uri    Homepage { get ; }
}
interface IWeblogItem
{
          string    Title { get ; } 
          Uri       Link  { get ; } 
          DateTime  Date  { get ; } 
          string    Post  { get ; } 
}
interface IWeblogItemAction
{
          void DoAction ( IWeblog , IWeblogItem ) ;
}
This also highlights a hole in the rssItem XML approach, in that some channel level info would be useful, perhaps the XML version will need to recreate the feed with just one item in it ? [Updated to use properties instead of methods]

Thursday, April 10, 2003

Thursday, April 10, 2003

Cool, I see that .NET 1.1 fixes the wsdl.exe bug with mime types that drove me insane last year. Is there a list of bug fixes anywhere ?

Thursday, April 10, 2003

There's a new drop of Relaxer with BlogThis support added, and I also put up the binaries and source to the BlogThis enabled version of Syndirella I'm running, this is based on the release Yole cut yesterday. To use Relaxer as a BlogThis plugin for Syndirella, create a plugins directory in the directory where Syndirella.exe is and drop the contents of the Relexer binary drop in there. Fire up Syndirella, right click on a post in the top right pane and pick "Blog This" from the context menu.

Wednesday, April 9, 2003

The BlogThis interface is passed an rssFragment, but I haven't yet talked about what's actually in that fragment. What I'd like is for the aggregator to normalize the source data (as this is something it's already worked out), so that the plug-in doesn't have to cope with the wide range of rss versions, modules and extensions floating around.

The normalized fragment will be based on RSS 2.0, and its root is an item element.

At minimum the title and link elements defined in that spec should be passed through if present in the source (allowing for reasonable mappings if the source isn't rss 2.0).

pubDate and/or dc:date if present should be normalized to a dc:date element

which just leaves the content, I'm going back and forth on this one, originally I was thinking that the aggregator should normalize description / content:encoded / xhtml:body to a single content:encoded element. I'm less sure now, I can see that some people might be offended by the loss of fidelity in the xhtml:body -> content:encoded transform. Anyone have any strong opinions one way or the other on this one ?

And finally to clarify one other point, I'm assuming that the plug-in will present/manage any UI required, not the aggregator, i.e. all the aggregator has to do is collect up the data and pass it to the plug-in (this took about 100 lines of C# in Synderilla, including the automatic plugin discovery code). I want this to be drop dead simple for the aggregator writers to support.

Wednesday, April 9, 2003

Aaron rocks !, I just switched over to his NavigatorReader implementation.

Wednesday, April 9, 2003

  • Thanks to Don for all the XPathNavigator info / code.
  • Mark likes NSIS, so do I, its a refreshing change after years of battling various versions of InstallShield.
  • Demon's email system is still largely down, has been all day, if you've sent me email today, chances are I haven't seen it yet.
  • Two different objective-c bindings for expat. The SaxObjectDecoder in the SKYRiX library looks interesting, a good use of objective-c's runtime messaging. On the downside, I haven't actually been able to get either running yet.
  • .NET Framework 1.1 available
  • Dave is looking at trackback for Radio & Manilla.

Wednesday, April 9, 2003

I started a new page to track the BlogThis stuff.... First Post from Relaxer plugged into Syndirella :)

Wednesday, April 9, 2003

Don suggests I switch out XmlDocument for XPathNavigator in the interface. Thanks for the tip, I can see the advantage on the aggregator side, but on the plugin side, I seem to be stuck with the XPathNaviagor, why can't I wrap an XmlReader around it ? (and I'm sure I can sneak the "I" back in <g>)

Update: I rev'd the bits to IBlogThis and IXPathNavigable

Wednesday, April 9, 2003

I knew as soon as I posted about loading types from the plugins directory, that it'd break !, its very strange, I have a build of restlogClient and its dependencies in a plugins directory under my local build of synderilla. When I call GetTypes on the plugin assembly it throws the RTLE exception.
Assembly al = Assembly.LoadFrom(@"C:\Source\dotnet\Syndirella\bin\Debug\plugins\restlogClient.exe");
Type[] mytypes = al.GetTypes();
foreach(Type tt in mytypes)
{
	Console.WriteLine("{0}", tt.ToString() ) ;
}
Exactly the same code in console app, or new winforms app works fine, as does ildasm.

Update Got it. Synderilla is built against v0.7 of XmlRpc.NET, but restlogClient is built against v0.81 of XmlRpc.NET. When it loads the restlogClient assembly it doesn't load the XmlRpc.dll from that directory but seems to re-use the earlier version its already loaded (guess i need to go re-read Don's book)

Tuesday, April 8, 2003

I started a new page to track the BlogThis stuff, first up, is a signed assembly of the interface I posted this morning.

Tuesday, April 8, 2003

Being able to post to a weblog from within an RSS aggregator is a really useful feature that not many tools currently have. The proliferation of blogging API compounds the problem. Given the number of .NET based aggregators now around, I had a vision for a simple extensibility point within the aggregator to be able to hook in 3rd party blogging tools. This page documents my thoughts, ideas, and code to date.

IBlogExtension

Greg, Luke, Matt, and I discussed a new version of the interface that resulted in IBlogExtension.

A signed version of the assembly containing the IBlogExtension definition is available.

Aggregators

Plug-Ins


Previous version

IBlogThis enabled Aggregators

BlogThis plug-ins

BlogIT extension to BlogThis

IBlogThis history

Tuesday, April 8, 2003

There's a code drop for Relaxer if you're feeling lucky and/or brave.

Tuesday, April 8, 2003

Oh my, I dug around in Apple's Core Foundation XML support today. Its not a pretty sight, not by a long shot. Its XML support is around the level of the DOM level 1, i.e. you can do namespaces, but you get to do all the work yourself. Ten lines of C# blows out into around a 100 lines of objective-C and that's doing the evil trick of looking for hard coded prefixes. I'm hoping that someone has an objective-C wrapper for expat.

Tuesday, April 8, 2003

I should of gone to bed, instead I started looking at the Synderilla code to prototype up my blog this extensibility point idea. I have the extensibility point working, although the plug-in does nothing more interesting than message box the XML, but I find its easier to explain ideas with code than words.

First off, we need a common interface definition for all the tools to reference, I just wanted something simple, so went with this

using System;
using System.Xml ;

namespace Syndication.Extensibility
{
	public interface BlogThis
	{
		void BlogItem(XmlDocument rssFragment) ;
	}
}

Then I wrote my "plug-in" that implements this interface

class test : Syndication.Extensibility.BlogThis
{
	public test()
	{
	}

	public void BlogItem ( System.Xml.XmlDocument rssFragment )
	{
		System.Windows.Forms.MessageBox.Show(rssFragment.OuterXml) ;
	}
}

Then I modified Syderilla to add a BlogThis context menu and for it to dynamically load the plug-in and call it

public void BlogThisItem(NewsItem item)
{
	XmlDocument xml = BuildRssFragment(item) ;
	Console.WriteLine(xml.OuterXml) ;

	Type typePlugin = Type.GetType("test, test") ;
	Syndication.Extensibility.BlogThis bp =
		(Syndication.Extensibility.BlogThis)Activator.CreateInstance(typePlugin) ;
	if(bp!=null)
		bp.BlogItem(xml) ;
}

Compile everything up, drop test.dll and blogthis.dll into the same directory as Synerilla.exe and fire it up, click BlogThis, up pops my message box. :)

Currently the type of the plug-in class is hard coded in the GetType call, that just needs pulling out into some config value, and then just wire an implementation of BlogThis in my RESTLog client and its done. It would also be easy to write a plug-in that exposes the data as XML/Sockets as Sam has been talking about, for extensibility outside of .NET

Tuesday, April 8, 2003

I came across Ted Leung's blog while doing some random referer surfing, some good stuff in there, and I happily spotted the other day that Patrick Logan is back blogging in his new home

Tuesday, April 8, 2003

In progress - A RESTLog client application.

relaxer in action

Version 0.6 (October 18, 2005)

binaries and/or source
  • Support for uploading "media" files (images, zips etc, supporting files for a blog post), just drop the file on the Media Upload Zone. (requires the latest RESTLog.NET server code)

Version 0.5 (May 16, 2003)

binaries and/or source.
  • Support for IBlogExtension added.
  • Improvements to the trackback/pingback client.

Version 0.4 (April 27, 2003)

binairies and/or source.
  • Pingback and Trackback client support added.
  • Support for getting the now playing info from Windows Media Player (requires the WMP blogging plugin)

Version 0.3 (April 15, 2003)

binairies and/or source.
  • BlogThis integration updated to current spec.
  • Spell Checker now behaves in a more expected manner (closing the dialog, cancels the spell check, and cancels the post)
  • code button added for turning the selected part of the post into a <pre> wrapped section, it also entity encodes the selection, make its easy to cut'n'paste exsiting code/xml etc into a post.
  • xml-rpc pings are now sent asynchronously
  • dropping a link on the form will select the best match weblog from all those configured, rather than requiring you to pick the right one first.

Version 0.2 (April 9, 2003)

Tuesday, April 8, 2003

That's mighty annoying, when you cut'n'paste things in the form designer (say to take a bunch of controls and move them into a group box or panel), they loose all their events.

Monday, April 7, 2003

Anyone know what the Winforms equivalent of DoEvents() is ?
Update: its System.Windows.Forms.Application.DoEvents() Thanks Ingo !

Monday, April 7, 2003

Dare was the first to take advantage of the fact that this weblog is now comment API enabled (in addition to its existing pingback/trackback support).

Sunday, April 6, 2003

Giulio Piancastelli is using XOM to generate RSS fragments. I use XmlWriter which is one of things I miss most when I'm not coding in .NET
private string makePayload()
{
    const string TUNE_NS = "http://www.pocketsoap.com/weblog/schemas/music/" ;
    const string DC_NS   = "http://purl.org/dc/elements/1.1/" ;
    StringWriter sw = new StringWriter() ;
    XmlTextWriter xw = new XmlTextWriter(sw) ;
    xw.WriteStartElement("item") ;
    xw.WriteElementString("title", title.Text.Trim()) ;
    xw.WriteElementString("description", data.Text.Trim()) ;
    xw.WriteElementString("link", link.Text.Trim()) ;
    DateTime dt = DateTime.Now ;
    if ( date.Text.Length > 0 )
        dt = DateTime.Parse(date.Text) ;
    xw.WriteElementString("date", DC_NS, dt.ToUniversalTime().ToString("s") + "Z" ) ;
    xw.WriteElementString("tune", TUNE_NS, tune.Text.Trim()) ;
    xw.WriteEndElement() ;
    xw.Close() ; 
    return sw.ToString() ;
}
In fact the whole of System.Xml rocks, with one exception, using SAX its trivial to chain a bunch of SAX handlers together to do interesting/extensible things, whilst this is possible with XmlReader and/or XmlWriter, the number of methods in these classes make it cumbersome. To me they need splitting up into a small core interface, and a helper object that provides all the extra functions (most of the functions in XmlWriter are helpers than could be built on top of the core interface).

Sunday, April 6, 2003

Brad makes some interesting points about the current round of .NET RSS aggregators. For me support posting is a key feature, one of the reasons I like NetNewsWire so much. But rather than all the aggregator writers writing blogging tools for all the different blogging API's, I'd rather see a simple extensibility point, a BlogThis CLR interface that anyone can implement to provide the actual blogging part, and a way to tell the aggregator the CLR type that it should load / call for blogging support. Ought to be pretty straightforward, I'll happily write a RESTLog client plug-in, if anyone else is up for handling the aggregator end.

Sunday, April 6, 2003

checking out the preview release of Harvester. Pretty cool, I like the tabs, and the organize feeds into folders support, of course any aggregator that ships with a subscription to my feed by default has to be good :) Both Harvester and SharpReader are missing one of the most useful features of NetNewsWire and Synderila, the hit space to read the next unread post. I should round out the pack and check RSS Bandit as well, that'll have to wait til I get back from cycling.

Sunday, April 6, 2003

Z1
The furry goat likes the Z1 I went and drolled over one at the local compUSA yesterday, the keyboard in particular is much better than the bouncy keyboard on the tibook.

Sunday, April 6, 2003

Fixed a couple of relative links in my RSS feed. Grrhhh, its annoying that its still best practice to avoid relative links.

Sunday, April 6, 2003

Congrats to Graham and the rest of the TME team on the release of GLUE 4.0

Sunday, April 6, 2003

SharpReader looks interesting, off to download it now.

Sunday, April 6, 2003

I posted the current cut of my RESTLog.NET server code, if anyone is interested in taking a look and/or trying it out.

Sunday, April 6, 2003

Installation
This assumes you're familar with configuring IIS & ASP.NET.

  • Make sure you have ASP.NET installed and running correctly first.
  • unzip the file, preserving directories somewhere convienient ( e.g. c:\inetpub\wwwroot\blog )
  • if you need to, goto IIS admin and create a virtual directory that maps to the directory with the index.config file in. Note that this is entirely optional, but makes things slightly easier.
  • If you didn't create a virtual dir, then move the dll's out of the bin directory to the parent app's bin directory ( e.g. c:\inetpub\wwwroot\bin )
  • Using IIS admin add an application mapping for .html to the ASP.NET Isapi extension. make sure that "check that file exists" is NOT checked. If you choose the limit verbs option, you need to allow GET, POST, PUT, DELETE.
Configuration

Configuration settings for the weblog are stored in the web.config file, open it up in notead, emac, vi, or whatever your particular text editor posion is.

  • <configSections> - this registers the handler for the <restlog.net> section.
  • <httpHandlers> - this maps .html requests onto the weblog engine.
  • <restlog.net> - this houses all the weblog configuration, this is what you'll want to edit.
    • <title> - the title of your weblog, this appears on the web pages, as well as being included in the generated RSS file.
    • <description> - the tagline/description for your weblog, this also appears on the web pages and the RSS file.
    • <author> - enter the name of the weblog's author
    • <indexMaxPosts> - controls the number of entries that appear on the main page, the default is to show the most recent 15 posts, wind this up or down as the mood takes you.
    • <rssMaxPosts> - controls the number of entries that appear in the RSS file, the default is to show the most recent 15 posts, wind this up or down as the mood takes you.
    • <doPingbacks> - If enabled (by setting the value to true), each time you make a new post, it will automatically check the post for links, and send pingbacks to those servers that support it.
    • <rss> - the name of the generated rss file.
    • <basepath> - Important set this to the external path to the root of the blog, i.e., if you installed to c:\inetpub\wwwroot\blog\, then it would be /blog/ if you created a virtual directory call weblog in the root of the web server then it would be /weblog/
    • <templates> - the names of the 3 templates used. by default these are mapped to .config files, as these won't be served to external clients.
      • <main> - this is the main index page, that shows the most recent posts.
      • <monthly> - this is the monthly archive page, by default it uses the same template as the main index, but it doesn't have to, if you want your monthly archive pages to do something different.
      • <item> - this is the template for a single post page.
Templates

The template files index.config and item.config are standard ASPX files, but with a .config file extension. They use ASP.NET's code behind feature so that the weblog engine can provide the relevant information to be rendered. The main and monthly index pages should inherit from the class PocketSoap.RestLog.IndexPage and the item page should inherit from PocketSoap.RestLog.ItemPage.

Both classes expose the information from the web.config file via an instance of the WeblogSettings class available via the Weblog property. The WeblogSettings class has the following properties Title, Description, Author, IndexMaxPosts, RssMaxPosts, DoPingbacks, RssFile, BasePath, MainTemplate, MonthlyTemplate, ItemTemplate.

The Item template exposes the details of the post via an item object, accessed via the Item property, this has the following properties title, description, date, tune, postId, Link, permaLink

The index pages expose a collection (ArrayList) of items to be rendered via the Items property. In addition it has an additional property called ArchiveDate that contains the date of the monthly archived being rendered or the value DateTime.MinValue if its the main index page.

Sunday, April 6, 2003

This weblog is based on an implementation of the RESTLog API that I wrote in .NET. The source code is available under the MIT license, for those who are interesting in running / examining / extending this themselves

Sever (RESTLog.NET v0.1)

The server is implemented as a number of custom HttpHandlers that are compiled to a DLL, and has the following features

  • Any number of weblog instances can be run on a single ASP.NET install.
  • configuration for a particular instance of a weblog is handled entirely in the web.config file.
  • template files (ordinary aspx format pages) are used to control the look & feel / rending of the pages.
  • A static RSS (1.0) file is generated each time there's a change.
  • Support for automatic pingbacks.
  • main index page show recent entries, there are also monthly archive pages and individual post pages.
  • posts are stored as simple XML files, easy to migrate to/from other blogging tools.

You can download the binaries and source for v0.1, then take a gander at the installation and configurations notes. The latest code is available on SourceForge

Client (relaxer.NET v0.6)

A .NET Winforms application for adding/updating/deleting posts for any RESTLog compliant server

  • Simple interface, supports multiple weblogs
  • Spell checker (requires MS Word)
  • Winamp integration (requires WS-Amp) & WMP9 integration (requires the Blog Plugin)
  • Drag'n'drop from the browser to edit.
  • Can ping weblogs.com plus any other servers that implement the weblogs.com ping interface.
  • Includes a pingback & trackback client.

Still in progress, v0.6 is now available.

Client (relaXer v0.1)

A Cocoa application for Mac OS X for adding/updating/deleting posts for any RESTLog compliant server

  • Native Cocoa application
  • Spell Checker
  • iTunes integration
  • Drag'n'drop from the browser to edit

Still in progress, here a screen shot, to keep you going.

Saturday, April 5, 2003

Seairth is working on a Java based RESTLog implementation called Jot.

Saturday, April 5, 2003

Seems the RH8 driver worked by breaking the raid set, and then using the drives as standard SCSI drives, ouch, This probably explains the boot problems i was having as well. Got the array rebuilt, and am attempting to Install Win2003 again.

Saturday, April 5, 2003

Sam responds to my earlier comment on the preview API. At some level all the choices smell RPCish to me, this is about the point I get stuck on the whole RPC/REST/Messaging discussion, why is any of these magically better than the others, they all have something indicates what to do with the message.
POST /blog/1315.html?preview=yes
host: www.intertwingly.net
content-type: text/xml

<Envelope xmlns='....'>
<Body>
<item xmlns=''>....
POST /blog/1315.html
host: www.intertwingly.net
content-type: text/xml

<Envelope xmlns='....'>
<Header>
<b:Preview/>
</Header>
<Body>
<item xmlns=''>....
POST /blog/1315.html
host: www.intertwingly.net
content-type: text/xml

<Envelope xmlns='....'>
<Body>
<b:Preview>
<item xmlns=''>....
The top one seems to follow REST the closest (at least given my understanding of REST), I'm not seeing why 2 is better than 3, but am eager to learn!

Saturday, April 5, 2003

Testing a new pingback client, now I'm not using this one. (It Worked <g>)

Saturday, April 5, 2003

I think now more than ever, Microsoft's competition is closing in on area's that MSFT has in the past been way ahead of everyone else. For example, development IDE's, for a long time Visual Studio was way ahead of anything else, but now Eclipse gives it a serious run for its money, I find there are features in Eclipse that I miss when I switch back to VS.NET, and that it makes me a more productive Java programmer than VS.NET makes me a C# programmer (although I find the CLR's BCL to be more productive than the Java 1.4 class library). Hardware support is another area where MSFT's has always lead, but now, I'm scrambling around downloading drivers so I can install Win2003, whilst RedHat8 had all the drivers I needed bundled in, and the RH8 Install is as painless as any Windows Install I've done.
YMMV, void where prohibited, do not blog and drive, do not microwave, for use only in the country of purchase.

Saturday, April 5, 2003

My test box is going to loose its RedHat8 Install to a Windows 2003 server install. First problem, find a driver for adaptec raid card that's in it, Impressively, RH8 ships with the driver in the box.

Saturday, April 5, 2003

RSS
Simon Willison has an interesting rant on RSS, rsstidy (mentioned in the comments) seems like a good idea.

Saturday, April 5, 2003

One nice thing about Interface Builder is that you seem to get a pretty full set of standard Aqua widgets, the actual widgets that Apple and everyone else uses to build their apps. Contrast this to VS.NET, where Microsoft don't actually seem to ship a product that uses the widgets supplied in their dev tools. [Hey, John Lam liked Interface Builder as well]

Saturday, April 5, 2003

I've heard good things about doing Cocoa / objective-C development on OS X, I was interest to see just how much of an improvement it is over the CW/CFM/Mach-O/Carbon/PowerPlant jungle I've been roaming in recently. I'm not sure if I like the objective-C syntax or not, I keep puttings comma's in where they're not needed, but still I found it to be reasonable. In the space of a few hours I got a RESTLog client running to the point where I could make new POSTs (no edits yet), including slurping the now playing info out of iTunes.



Only time will tell if it really is a big improvement, but I like what I've seen so far enough to continue investigating. Perhaps this is the fun platform I've been looking for.

Friday, April 4, 2003

Sam has updated his comment API to support a preview mode. Whilst I normally agree with what Sam writes regarding Web Services, this one just doesn't sit right with me, it smells very RPCish going against Sams own messaging message. It seems to me, that it ought to be that you send the same message to a different URI to do preview, not tag in a SOAP header. Is this a solution looking for a problem ? I look forward to seeing how this one pans out.

Friday, April 4, 2003

RTM
3 new releases went RTM today, 3 more due next friday. looking forward to catching up on some sleep!

Friday, April 4, 2003

Chris has an interesting write up on his testiimony on Open Source Software for Oregon

Friday, April 4, 2003

Congrats to both Ingo and to Steve on the new positions.

Thursday, April 3, 2003

some insanity regarding Code Warriors mbcs support soaked up far too much of my weekend.

Tuesday, April 1, 2003

RSS
MSDN Now has some RSS feeds, woo hoo, thanks Tim !

Tuesday, April 1, 2003

Noah Mendelsohn has posted to xml-dist-apps an interesting peice about handling streaming in SOAP, particularly in intermediaries. I know I've seen this discussed in the past, but can't remember where, probably on soapbuilders or on DM's soap list.