<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Duck&#039;s Blog</title>
	<atom:link href="http://duck1123.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://duck1123.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Thu, 28 Jan 2010 03:59:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='duck1123.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Duck&#039;s Blog</title>
		<link>http://duck1123.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://duck1123.wordpress.com/osd.xml" title="Duck&#039;s Blog" />
	<atom:link rel='hub' href='http://duck1123.wordpress.com/?pushpress=hub'/>
		<item>
		<title>A post about testing and then something about leiningen</title>
		<link>http://duck1123.wordpress.com/2010/01/27/a-post-about-testing-and-then-something-about-leiningen/</link>
		<comments>http://duck1123.wordpress.com/2010/01/27/a-post-about-testing-and-then-something-about-leiningen/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 03:59:13 +0000</pubDate>
		<dc:creator>duck1123</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://duck1123.wordpress.com/?p=49</guid>
		<description><![CDATA[I am writing this post in emacs tonight instead of the WordPress editor. I don&#8217;t know if it will make much difference, but I&#8217;ll keep it in markdown-mode for tonight. I posted some questions about functional testing in rails. I am currently building what is most likely my most complicated rails application to date. I&#8217;ve been getting better at [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=49&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste">I am writing this post in emacs tonight instead of the WordPress editor. I don&#8217;t know if it will make much difference, but I&#8217;ll keep it in markdown-mode for tonight.</div>
<div></div>
<div>I posted some questions about functional testing in rails. I am currently building what is most likely my most complicated rails application to date. I&#8217;ve been getting better at rails, but some of the things are still taking time to set in.</div>
<div></div>
<div>I&#8217;ve decided to really push the TDD aspect on this particular app. I am exploring using authlogic and declarative authorization to handle the security controls of the app. This is the kind of thing you want you want to be testing like crazy.</div>
<div></div>
<div>I&#8217;ve been having trouble with testing using loops to test access. One of the libraries uses a protected value that is only being set when a page is requested. I managed to log a user in, and that&#8217;s working quite well, but I&#8217;m having trouble logging that user out and a new user in within the same test case. I had this nice, elegant loop crafted that would allow me to establish a data structure that would allow me to control every aspect of the test. Alas, it would fail when it came time to change users. I put tons of debug code everywhere. I was hitting C-c &#8216; r t &lt;tab&gt; &lt;return&gt; like crazy. I cleared everything that could even look like a bit of session. I couldn&#8217;t get Authorization.current_user to reflect the credentials of the current UserSession.</div>
<div></div>
<div>I do feel that I made up for it quite nicely. I managed to take about 3-4 lines of every test and pack it all into a single function that lets me specify the rules of the access check using a map. I&#8217;m quite happy with it</div>
<div></div>
<div>In clojure news. I&#8217;ve finally taken the plunge and have learned Leiningen. I was previously using Maven, so I&#8217;m not that hard of a sell. I like some of the ideas, but truthfully, I&#8217;m more interested in the polyglot maven project. I think it would be interesting if one or both of the projects could make it so they could try to read the other&#8217;s build files if available. So my first task was to take the clj-mql library, which I had just</div>
<div id="_mcePaste">checked out because I&#8217;m trying to learn more MQL, and convert the dependencies to maven. I hit a snag on something, and when I asked</div>
<div id="_mcePaste">about it in IRC, someone asked why I wasn&#8217;t just using lein.</div>
<div></div>
<div>So I threw out my pom.xml and made a project.clj for it.</div>
<div id="_mcePaste">Leiningen currently has a problem with it&#8217;s swank option which is causing src/ to not be on the path. You can always use the repl option</div>
<div id="_mcePaste">or the distasteful add-classpath option, but that will need to be fixed. Someone posted a horribly convoluted series of steps that I</div>
<div id="_mcePaste">attempted, but didn&#8217;t work for me.</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/duck1123.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/duck1123.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/duck1123.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/duck1123.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/duck1123.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/duck1123.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/duck1123.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/duck1123.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/duck1123.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/duck1123.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/duck1123.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/duck1123.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/duck1123.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/duck1123.wordpress.com/49/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=49&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://duck1123.wordpress.com/2010/01/27/a-post-about-testing-and-then-something-about-leiningen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4d29fb194340a4c990639da30f7946af?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">duck1123</media:title>
		</media:content>
	</item>
		<item>
		<title>On Writing. (a second blog post in the night)</title>
		<link>http://duck1123.wordpress.com/2010/01/27/on-writing-a-second-blog-post-in-the-night/</link>
		<comments>http://duck1123.wordpress.com/2010/01/27/on-writing-a-second-blog-post-in-the-night/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 05:12:36 +0000</pubDate>
		<dc:creator>duck1123</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Cherry Coke]]></category>
		<category><![CDATA[Creative Zen]]></category>
		<category><![CDATA[iPod]]></category>
		<category><![CDATA[Macbook Pro]]></category>
		<category><![CDATA[NTFS]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[XBMC]]></category>

		<guid isPermaLink="false">http://duck1123.wordpress.com/?p=47</guid>
		<description><![CDATA[Wow! The response has been impressive. I just posted a blog post, the first I&#8217;ve done in quite some time, and already that post is on the front page of duck1123.wordpress.com. I can&#8217;t believe. I can&#8217;t stand it. How dare that post take of the most coveted first post on that site that just so [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=47&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Wow! The response has been impressive. I just posted a blog post, the first I&#8217;ve done in quite some time, and already that post is on the front page of duck1123.wordpress.com. I can&#8217;t believe. I can&#8217;t stand it. How dare that post take of the most coveted first post on that site that just so happens to be the one that takes it&#8217;s name from the online id I use. I must knock it down by publishing that one.</p>
<p>First I must sprinkle you with fairy dust and while you&#8217;re distracted, I go and grab a cigarette from my wife.</p>
<p>Ha Ha! She may only have two, but I have many. Not only that, but I found some Cherry Coke and the keyboard for my macbook.</p>
<p>I try to like the macbook. I will give it credit, it is not that bad, but for the past several years I have been pretty much exclusively an Ubuntu user. I like Ubuntu and I pretty much have it set up pretty well. I&#8217;ve run dual boot off and on, but recently it&#8217;s been I only rebooted on the weekends if I wanted to play sims or Toby wanted to play Portal and then I would immediately reboot back into linux because ironically I haven&#8217;t been able to get Windows 7 to share it&#8217;s NTFS drive with the mac using the windows share protocol. I have to log into linux to get that.</p>
<p>I&#8217;ve been becoming a big fan of XBMC lately. We don&#8217;t have a TV in our bedroom and I bring the macbook into the bedroom and hook it up to an old CRT monitor that we had extra and the iPod docking clock radio my dad bought me for christmas one year because he thought I had an iPod. I didn&#8217;t. I had a Creative Zen M:Video which I now can&#8217;t use anymore because Toby jammed the cord into it and bent the pins.</p>
<p>Anyway, XBMC (You know. I really wish the technology was (Pandora just asked me if I was still listening (my wife just messaged (can you tell I&#8217;m a lisp programmer) from the other room. ) I said yes) there to nest thoughts better in blog posts) No time for that tonight. I should write that in another post</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/duck1123.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/duck1123.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/duck1123.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/duck1123.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/duck1123.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/duck1123.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/duck1123.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/duck1123.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/duck1123.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/duck1123.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/duck1123.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/duck1123.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/duck1123.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/duck1123.wordpress.com/47/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=47&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://duck1123.wordpress.com/2010/01/27/on-writing-a-second-blog-post-in-the-night/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4d29fb194340a4c990639da30f7946af?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">duck1123</media:title>
		</media:content>
	</item>
		<item>
		<title>I am the master of all (fictional) time.</title>
		<link>http://duck1123.wordpress.com/2010/01/26/master-of-fictional-time/</link>
		<comments>http://duck1123.wordpress.com/2010/01/26/master-of-fictional-time/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 04:48:52 +0000</pubDate>
		<dc:creator>duck1123</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Freebase]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[time]]></category>

		<guid isPermaLink="false">http://duck1123.wordpress.com/?p=44</guid>
		<description><![CDATA[I celebrate the real life event of a type I created for Freebase being promoted to the commons by posting a chaotic rambling of the origin of the Fictional Date/Time type<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=44&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I love freebase.com. It is a very aptly named site. Much like Wikipedia, where you can find yourself getting sucked from link to link, you could spend hours just clicking around. It becomes really dangerous when you consider how low the barrier to entry is to add new information. If you modify your account to keep you permanently in edit mode, then you see all these little blank spaces of where information is missing, and you just can&#8217;t help but fill it in. You don&#8217;t know what language that episode of Will and Grace that you are watching was in, well guess what? I do. Let me just click edit here, type out &#8220;English Language&#8221; pick the item off the list, enter and I&#8217;m done. Oh wait. This doesn&#8217;t list that this character was in this episode. Let me just fix that real quick, and&#8230; You can see how you can become lost.</p>
<p>My real focus, has of course, been in the fictional realm. I love the idea of being able to not only be able to look up any book, tv show, movie or comic book and not only see the actors and authors and artists associated with those works, but the character and places described by these works and the connections between them.</p>
<p>In my fleshing out of some of the fictional universes that are close to my heart, I decided that I wanted to be able to track who was killing who. I had to create two new types for the killers and the killed. Of course only fictional characters can kill other fictional characters, (act of the author notwithstanding)  so the killers and the killed are co-typed as fictional characters, but the killed characters are now dead. We need a type to track that information. So the deceased character is created, i need a way to track when they died. I can&#8217;t use real time. We know that Leto Atreides died in 10,191 AG., but when in AD years was the guild formed? In junior high, I calculated the events of Dune to be somewhere around 50,000 AD using a chronology in the non-canonical Dune Encyclopedia but I don&#8217;t really trust that for serious data entry.</p>
<p>So the Fictional Date/Time type was created. It sliced, it dices, it holds a slot for dates occurring in the Gregorian Calendar and a matched pair of slots for both the numerical date and the fictional calendar system that date is based on. Whether you want to know when lightning struck the clock tower or when Hayden Christensen managed to get himself inserted into Luke&#8217;s post-dramatic stress-induced acid trip you&#8217;re covered.</p>
<p>But wait, there&#8217;s more</p>
<p>If you act now, I&#8217;ll throw in a link to works of fiction portrayed in at no extra cost. No longer will you have to lose sleep trying to figure out exactly when the events of Care Bears II took place. This multi-purpose co-type works well in any situation</p>
<ul>
<li>Books</li>
<li>TV Shows</li>
<li>Plays</li>
<li>Movies</li>
<li>Comic Books</li>
<li>Comic Strips</li>
<li>Autobiographies of political figures</li>
</ul>
<p>Well I am happy to announce that I was able to convince the powers that be at Freebase of the usefulness of the bottom layer in my quest to have a definitive list of every actor to kill someone in an episode of Monk. Fictional Date/Time, Fictional Calendar System, and Calendar System Directionality (forward and reverse) have been removed from my fictionaluniverse base and into the fictional_universe commons.</p>
<p>The deceased fictional character has many problems still owing both to a limitation of the levels of nesting that can occur with CVTs and the fact that because of DC comics, these damn superheroes just won&#8217;t stay dead. I&#8217;ll post more on that in another post.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/duck1123.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/duck1123.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/duck1123.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/duck1123.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/duck1123.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/duck1123.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/duck1123.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/duck1123.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/duck1123.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/duck1123.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/duck1123.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/duck1123.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/duck1123.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/duck1123.wordpress.com/44/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=44&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://duck1123.wordpress.com/2010/01/26/master-of-fictional-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4d29fb194340a4c990639da30f7946af?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">duck1123</media:title>
		</media:content>
	</item>
		<item>
		<title>Wave Client Protocol Whitepaper Brainstorm &#8211; Export 2009-10-24</title>
		<link>http://duck1123.wordpress.com/2009/10/24/wave-client-protocol-whitepaper-brainstorm-export-2009-10-24/</link>
		<comments>http://duck1123.wordpress.com/2009/10/24/wave-client-protocol-whitepaper-brainstorm-export-2009-10-24/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 19:21:21 +0000</pubDate>
		<dc:creator>duck1123</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://duck1123.wordpress.com/?p=39</guid>
		<description><![CDATA[This is a simple export of the conversation we've been having in the wave for client/server protocol development for the benefit of those in the community that do not have Wave access yet. I have applied a little bit of emacs-fu to make it a tad more presentable.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=39&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div>This is a simple export of the conversation we&#8217;ve been having in the wave for client/server protocol development for the benefit of those in the community that do not have Wave access yet. I have applied a little bit of emacs-fu to make it a tad more presentable.</div>
<ul>
<li id="sec-1">[2009-10-14] Devyn (and wavegroupy@appspot.com, Angus Turner, …):Wave Client Protocol Whitepaper Brainstorm
<p>This wave is moderated to keep the responses down, do not be worried if your comments disappear. The result of each branch will summarized as part of the Whitepaper(IB)</p>
<p>Related Waves:<br />
Interaction Flow: Wave Client Protocol Interaction flow<br />
Google Wave Conversation Model(Copied From Whitepaper): Google Wave Conversation Model<br />
Wave Definitions: Wave Definitions<br />
List Of Programming Languages Put Forward For Implementation: List Of Programmers<br />
Wave Data Model: Wave Data Model</p>
<p>Requirements</p>
<p>Functionality<br />
Handshaking<br />
Capabilities</p>
<p>MUST have<br />
XML Schema?<br />
Operation Schemas (adding,OTing, etc)<br />
Recovery<br />
Persistent Changes / Temporary Storage<br />
Annotations (standard names as well? or just provisions)<br />
Push-based protocol. (must not rely on polling as the only means of fetching updates)<br />
Authentication agnostic (use OAuth in examples?)</p>
<p>SHOULD have<br />
XMPP-based transport<br />
Compatible with BOSH / HTTP transports.<br />
Meta-Wavelets (Unread/Read Blips should be standardised)<br />
Bandwidth Throttling (blip by blip, character by character, word by word)<br />
[2009-10-14] * [2009-10-14] Andrew Hyatt:<br />
This probably isn&#8217;t necessary &#8211; just enable chunked messages.</li>
<li id="sec-2">[2009-10-14] Daniel E. Renfer:Is this something built into the XMPP spec?</li>
<li id="sec-3">[2009-10-14] Andrew Hyatt:Not that I know of, however I would be suprised if the XMPP spec would limit us to a character at a time.  By making chunks variably sized, each side gets to decide.</li>
<li id="sec-4">[2009-10-14] Daniel E. Renfer:How would it decide? Would this be something that is communicated, determined automatically by latency or platform capabilities?</li>
<li id="sec-5">[2009-10-14] Andrew Hyatt:Probably any of those things (except for communication of diff size, which I don&#8217;t see happening).  From the protocol&#8217;s point of view, it doesn&#8217;t matter.</li>
<li id="sec-6">[2009-10-14] Daniel E. Renfer:There should be 3 states of update for a connection. Update Incremental, Update Commit, and Update Never.
<p>Update Incremental is what we&#8217;re now used to seeing. The rates are determined by load.<br />
Update Commit sends changes only &#8220;when done has been pressed&#8221; (for low capability clients)<br />
Update Never will not receive updates. The client must poll for changes manually. This is the default model for non-BOSH HTTP connections.</p>
<ul>
<li id="sec-6.1">[2009-10-14] Daniel E. Renfer:There is also the possibility of a 4th state. Update Summary. In this state, the client would receive notification of changes to waves, but not the content.
<p>I&#8217;m not convinced of the need for this one yet, however.</li>
<li id="sec-6.2">[2009-10-14] Devyn:It could be useful, I guess. I&#8217;m sure someone could find a good use for it.
<p>Maybe for new message count-type things?</li>
<li id="sec-6.3">[2009-10-14] Daniel E. Renfer:That&#8217;s what I was thinking it would be used for. I should write out my idea for subscription views. Maybe others can tell me if the 4th state is wanted
<ul>
<li id="sec-6.3.1">[2009-10-17] Justin du coeur:+1 on this – definitely needed so that Summary views can be implemented.  The existing Wave client demonstrates the need here: a user should be able to monitor a lot of Waves simultaneously.  IMO it&#8217;s dead-critical for a good UI.</li>
</ul>
</li>
<li id="sec-6.4">[2009-10-14] Devyn:Devyn: +1</li>
<li id="sec-6.5">[2009-10-14] Devyn:I&#8217;m going to hopefully write a little script for my custom UI… that will have a little count for Conky. Hopefully in Ruby.</li>
<li id="sec-6.6">[2009-10-14] Daniel E. Renfer:I would love my recent waves to show up in that empty spot I have at the bottom of my conky output.
<p>A conky script is a perfect example of the need to support dumb, Update Never, HTTP access. You would be able to define a view for exactly what you would like to have displayed and have those updates be retrieved as an Atom feed. There&#8217;s no need to have a full XMPP client for something like this.</p>
<ul>
<li id="sec-6.6.1">[2009-10-14] joe.d.developer@googlewave.com:I agree, being able to get basic info from a curl / wget script is pretty handy</li>
<li id="sec-6.6.2">[2009-10-14] Devyn:Still, I don&#8217;t think Wave servers should have to start up an HTTP server.. I guess they can if they want to, but this isn&#8217;t the right place for it.</li>
<li id="sec-6.6.3">[2009-10-14] Daniel E. Renfer:http bindings would be an optional interface. The benefits of basing the model around Atompub would be that you only have to work out that model once, and it&#8217;ll work for these or future formats.</li>
<li id="sec-6.6.4">[2009-10-14] Devyn:Yeah… I agree, HTTP should be optional. That&#8217;s more of an application-specific API, not something that needs to be standardized.
<p>Good to note for the future, if anyone asks.</li>
<li id="sec-6.6.5">[2009-10-14] William Edney:Yea, exactly. If the protocol rides on top of XMPP, then you get the whole XMPP/BOSH thing &#8216;for free&#8217; and the HTTP transport is happening at a lower-layer which you don&#8217;t have to worry about.</li>
</ul>
</li>
</ul>
</li>
<li id="sec-7">[2009-10-14] Devyn:Ah, so like &#8220;live typing/etc.&#8221; and &#8220;after hitting done&#8221;, and &#8220;nothing&#8221; etc.<br />
RESTful design. (operations in terms of CRUD operations on resource)<br />
Distinct URI for every element of wave. (blips, wavelets, etc.)</p>
<p>MAY have<br />
PGP signing<br />
Support for alternate serializations. (json, yaml, etc.)</p>
<p>Actions</p>
<p>Wave<br />
create<br />
add wavelet<br />
read<br />
all history [a summary]<br />
fetch changes (requires index number, as given by &#8220;all history&#8221;)</p>
<p>Wavelet<br />
create<br />
add participant<br />
remove participant (no consensus on permissions, but at the present only bots can be removed)<br />
add blip<br />
read</li>
<li id="sec-8">[2009-10-19] Michael Benz:we should also beable to create read only waves. for instance, at the moment, im creating a blog robot. and it would be nice, not have have people edit my blogs. it could be done by adding a participant (like public@a.google.com</li>
<li id="sec-9">[2009-10-19] Daniel E. Renfer:Personally, I would like to see full ACL control built into the spec. Each wavelet is able to specify that all blips must be locked, unlocked, or no preference.
<p>Each blip has individual r/w controls with the ability to set inherit. The privledges of users in the wavelet are persisted to the blip. This would be the default for blips so that anyone with access to the wavelet, has access to the blip.</li>
<li id="sec-10">[2009-10-19] Justin du coeur:In principle I agree, although I wonder if it&#8217;s overkill.  I&#8217;m not coming up with many obvious use cases for quite that level of control.  But yes, the general solution does mean we don&#8217;t have to worry about the edge cases…</li>
<li id="sec-11">[2009-10-20] dalefrancis88@googlewave.com:Yes but i think this would be more a client side thing wouldnt it? what happens if a client is using a different protocol that doesnt have this finctionality?</li>
<li id="sec-12">[2009-10-20] Justin du coeur:Hmm.  Offhand, it seems to me that ACLs matter most to the server.  I mean, all it really tells the client is whether they can try to edit/delete/whatever – the most relevant bit is whether the server accepts that change, and applies it to the official state of the blip.
<p>So if the client doesn&#8217;t have ACL support, and the server does, then the client might allow the user to apparently perform an operation that the server then rejects.  Which implies that the server has some general mechanism for rejecting changes.  (I assume that&#8217;s in the protocol somewhere, but haven&#8217;t gotten to that yet…)</p>
<p>Blip<br />
create<br />
modify<br />
add contributor</li>
<li id="sec-13">[2009-10-14] Daniel E. Renfer:Another question is if I create a blip, you change it, and then I revert or otherwise modify the content so that you no longer have any changes that contributed to this final state, are you still considered a contributor to that blip. Saying yes is easy, but not very accurate. Saying no would require some sort of &#8220;blame&#8221; operation where the contributions to a blip are clearly identified.
<ul>
<li id="sec-13.1">[2009-10-14]Monika Adamczyk (and Angus Turner):<br />
Given that waves tracks any change, I would lean to saying &#8216;yes&#8217; because even if there was no actual content change, the blip was touched and perhaps the change was already pushed to the server before it was removed in the client. Sort of similar to opening a file adding content and then removing it.</p>
<ul>
<li id="sec-13.1.1">[2009-10-14] Daniel E. Renfer:My comment didn&#8217;t concern what is sent and stored on the server, but only what data is sent when the client asks the server &#8220;give me the list of contributors whose contributions make up the current state of this blip&#8221; and then there would be a seperate operation for &#8220;give me all users that have ever made a edit in the history of this blip.&#8221;</li>
<li id="sec-13.1.2">[2009-10-14] Monika Adamczyk:I am not sure I understand difference and purpose of these two operations.</li>
<li id="sec-13.1.3">[2009-10-14] Daniel E. Renfer:suppose you have a blip (generally an IB) that has been edited many times by many people. You could have content that was added by one contributor early on that has been completely replaced by later editors. The first operation would list only the contributors that have added content still visible in the current state of the blip, while the other would list all of the people that have ever edited that blip for it&#8217;s entire lifespan.
<p>Consider commands such as `git blame` that show who has written what lines of a program. (except that wave isn&#8217;t line based)</li>
<li id="sec-13.1.4">[2009-10-14] Monika Adamczyk:If I want to see the history of a blip, then I simply replay the wave and the issues of blame is moot. The history will tell me who and which order made changes.</li>
<li id="sec-13.1.5">[2009-10-14] Daniel E. Renfer:The only real problem I see with that is it would not be possible to determine who did what to a blip without loading the full history of that blip. If we all agree that that is an acceptable loss, then this sort of advanced display could be handled entirely client-side and you can forget I said anything.</li>
<li id="sec-13.1.6">[2009-10-14] David Hubbard:I&#8217;d rather see it a part of the client-server protocol, myself, but if not, it could be an extension, and thus a good test of the protocol&#8217;s extendability.
<ul>
<li id="sec-13.1.6.1">[2009-10-14] Daniel E. Renfer:A spec for searching and indexing waves is a natural extension of what we&#8217;re doing here. We&#8217;re just not ready for it yet.</li>
</ul>
</li>
<li id="sec-13.1.7">[2009-10-14] David Hubbard:As an extension, I&#8217;d hope it ends up being as good as if it were really in the protocol.
<p>That would simplify the initial protocol, for what it&#8217;s worth.</li>
<li id="sec-13.1.8">[2009-10-14] Angus Turner:I think that would be the way to go, create a protocol that can be extended easily, and thus have a simple base protocol</li>
<li id="sec-13.1.9">[2009-10-14] Daniel E. Renfer:We should reference the OpenSearch protocol as a basis for integrated wave searching. (adding link to reference section)</li>
<li id="sec-13.1.10">[2009-10-14] Angus Turner:ok, i&#8217;ll take a read
<p>Note that this implementation of client doesn&#8217;t have &#8216;Cancel&#8217; button.<br />
The only time a change might be not tracked if client modifies blip in &#8216;Draft&#8217; mode, although it is not clear to me what happens when someone wants to back out of &#8216;Draft&#8217; based change (in this case having &#8216;Cancel&#8217; button seems necessary.</li>
</ul>
</li>
<li id="sec-13.2">[2009-10-14] Daniel E. Renfer:I would assume that as long as no changes have been made to the content before the &#8220;draft-mode&#8221; is enabled, then the server has no idea that a change is being worked on and would have no way to track it. It&#8217;s as if you wrote out a reply while offline, and then discarded that reply before syncing.</li>
<li id="sec-13.3">[2009-10-14] Monika Adamczyk:That would also be my assumption how this should be implemented but how do you discard the reply offline if you have no &#8216;Cancel&#8217; option. I assume the client detects every keystroke in the blip as &#8216;blip content change&#8217; event because I have seen robots to be notified about this type of event on every keystroke.</li>
<li id="sec-13.4">[2009-10-14] Daniel E. Renfer:A client must record all changes in a queue of unsynched commits. It is up to the client to decide how or when those commits are pushed out. Google wave pushes those changes out as soon as possible. That is why we are able to see the stream of keystrokes typed. (assuming the user&#8217;s client/webpage has a reliable connection to the wave server.)
<p>An advanced client would be able to hold off on sending out those changes and allow the user to review, modify, and delete changes from their queue before allowing the client to send them off. Discarding an edit would simply be removing all edits related to that edit from the queue.</li>
<li id="sec-13.5">[2009-10-14] Monika Adamczyk:Isn&#8217;t this what the Draft mode is for? Even this client intends to support it at a later time.<br />
I mean, I would imagine you could have a client that always waits for user to approve changes and push them, but that&#8217;s not different from any other IM client. The novelty and beauty of wave is that things are meant to happen in realtime.</li>
<li id="sec-13.6">[2009-10-18] Justin du coeur:That&#8217;s part of it, but I wouldn&#8217;t oversell the character-by-character aspect.  There&#8217;s a lot going on here, and that&#8217;s just one component.  Even without that, you still have:
<p>Threading<br />
Semi-realtime (that is, conversations that can progress quickly in realtime, pause, and then are easy to pick up as other people come online – character-by-character isn&#8217;t the only aspect of &#8220;realtime&#8221; here)<br />
Topical split (that is, conversations are described by their <strong>purpose</strong>, not just the <strong>people</strong>)</p>
<p>And so on.</p>
<p>Personally, I consider the jury still out on whether character-by-character is a good idea for initial replies – I&#8217;d like to experiment with seeing edits happen in realtime, but replies get sent out whole.  (Although this would require some kind of &#8220;Joe is writing…&#8221; protocol to indicate that a reply is pending.)  Even without that aspect, there is a massive difference between the Wave concepts and what you generally see in IM…</li>
<li id="sec-13.7">[2009-10-18] Daniel E. Renfer:XEP-0085 should take care of that if needed.</li>
<li id="sec-13.8">[2009-10-18] Justin du coeur:Yes, that seems reasonable, so long as we&#8217;re using the &lt;thread&gt; mechanism to identify particular wavelets.  (I&#8217;m still catching up with the protocol definition so far, so I haven&#8217;t yet seen whether that&#8217;s the case, but it makes sense.)</li>
<li id="sec-13.9">[2009-10-18] Daniel E. Renfer:Truthfully, I don&#8217;t think the &lt;thread&gt; mechanism of XMPP will be as useful to us. IIRC that allows replies to be grouped to a thread of conversation with the same client. In the wave case, we&#8217;re not connecting to another user in the same way as we do in XMPP. We&#8217;re connecting to our personal wave server which is managing our connection to the wavesphere on our behalf.
<p>This is one of the reasons I am pushing for using Atompub as the basis as it will allow us to use the atom threading extension to track which blip another blip is in reply to..</li>
<li id="sec-13.10">[2009-10-18] Justin du coeur:Hmm.  I&#8217;m not quite making the &#8220;personal wave server&#8221; assumption – IMO, we&#8217;re likely to wind up with a mixed ecosystem of personal and commercial servers.  But that probably doesn&#8217;t have much effect on the architecture.
<p>As for atom threading, I&#8217;m open to that (need to read into it), but note that XEP-0085 is written in terms of traditional XMPP threads; at this point, it&#8217;s not quite obvious to me how it works if you are identifying threads in other ways.  May become clearer after I read into the atom stuff…</li>
<li id="sec-13.11">[2009-10-18] Daniel E. Renfer:By personal, I mean &#8220;per-domain&#8221;</li>
<li id="sec-13.12">[2009-10-18] Justin du coeur:Ah, okay.  We&#8217;ll eventually need to grapple with that sort of terminology.
<ul>
<li id="sec-13.12.1">[2009-10-18] Daniel E. Renfer:I still believe my point remains valid. When I communicate with you, my (hypothetical) wave client is not sending xmpp messages to you, but sending it to the wave component of my xmpp server, which is analyzing my changes, applying them to any other changes it needs to do, and submits it you this waves originating server.
<p>Those changes are then analyzed, sent out to your domain&#8217;s xmpp server, and then sent on to you.</p>
<p>While it would be possible to build the threading mechanism off of XMPP threading. I feel it would be very brittle and wouldn&#8217;t hold up to people communicating with a wave server by means other than XMPP. It&#8217;s best to make whatever we need to identify threading part of the content of the message, not part of the envelope.</li>
<li id="sec-13.12.2">[2009-10-18] Justin du coeur:Oh, absolutely – we&#8217;re really not disagreeing in any significant way here.  I&#8217;d actually been wondering about how we were going to identify wavelets and blips, because it clearly needs to be <strong>some</strong> kind of robust distributed identifier.
<p>I&#8217;m still wrapping my head around the atom thing, since I think of the two specs as fairly unrelated (I associate atom with RSS).  So I&#8217;ll need to take a look at an example or two of how you expect to integrate the ideas.  But I&#8217;m entirely content to believe that there&#8217;s a reasonable way to use them together.</li>
<li id="sec-13.12.3">[2009-10-18] Justin du coeur:Okay – I&#8217;ve skimmed the atom spec, and taken a fresh glance at the Protocol Interaction flow wave.  I&#8217;m not seeing any concrete examples yet, so a bit of question-and-answer, so I can get straight what you&#8217;re thinking here.
<p>Is the notion that we treat each blip like an &lt;entry&gt; in the atom spec?  With a unique identifier under the wavelet, and use the &lt;thr:in-reply-to&gt; syntax to identify the relationships between blips?</p>
<p>Basically, I&#8217;m assuming that you&#8217;re not talking about using atom per se here, so much as lifting the relevant bits of XML syntax where it seems to be useful to us.  Is that correct?</li>
<li id="sec-13.12.4">[2009-10-18] Daniel E. Renfer:That&#8217;s basically what I was thinking. Each blip is linked to it&#8217;s parent blip via the in-reply-to element.
<p>I think the relevant bits are pretty much the entire atom spec though. Entries do not need to be wrapped in a feed element and many of the standard optional fields in an Atom entry wouldn&#8217;t make much sense in a Wave context and would be simply ignored or omitted. (they should still be preserved when present to allow for further extension)</li>
<li id="sec-13.12.5">[2009-10-18] Justin du coeur:Makes sense.  Are you envisioning that this stuff is transmitted as metadata?  I&#8217;d been assuming that this kind of relationship information would be sent as <strong>part</strong> of the blip, but the atom way of doing business seems to be more about separating the content from the metadata about it.</li>
<li id="sec-13.12.6">[2009-10-18] Daniel E. Renfer:Maybe I&#8217;m misunderstanding when you say metadata. The linking from blip-to-blip would be part of the atom representation of the blip, but would not be considered the content of the atom entry.
<p>I need to re-read the atom specs, but I think it may be possible to only need to send that data if you are creating or moving relationships between blips. It would still show up for full representations of a blip at a given point in time, but again would probably only need to be sent when it changes for incremental mode.</li>
<li id="sec-13.12.7">[2009-10-18] Justin du coeur:The way to think about my question is like this.  Atom is, I gather, heavily about metadata.  The atom description of a feed entry isn&#8217;t the entry itself – that comes off the Web.  Rather, it&#8217;s a pointer <strong>to</strong> the entry, with a lot of information about it.  That pointer <strong>can</strong> contain the entire entry, but typically doesn&#8217;t: more often, it&#8217;ll have a summary and a bunch of info about the entry.
<p>So I&#8217;m trying to map this to blips in my mind, and it raises the question of where the atom info and the blip info live in the XMPP stanzas.  Most specifically, is the atom info <strong>inside</strong> the blip XML, or <strong>parallel</strong> to it?  The atom way of doing business would suggest the latter, which hadn&#8217;t been the way I&#8217;d originally assumed, but might have a lot going for it.</li>
<li id="sec-13.12.8">[2009-10-18] Daniel E. Renfer:I feel that a lot of your impressions of atom are based on how it&#8217;s actually used and not on good atompub implementations. Take a look at any of the Google GData api&#8217;s for an example of how atompub can be used.
<p>I picture like this: You have an XMPP stanza, inside that is an atom document that describes all of the characteristics of the blip, and inside that you have whatever xml or plain text content you still need to describe the actual content (or the changesets) of that blip.</li>
<li id="sec-13.12.9">[2009-10-18] Justin du coeur:Okay, sounds reasonable.  I clearly need to read into atom more properly – I&#8217;ve mainly got the layman&#8217;s impression of, &#8220;Kind of like RSS but better&#8221;, and from the sound of things there&#8217;s a lot more to it than that.</li>
<li id="sec-13.12.10">[2009-10-18] Daniel E. Renfer:The atompub protocol is basically a textbook example of how to do REST right. If you understand REST, it&#8217;s very easy.</li>
<li id="sec-13.12.11">[2009-10-18] Justin du coeur:Okay, I&#8217;ll read into that.  I understand REST moderately well – that is, I know the theory, but haven&#8217;t had any good reasons to implement a serious RESTful system yet.  (Closest I&#8217;ve come to that is building some very simple Rails apps.)</li>
<li id="sec-13.12.12">[2009-10-18] Justin du coeur:Is RFC 5023 an appropriate starting place for reading into atompub, or is there something else you&#8217;d recommend?</li>
<li id="sec-13.12.13">[2009-10-18] Daniel E. Renfer:That&#8217;s the definitive guide. If there is a better tutorial to gettingstarted, I don&#8217;t know it. It&#8217;s been a while since I actively tracked it&#8217;s development.
<p>If you&#8217;re into Java (or JVM languages) you might want to check out the Abdera library.</li>
<li id="sec-13.12.14">[2009-10-18] Justin du coeur:Okay, cool.  I&#8217;m going to read the wikipedia page for a quick overview, then dive in.  And I&#8217;ll look into Abdera – I&#8217;m a general languages geek, and pretty comfortable with all the major ones.  (More Scala than Java these days, but that&#8217;s still JVM.)</li>
<li id="sec-13.12.15">[2009-10-18] Daniel E. Renfer:I&#8217;m a major Clojure geek lately, so I know how it is to love the JVM but hate Java. <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li id="sec-13.12.16">[2009-10-18] Justin du coeur:Heh.  Yeah, after spending most of a year trying to program without closures, I was ready to claw my eyes out.  Hence my switch to Scala.  (Clojure is interesting and cool, but Scala&#8217;s a little closer to how I think: I&#8217;m pretty OO to my bones, and I like Scala&#8217;s object-functional attitude.)</li>
</ul>
</li>
<li id="sec-13.13">[2009-10-18] Daniel E. Renfer:I tend to think of per-domain issues as personal issues as I own my own domain and manage the services of that domain just for my own use. Obviously the Google, Facebook, and Yahoo servers are by no means &#8220;personal&#8221;</li>
<li id="sec-13.14">[2009-10-18] Justin du coeur:Makes sense.  I&#8217;m coming at it from a somewhat different direction, since my interest here sprang from a commercial system I&#8217;ve been building as a garage project for the past couple of years.  The inspiration there was mainly LJ, and the discussions over the past couple of years about federating LJ inform my mindset a lot here.
<p>So I tend to expect a range of services, from geeks like us who have our own servers (I&#8217;ve got a half-dozen domains myself, so I understand where you&#8217;re coming from), to giants like Facebook, to boutique servers in the middle that are likely to provide services for distinct communities.  (That middle category is, to me, one of the most exciting.)</li>
<li id="sec-13.15">[2009-10-18] Daniel E. Renfer:I&#8217;m sure we&#8217;ll be able to expect to see many companies comming forth and offering to host wave servers for small buisnesses.</li>
<li id="sec-13.16">[2009-10-18] Justin du coeur:Yeah, definitely.  Indeed, it occurred to me a few days ago that, if my current job were to go south, there&#8217;s a fine business plan lurking in that sort of thing.  (Not just hosting, but enterprise installations as well.)</li>
<li id="sec-13.17">[2009-10-18] Daniel E. Renfer:Keep in mind that you&#8217;ll be competing with Google Apps and Microsoft Live Wave</li>
<li id="sec-13.18">[2009-10-18] Justin du coeur:I know enough companies that are hosted-phobic that there&#8217;s still clearly a business there.  (Indeed, I was chatting with a sysadmin friend of mine about it the other day: her company specifically rejected Google as their mail server, because they were simply too queasy about the security.)  It wouldn&#8217;t <strong>beat</strong> Google, but I suspect a lot of little services companies will wind up co-existing with it, providing in-house enterprise installation of Wave and related services.</li>
<li id="sec-13.19">[2009-10-18] Daniel E. Renfer:I&#8217;m looking forward to the day that Wave federation is just a &#8220;sudo apt-get install wave-server wave-client-php&#8221; away.</li>
<li id="sec-13.20">[2009-10-18] Justin du coeur:Yaas.  I could believe that we could get there in 12 months; I&#8217;m sure of it within 36.</li>
<li id="sec-13.21">[2009-10-21] Zsolt Dollenstein:<br />
if (debian)<br />
if (unstable)<br />
months &lt;= 36<br />
else<br />
months &gt; 60<br />
KTHXBAI</p>
<p>There was a use case in the ACL thread about using wave to communicate with a group of subordinates. (in this case, teacher / students.) If the contributor list isthe list of any user that has ever attempted to make modifications to that blip, (even if that change was canceled or reverted) then that students icon would always be displayed next to the teacher&#8217;s icon, and you would never again be able to determine easily that all the content came from a single contributor.</p>
<p>read<br />
delete</p>
<p>Events</p>
<p>Wave<br />
new Wavelet</p>
<p>Wavelet<br />
contributor added<br />
contributor removed<br />
special?<br />
new blip</p>
<p>Blip<br />
live update<br />
commit update<br />
header update (summary of changes, no content sent)<br />
deleted</p>
<p>Extensions</p>
<p>Search and Index Waves</p>
<p>References</p>
<p>Wave<br />
Expand On Federation Protocol Spec (<a href="http://www.waveprotocol.org/draft-protocol-specs/draft-protocol-spec">http://www.waveprotocol.org/draft-protocol-specs/draft-protocol-spec</a>) using a XMPP extension<br />
Wave Data Model: Wave Data Model<br />
Wave Definitions: Wave Definitions<br />
Conversation Model Spec Here: <a href="http://www.waveprotocol.org/draft-protocol-specs/wave-conversation-model">http://www.waveprotocol.org/draft-protocol-specs/wave-conversation-model</a> (Google Wave Conversation Model )<br />
FedOne Client and Server Here: <a href="http://code.google.com/p/wave-protocol">http://code.google.com/p/wave-protocol</a><br />
Whitepapers (including a Google C/S Protocol): www.waveprotocol.org/whitepapers<br />
Access Controls: <a href="http://www.waveprotocol.org/whitepapers/access-control">http://www.waveprotocol.org/whitepapers/access-control</a><br />
Wave Client Protocol Interaction flow</p>
<p>XMPP<br />
Put Good XMPP Protocol Links here: Good XMPP Protocol Links</li>
</ul>
</li>
<li id="sec-14">[2009-10-14] dalefrancis88@googlewave.com:I think we should kill of this wave and just put the links in here</li>
<li id="sec-15">[2009-10-14] Angus Turner:mmm maybe, except there is no way to delete waves</li>
<li id="sec-16">[2009-10-14] dalefrancis88@googlewave.com:not specifically deleting the wave just stop using it, saves people jumping around, the too many clicks theory</li>
<li id="sec-17">[2009-10-15] Angus Turner:as W3C says: &#8220;depricate&#8221;</li>
<li id="sec-18">[2009-10-15]dalefrancis88@googlewave.com (and Angus Turner):<br />
yeah but to what point, we already have other sections that are lists of links, maybe if it was a specific XMPP discussion that contained links it would be good</li>
<li id="sec-19">[2009-10-18] Daniel E. Renfer:I was hoping that as the actual content of a whitepaper gets further developed, the list of links to good references could get moved to a different wave and the only links that would remain would be the specs we actually need to reference in the spec.
<p>Atom<br />
Atompub over XMPP: <a href="http://tools.ietf.org/html/draft-saintandre-atompub-notify-07">http://tools.ietf.org/html/draft-saintandre-atompub-notify-07</a><br />
OpenSearch: <a href="http://www.opensearch.org/">http://www.opensearch.org/</a></p>
<p>Languages<br />
Implementation Languages: Python and/or Java (put your preferences here: List Of Programming [reference implementation] Languages )</li>
<li id="sec-20">[2009-10-14] David Hubbard:Currently, the wave preview uses the initial blip (IB, the root of the conversation) as the header. Is this the header &#8211; so an update would be like any other blip update?</li>
<li id="sec-21">[2009-10-14] Daniel E. Renfer:I didn&#8217;t write these points, but I&#8217;m assuming they refer to the 3 types of an update to a blip discussed elsewhere in this wave.
<p>Although, there really wouldn&#8217;t need to be a difference between the live and commit update. It&#8217;s simply a normal update. The only one that would be any different is the header or summary update, as that one would only contain minimal information.</li>
<li id="sec-22">[2009-10-14] Angus Turner:could they be refering to a metadata blip (as in the headers in text files etc)</li>
<li id="sec-23">[2009-10-14] Daniel E. Renfer:possible, but the &#8220;no content&#8221; note that got wrapped due to this thread indicates it was refering to a summary update.</li>
<li id="sec-24">[2009-10-14] Angus Turner:like what displays in the inbox in the current client?</li>
<li id="sec-25">[2009-10-14] Daniel E. Renfer:Right, you would want a summary update when you only want to be notified when, and the counts of changes in waves, but don&#8217;t care to know the actual content of those changes. (for bandwidth considerations)</li>
<li id="sec-26">[2009-10-14] Angus Turner:like an email client that downloads the message content but leaves you to click download images and attachments, or on a mobile client where it downloads it as needed</li>
<li id="sec-27">[2009-10-14] Daniel E. Renfer:I&#8217;m still not convinced if it is needed or not because in order to do things like show the live preview in my inbox, the client still needs to parse the full delta feed for that view.
<p>It would be best, however, for showing unread counts next to my saved searches (views).</li>
<li id="sec-28">[2009-10-14] Angus Turner:or a growl notification when you get a new blip</li>
<li id="sec-29">[2009-10-14] Daniel E. Renfer:I figure that a summary update would give you the type of action on the blip, and the blips id, but not much else. Most blips don&#8217;t have titles that you could send, but that could be also sent for new waves in a view</li>
<li id="sec-30">[2009-10-14]Angus Turner (and me):<br />
so its decided it stays <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li id="sec-31">[2009-10-14] David Hubbard:Okay, maybe we can change how this is phrased to &#8220;Header update (summary of changes, no content sent)&#8221; ? Okay.</li>
<li id="sec-32">[2009-10-14] Daniel E. Renfer:go ahead</li>
<li id="sec-33">[2009-10-14] Angus Turner:how come its moved down here :\ i&#8217;m confused</li>
<li id="sec-34">[2009-10-14] Daniel E. Renfer:This was an inline reply that lost it&#8217;s anchor. Now that I see that the conv wasn&#8217;t lost. I&#8217;ll delete my copy and paste job.</li>
<li id="sec-35">[2009-10-14] Angus Turner:ahh ok, i still think the copy/paste job is good, its in the right place and we can delete the blips down here<br />
(maybe this is the way to prevent us hitting the 500 blip limit + finalizing discussions)</li>
<li id="sec-36">[2009-10-13] Daniel E. Renfer:Every Wave User ID should be a XMPP jid and should share things such as presence and contact lists with it&#8217;s XMPP roster.
<ul>
<li id="sec-36.1">[2009-10-13] Daniel E. Renfer:Assuming that this is the case, we need to consider the user experience if a user logs into an IM application (ie. Pidgin) using their WaveID? (note: what is the official term for the id of a wave user)</li>
<li id="sec-36.2">[2009-10-13] Daniel E. Renfer:Basically, what we have to think about is that your standard XMPP chat application is going to try to display any message stanzas to the user. If we are sending a bunch of binary diff data, (I&#8217;m not familiar enough with OT to know what it actually looks like) then it will quickly annoy users that want to dual purpose thier JID.
<p>There was some discussion in one of the other threads about using iq messages for much of this, so that would aleiviate much of this. Does anybody who understands what was discussed in the other thread better than I care to respond?</li>
<li id="sec-36.3">[2009-10-14] Devyn:Hmm… I think Wave should attempt to determine the client… maybe have some kind of special metadata or something for a Wave client? I don&#8217;t know… I&#8217;m not that familiar with the internals of XMPP.</li>
<li id="sec-36.4">[2009-10-14] William Edney:XMPP allows the server (and other clients) to &#8216;discover&#8217; things about a client (and other servers) via a mechanism called &#8216;service discovery&#8217;.</li>
<li id="sec-36.5">[2009-10-14] Daniel E. Renfer:If my idea for views is adopted, then the XMPP server wouldn&#8217;t begin to send wave updates to the client till the client announces itself to the server as being able to process wave updates and sets the update status of one of it&#8217;s views to a state other than &#8220;none&#8221;</li>
</ul>
</li>
<li id="sec-37">[2009-10-13] dalefrancis88@googlewave.com:So in which section in the IB do you think you would put your ideas?</li>
<li id="sec-38">[2009-10-13] Daniel E. Renfer:I wasn&#8217;t sure. That&#8217;s why I chose to make this a blip. I figured we would get some discussion on this point before adding it to the IB.</li>
<li id="sec-39">[2009-10-13] Tad Glines:I agree that the JID should be the same as the participant ID. As for the case where a non-wave client connects to a wave enabled XMPP server, the easiest way to deal with this a two stage process. In the first stage the client does service discovery on the server to locate the WAve JID (e.g. wave.example.com) and then makes a request to the wave component. In the second stage, the wave component does service discovery on the client using the JID in the initial request from the client (e.g. joe<sub>user</sub>@example.com/wave<sub>resource</sub><sub>1234</sub>). This does two things; 1) prevent a non-wave client from ever getting wavey stuff, 2) allow the server to tailor its responses based on what it discovers about the client.</li>
<li id="sec-40">[2009-10-13] Daniel E. Renfer:You know, there were some minor points there that I was just missing. I didn&#8217;t think about the fact that a wave server would almost always be done as a component.
<p>So would the Wave server show up like most transports do?</li>
<li id="sec-41">[2009-10-13] James Purser:A wave server won&#8217;t necessarily be done as a component of a XMPP server. It may infact build that functionality into it. Also remember that wave servers may in fact be extensions of other communication packages (Email servers and so on).</li>
<li id="sec-42">[2009-10-18] Justin du coeur:Just so.  I&#8217;m vaguely toying with the notion of building a Scala-based server (the needs of the protocol we&#8217;re talking about suit Scala extremely well), and while that <strong>might</strong> be done as first writing a generic XMPP skeleton and then adding a component, it would actually be easier to start with something Wave-centric and then refactor out the general framework if and when somebody really cares…</li>
<li id="sec-43">[2009-10-13] Tad Glines:The basic exchange I mentioned would be the same even if the wave server was also the XMPP server. The key is that a wave server would not just start spamming every XMPP client it knows about. It would wait until the client starts a wave conversation, then do client capability discovery (or accept whatever the client says about itself via some other method).</li>
<li id="sec-44">[2009-10-13] Angus Turner:is the conversation model part of the C/S Protocol?
<ul>
<li id="sec-44.1">[2009-10-13] Daniel E. Renfer:I would say that, while not directly part of the protocol, the conversation model is a very important thing to reference. We need to have API hooks to access any of the relevant bits of that model.</li>
</ul>
</li>
<li id="sec-45">[2009-10-13] Rémy Sanchez:what do you call the conversation model ?</li>
<li id="sec-46">[2009-10-13] Angus Turner:<a href="http://www.waveprotocol.org/draft-protocol-specs/wave-conversation-model">http://www.waveprotocol.org/draft-protocol-specs/wave-conversation-model</a></li>
<li id="sec-47">[2009-10-13] Rémy Sanchez:oh that one ok…<br />
/me should stop asking stupid questions and read the whitepapers first</li>
<li id="sec-48">[2009-10-13] Angus Turner:i&#8217;m working my way slowly through them…….<br />
it seems 5 minutes reading, 5 minutes break is good <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li id="sec-49">[2009-10-13] Devyn:Great work guys!</li>
<li id="sec-50">[2009-10-13] William Edney:Yes &#8211; this is excellent. When I get some time, I&#8217;ll do some review. Thanks guys.</li>
<li id="sec-51">[2009-10-13] Daniel E. Renfer:Does anyone know of a hosted version of the FedOne javadoc? It would be helpful to have that for reference when developing this spec.
<p>I generated a copy and could put it up somewhere, but I don&#8217;t really have a stable heb host at this point, so if someone has space to offer, I could send you the files.</p>
<ul>
<li id="sec-51.1">[2009-10-17] Zsolt Dollenstein:There you go: <a href="http://zsol.web.elte.hu/wavespec/wavespec.html">http://zsol.web.elte.hu/wavespec/wavespec.html</a><br />
Have fun <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li id="sec-51.2">[2009-10-18] Daniel E. Renfer:This is a good reference to have, but I was actually looking for a documentation of the java source code to the FedOne server. It&#8217;ll be handy to be able to reference the implementations of existing servers to know what functionality we are not yet supporting in this spec.</li>
<li id="sec-51.3">[2009-10-19] Zsolt Dollenstein:I can get that up as well when I get home today. stay tuned.</li>
</ul>
</li>
<li id="sec-52">[2009-10-14] Daniel E. Renfer:Views
<p>When a client connects to a server, it sends it&#8217;s requested update state for each of it&#8217;s saved views or any new ad-hoc ones that it wishes to track. A view is a fully specified and parameterized saved search. When changes happen on a server, the server compares those events against the users&#8217; views. The server will then push out updates for any changes that match a user&#8217;s views depending on the update status.</p>
<ul>
<li id="sec-52.1">[2009-10-14] Devyn:Sounds good <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </li>
<li id="sec-52.2">[2009-10-19] Michael Kleber:Is this really a reasonable thing to require of every server?  Is there some cap on how much saved-search work or complexity the client can force the server to do on its behalf?</li>
<li id="sec-52.3">[2009-10-19] Daniel E. Renfer:Well, my intention was to reduce the work required to be done by the server by only requesting the waves that match a query. this way a server doesn&#8217;t have to send updates for the thousands of waves that match the spam view and not the inbox view. The server would only have to compare events against a clients active subscriptions.
<p>It would be perfectly reasonable to for a server to decide that it&#8217;s going to limit the number of active subscriptions a user is allowed to have at any one time.</p>
<p>If you can think of a better way to control what updates the user is interested in, I&#8217;m glad to hear it.</li>
<li id="sec-52.4">[2009-10-19] Michael Kleber:The naive alternative is that you only see updates of the search you&#8217;re looking at – in the current UI, that means the one being shown in your &#8220;search results&#8221; pane on the left.  When the user switches to a saved search, the client queries the server for results, then either subscribes for some limited period of time or polls periodically for updates.</li>
<li id="sec-52.5">[2009-10-19] Daniel E. Renfer:That&#8217;s exactly how I envisioned the views system working. The client would announce a subscription for any &#8220;mailbox windows&#8221; open. When the user closes one view. (inbox) and opens another view (By Me) the client changes the subscription on the inbox view to none (or summary if you want unread counts displayed) and sets the new view to a more active state. (incremental, but you could probably get away with commit for a mailbox view)
<p>When actual waves are opened for viewing, the client sets or unsets any relevant subscriptions at the wave-only level so the server is only sending information for the conversations the user is actually interested in.</li>
<li id="sec-52.6">[2009-10-19] Michael Kleber:Ah, great!  Glad to see I was misunderstanding you almost as much as you were me below <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />
<p>So what if a client wants to have a list of &#8220;saved searches&#8221;, like this UI does?  Probably few of them will be active views at any moment, so most of them aren&#8217;t covered by what you wrote under Views above, right?  Do you plan on a place to store these many inactive searches?</p>
<p>(Obviously this could just be saved in a per-user private wave, in the same way I talked about for read-blip metadata below.)</li>
<li id="sec-52.7">[2009-10-19] Daniel E. Renfer:There are 2 types of views. Saved and Ad-hoc. Saved views would handle the case of the system defined sections you see in the navigation section as well as the saved searches. Switching to one of those saved searches would require simply changing the subscription state of that view.
<p>Ad-hoc views would be for the searches you type into the search bar. They would function exactly the same as any other view, except they are removed once the subscription is canceled.</p>
<p>A server can choose to proactively filter updates into inactive views if it wishes, or it can do the search only when the view is activated. (implementation detail)</p>
<ul>
<li id="sec-52.7.1">[2009-10-19] Justin du coeur:Assumption check: I&#8217;ve been figuring that, if the server is extending the system with additional semantics – specifically, specialized views – that these would be treated as &#8220;saved views&#8221; with predefined semantics.
<p>I&#8217;ve got a specific agenda here: I&#8217;m expecting to extend the system with integration into social networks, which would probably means &#8220;views&#8221; that correspond to externally defined communities in those networks.  So I want to make sure I understand how that would fit into the design…</li>
<li id="sec-52.7.2">[2009-10-21] Zsolt Dollenstein:If what I think is anywhere near your idea, then yes, these things defined by the server (additionally to what Google&#8217;s current implementation defines) should be considered views. Whether they are saved or ad-hoc doesn&#8217;t really matter IMO, that should be a client-only notion.</li>
</ul>
</li>
<li id="sec-52.8">[2009-10-19] Michael Kleber:Got it.  So the possibility of proactive filtering does provide a reason for &#8220;saved searches&#8221; to be handled differently than arbitrary per-user metadata that a client might want the server to remember for it.</li>
<li id="sec-52.9">[2009-10-21] Zsolt Dollenstein:Don&#8217;t you guys think this will overcomplicate the protocol? I think the best solution is to let the client open multiple views at once. That should solve it.</li>
<li id="sec-52.10">[2009-10-21] Daniel E. Renfer:The client is free to open multiple views still. The client could very well to decide to open a subscription to every view they have access to. Subscribing to a new view wouldn&#8217;t cancel the subscription to any other views. If you want to stop receiving updates you would either have to send a update-none request, or send an unavailable presence. (other presence states, such as DND might have an effect on the flow of information as well)
<p>The servers will have to take care, however, that if an update appears in multiple views, that only a single notification is sent.</li>
<li id="sec-52.11">[2009-10-21] Justin du coeur:Also, we should keep layering in mind.  I suspect that we&#8217;re quickly going to find that thinking in terms of &#8220;the protocol&#8221; is the wrong way to go.  My guess is that we&#8217;re going to wind up with an entire suite of XEPs, not all of which will be mandatory.
<p>So I&#8217;m not <strong>too</strong> worried about overcomplicating the protocol – I&#8217;m more concerned about separating concerns carefully, so that bits can be separated from each other…</p>
<p>Internally, these views could be considered as pubsub nodes. Every user has their own default view, (your inbox) and will be able to perform operations on their set of views. (add, remove, change update status, etc.)</li>
<li id="sec-52.12">[2009-10-18] Justin du coeur:Sounds good, but we&#8217;ll need <strong>some</strong> kind of server-based concept of a saved view, essentially as user metadata, so that thin clients can operate.  Might be out of scope for this particular spec, but we ought to say so explicitly if so.  (I suspect we&#8217;ll wind up with a list of &#8220;out of scope&#8221; topics that will eventually wind up generating their own specs.)</li>
<li id="sec-52.13">[2009-10-19] Michael Kleber:Let me just point out that there&#8217;s no need for this to get any special treatment from the server: the alternate approach is one where clients store this kind of per-user metadata in a private wave.  If many clients end up agreeing on a format for that per-user metadata, we end up with a de facto &#8220;client-client protocol&#8221; – it makes a lot of sense for, e.g., the &#8220;read blips&#8221; metadata to go that route, for example.
<ul>
<li id="sec-52.13.1">[2009-10-19] Justin du coeur:Sure, that&#8217;s a possibility.  Indeed, CommYou was just starting to go down that road: I was in the middle of designing a generalized metadata system a few weeks ago, expecting a fair amount of stuff to migrate into it.
<p>That does imply that we need a convention for how to look up a well-defined &#8220;kind&#8221; of private wave, though.  Would name work?  I dunno.  The CommYou design was leaning towards what amounted to GUID identifiers for metadata types (but open, so that anybody could add a new type), to address questions like this.  I haven&#8217;t noticed anything obviously like this in here yet, although I&#8217;m still reading in.</p>
<p>(ETA: And I see that Daniel made the same point below – good, we all seem to be thinking in similar directions here.  (As I desperately attempt to not use the word &#8220;wavelength&#8221; in conversation…))</li>
</ul>
</li>
<li id="sec-52.14">[2009-10-19] Daniel E. Renfer:So you&#8217;re suggesting that read state should be stored in the client itself? Are you sure about that? That would mean that if I read a bunch of waves in Client A, when I switch to Client B they will all be unread again. That doesn&#8217;t seem like a very nice situation.
<p>Even if you had some sort of C/C protocol to sync read information, you would require both clients to be running and able to communicate with each other. My client at home would have no chance syncing with the client at my work. (behind a firewall and shut down for the evening.)</p>
<p>It seems better that metadata for a user&#8217;s read state be stored on that user&#8217;s wave server. (to reduce the calls to originating servers when checking read state) Also, this mechanism for per-user metadata could be extended to things such as bookmarking and private tagging of blips as well as private notes about a wavelet/blip</li>
<li id="sec-52.15">[2009-10-19] Michael Kleber:No, sorry, I seem to have been completely unclear.  I was the original person asking for metadata to be stored on the server, for which there wasn&#8217;t a mechanism in Elliott&#8217;s first straw-man proposal.  The question is, should that state get some special consideration? – meaning both (1) a place in the client-server protocol and (2) standardization across clients.
<p>I&#8217;m just pointing out that you can decide &#8220;no&#8221; on (1) – that is, the C-S protocol can be silent on read-blip-state – but still get all the benefits as long as you get (2).  The state is stored on my local wave server: but it is stored in a special wavelet, with private (=to user only) visibility.  The server treats it like any other data, but the client knows to fetch that wavelet and use the data in it to mark blips as read/unread, and update it as appropriate.</p>
<p>If many clients all used the same format of private wavelet to hold this data, then what we get effectively is a client-client protocol.  But it&#8217;s all server-mediated; the clients are never communicating directly with one another, and thin clients might hold no such state at all.  Multiple clients can share the state of the metadata blip, and update it using the full OT machinery.</li>
<li id="sec-52.16">[2009-10-19] Daniel E. Renfer:Yes. I misunderstood you. I agree with what you described, but I feel it&#8217;s probably worth specing out how to deal with private metadata. (which should just be stored in waves to make the processing easier.)</li>
</ul>
</li>
<li id="sec-53">[2009-10-14] Daniel E. Renfer:Atompub over XMPP?
<p>I&#8217;ve brought this issue up in other waves, and it didn&#8217;t generate the discussion I had hoped. How do you all feel about using Atompub and minimal Atom documents in the protocol.</p>
<ul>
<li id="sec-53.1">[2009-10-14] Devyn:I&#8217;m fine with it… as long as most of the popular languages have support for Atom. Most do… but not all.  I know Ruby, Python and Java do. Most likely languages like C as well. Haskell probably, and Lisp-variants likely. So, should be fine.
<p>(helpful tip: spewing out thoughts directly without further formatting is not a good idea, as I just did xD)<br />
Atom takes care of many of our issues. It gives us a well thought out means of tracking modification dates, unique identifiers, threaded documents, authors, extensibility, and RESTful architecture.</li>
<li id="sec-53.2">[2009-10-14] joe.d.developer@googlewave.com:Atom seems like a good match for a number of the things we need, much as you have outlined. Perhaps it would also make some of the &#8216;simple&#8217; publishing mentioned earlier a non-issue to implement.</li>
</ul>
</li>
<li id="sec-54">[2009-10-14] David Hubbard:There is an interesting comment, in the fedone code:<br />
src/org/waveprotocol/wave/examples/fedone/waveserver/RemoteWaveletContainerImpl.java:129</p>
<p>// TODO: only one request history should be pending at any one time?<br />
// We should derive a new one whenever the active one is finished,<br />
// based on the current state of pendingDeltas.<br />
federationProvider.requestHistory(waveletName, domain, expectedVersion, appliedAt, -1, new HistoryResponseListener() {</p>
<p>This is the most useful when a federated host is getting back in sync. But it has a direct corollary in client code.</p>
<p>It would be possible to define semantics for multiple &#8220;request history&#8221; messages to overlap, or it would be possible to re-define how history is tracked, instead of using the current version numbers. Using a great big lock to limit the number of possible history requests in flight would probably hurt scalability.</li>
<li id="sec-55">[2009-10-14] Daniel E. Renfer:Would this be an issue with push-based XMPP? The server would track what updates need to be sent to a client based on the last state the client communicated and then would push out new events as they occur.
<p>This should only be an issue for HTTP-based pull requests, and even then it&#8217;s a client issue as the server will just send whatever it&#8217;s asked for. It&#8217;s up to the client to not get confused by overlapping messages.</li>
<li id="sec-56">[2009-10-14] David Hubbard:Ok, yeah that works for the basic cases for a client. I think federated servers definitely need to all behave correctly for this case, but it&#8217;s the same as for the client, they just need to not get confused.
<p>The remote host that hosts the wave will push updates and the requestHistory() method is the equivalent of HTTP-based pull requests. fedone not defining it doesn&#8217;t mean we can&#8217;t come up with a sensible way of behaving.</p>
<p>Like &#8211; if the federated host (or a client) is missing pieces of history, request them (pull). Otherwise, wait for new events (push).</p>
<p>It would only be challenging for a host to keep up if a new event arrived out of order and the host had already sent a pull request. Events probably will always arrive in monotonic order of version number (so, version 3, then 4, then 5…) This question is relevant for clients, too &#8211; but clients are easier to deal with, like just shutting it down and logging in again.</li>
<li id="sec-57">[2009-10-14] Daniel E. Renfer:I need to search through the whitepapers again, but I think a method already exists for determining if messages are missing with federation. (may just be the ack of &lt;iq/&gt;) That method could probably be applied to this case as well.
<p>regardless, the drawback of using a http pull backend (non-BOSH) is that the responsibility is on the client to make sure they have an up to date view of the system.</li>
<li id="sec-58">[2009-10-14] David Hubbard:If the client is logging in from a computer (phone, whatever) that hasn&#8217;t been connected to the wave before (the user bought a new computer), they will not be in the same state as the server is expecting… Like TCP, ultimately the edge of the network has to have the smarts… IMHO</li>
<li id="sec-59">[2009-10-14] David Hubbard:fedone determines that a pull request is necessary by looking at the version number. If the local repository has all the previous version numbers already, the update is applied. Otherwise, it is deferred and a pull request fetches the missing updates.
<p>This is only used (currently) when the remote host initially adds a participant on the local host. After that, the local host can keep track of the wave, and doesn&#8217;t need to pull again. Similarly, a client would only rarely make pull requests, and those would typically occur during the &#8220;initializing&#8221; stages.</p>
<p>I am not aware of anything about this in the whitepapers.</p>
<ul>
<li id="sec-59.1">[2009-10-14] Devyn:There&#8217;s a lot of intense discussion going on here… keep it up <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />
<p>It helps, it really does… even if someone is completely wrong, sometimes interesting ideas come out of them…</p>
<p>Oh, and I really wish there was a way to leave a wavelet… you can join, but not remove yourself… it should also be smart enough to get rid of a wavelet that no one is attached to.</p>
<ul>
<li id="sec-59.1.1">[2009-10-14] David Hubbard:So leaving a wavelet is a way of expressing &#8220;I&#8217;m not going to participate anymore.&#8221;
<p>And up above, Daniel is suggesting a way of finding out the &#8220;git blame&#8221; – well, to use other words – the current participants in a wave based on actual content in blips, and the edit history.</p>
<ul>
<li id="sec-59.1.1.1">[2009-10-14] Devyn:Yeah, I use Git a lot <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  I&#8217;m a Rubyist. That would be neat.</li>
</ul>
</li>
</ul>
</li>
<li id="sec-59.2">[2009-10-14] Daniel E. Renfer:Google Wave should be more like git
<p>Of the two possibilities, I think the one that lets you express your intentions is more valuable in the short term.</li>
</ul>
</li>
<li id="sec-60">[2009-10-14] James Purser:OKay I&#8217;m going to stick this here in the hopes that it proves to be useful. I&#8217;m working on a Federation protocol walk through.
<p><a href="http://wavingtheshiny.collaborynth.com.au/books/fedone-book/federation">http://wavingtheshiny.collaborynth.com.au/books/fedone-book/federation</a></li>
<li id="sec-61">[2009-10-21] Daniel E. Renfer:Here&#8217;s a question for the group. If every changeset is given a unique xsd:dateTime timestamp by the originating server of a wave, and every edit to a blip is given a simple integer revision id, will that be enough to track and transmit the state of a wave for synchronization purposes. It seems like it should be enough to me, but I was wondering if anyone had any thoughts as to why that wouldn&#8217;t work.
<p>So if I need to fetch only the updates to a wave since I last signed in, I need only to transmit the timestamp of the most recent change that I have along with my subscription request.</p>
<p>Also, keep in mind that these timestamps must be the time that the originating server actually committed the change to the wave, not any notions of time that either my client, or my federated server may have.</li>
<li id="sec-62">[2009-10-21] Zsolt Dollenstein:Don&#8217;t the waveprotocol.org papers talk about this issue?</li>
<li id="sec-63">[2009-10-21] Justin du coeur:I haven&#8217;t read deeply enough into the protocol papers yet to know if they answer this, but I do have a concern about duck&#8217;s question.  Basically, the issue I&#8217;m worried about is whether timestamps suffice, or if the server needs to track every &#8220;read&#8221; operation.
<p>This has been lurking at the back of my mind pretty much since I started on Wave, because it&#8217;s a conspicuous difference between Wave and my CommYou prototype.  CommYou worked exactly as duck suggests: things track the last time I read this thread, and think in terms of the difference between then as now.</p>
<p>But it <strong>looks</strong> like Wave is actually tracking blip-by-blip.  I haven&#8217;t tried the experiments to verify this yet, but it appears that it knows exactly which blips I&#8217;ve read and which ones I haven&#8217;t, even if I&#8217;m reading in an ad-hoc order.  So when I come back and do &#8220;next unread&#8221;, it needs to know which ones I&#8217;ve actually read.</p>
<p>The protocol entirely aside, the storage implications of this are kind of terrifying: it implies a (user x blip) number of records to manage.  There are some optimizations that could be performed (at the cost of code complexity), but more than anything this has given me pause about implementing a practical, fully-functional reference server.</p>
<p>So here&#8217;s my related question: does anybody know for sure whether this last-read state is being tracked blip-by-blip, or simply as a per-wavelet timestamp?  It has dramatic implications for the UI, the protocol, and the server implementation…</p>
<ul>
<li id="sec-63.1">[2009-10-22] Michael Kleber:The have-I-read-this-blip status is definitely tracked for each blip.  In the current implementation, this per-blip read bit is stored in a private wavelet, much as we talked about for other metadata above.
<p>Why is the storage cost for this so awful?  Your usenet news reader did the same thing decades ago.  Sure, it&#8217;s stored on the server instead of in each user&#8217;s client; welcome to the cloud…</li>
<li id="sec-63.2">[2009-10-22] Justin du coeur:Sure, but this is still a lot of data, even for the cloud, especially when you consider how fast things are likely to move once the Wave infrastructure matures.  I mean, my guess is that you&#8217;re reading, what, a blip every 10-20 seconds while you&#8217;re going through this?  Wave makes it very easy for conversations to become extremely fast-paced, especially once they become interactive.
<p>Basically, the point is that, while Google can handle that level of data, I must admit that it makes me a little nervous for the open-source projects.  We need to put some serious work into optimizing that table (what was called the ReadState table in CommYou), because it&#8217;s likely to swamp everything else in the system if you&#8217;re not careful.</p>
<p>(Granted, there are some interesting unanswered questions of usage and convention here.  It&#8217;s obviously less of an issue if the average Wave has three participants.  But in a lot of the usage models I&#8217;ve been looking at, 75-person Waves wouldn&#8217;t be uncommon, and that can really stack up pretty fast…)</li>
<li id="sec-63.3">[2009-10-22] Michael Kleber:Sorry to keep prolonging this, but I&#8217;m still not quite seeing it.  The blips in a wave get some canonical ordering, and then the per-user &#8220;what have I read?&#8221; state takes up one bit per blip per reader.  So the read-blips state for, say, this very blip?  It will only be larger than the blip itself when it has ~2500 readers.
<ul>
<li id="sec-63.3.1">[2009-10-23] Justin du coeur:It&#8217;s easy to say, but the coding involved is more than a little hairy.  Even assuming the canonical ordering is easy to calculate and track (plausible in the Wave protocol, but generally a bit hairy to get the DBMS programming efficient), packing the bits into the readstate record is another bit of somewhat hairy programming, especially to do it efficiently.  (If you&#8217;re doing this as a conventional RDBMS system, it almost demands a stored procedure in the DB, to keep the traffic to reasonable levels, and that&#8217;s a PITA when dealing with OS projects that need to be DB-neutral.)  And note that the average Wavelet isn&#8217;t necessarily all that long, so the packing is likely to be inefficient.  (Since the record is going to be reader x wavelet.)
<p>I&#8217;m not saying it&#8217;s impossible – just that, like I say above, we have to pay extremely close attention to the optimization.  Frankly, it looks like one of the harder aspects of implementing the system, so we need to go into this with our eyes open.</p>
<p>(Granted, a lot of this is probably not quite so awful in the Actors-oriented architecture that I have in mind for the hypothetical Scala implementation, which would manage the Wavelet as an in-memory Actor that serves as a write-through cache.  But that&#8217;s easier in Scala than in many other languages, and is a fairly unusual architecture still.)</li>
<li id="sec-63.3.2">[2009-10-23] Justin du coeur:Okay, so putting together the conversations I&#8217;ve had with Michael today (here and f2f), let me summarize my current thinking about the readstate question.
<p>Assume:<br />
Wavelets are big, complex and evolving.  Until today, I had thought that &#8220;wavelet&#8221; == &#8220;thread&#8221;; Michael corrected this misimpression.  Basically, a wavelet is a complex tree.<br />
ReadState – the relationship between a reader and a Wavelet – is stored on the reader&#8217;s &#8220;home&#8221; server, not the authoritative server for the Wavelet.</p>
<p>First off, I don&#8217;t believe in the bitmap-by-blip approach, for two reasons.  It&#8217;s a bit tricky to begin with, because the &#8220;canonical ordering&#8221; isn&#8217;t obvious.  We&#8217;re talking about a complex tree structure that is getting in-line insertions frequently, so the order isn&#8217;t trivial.</p>
<p>More importantly, even if we assume that the server imposes some arbitrary canonical ordering (say, by creation time of the blip), it still doesn&#8217;t work, because blips are live objects.  Just because I have read this blip now doesn&#8217;t mean that it <strong>stays</strong> read.  So we have a remarkably messy problem of marking blips <strong>unread</strong> when they get edited.  That&#8217;s hard enough when everything lives on the same server; it&#8217;s nightmarish in a distributed architecture.  (Probably possible, but I don&#8217;t like the smell of it.)</p>
<p>So I think that, if we are using a packed bitmap, that implies that we are using a bitmap of the <strong>history</strong> instead – reader * wavelet * transforms.  That does have a simple canonical ordering, and never reverses – once you have read a particular history state, the server will never cause that transform to become unread.  (You might do so manually, but that&#8217;s not a problem.)  But it implies that the space constraint is probably hundreds or thousands of bits per reader * wavelet.  And the code is still pretty complex: the server probably needs to deal with a lot of calculation of what it means for the client to say which transform is affected when the client says, &#8220;I&#8217;ve read this blip&#8221;.</p>
<p>I also suspect it&#8217;s not the best optimization, at least from an efficiency POV.  In practice, you probably get better compression by thinking in terms of the transform stamp that this reader has read through, plus an exception list.  (That is, &#8220;I&#8217;ve read through frame 273, but not transforms 270 and 271.&#8221;)  I&#8217;d bet that that turns out to be considerably less storage than the flat bitmap, but the code is even hairier and harder to get right.</p>
<p>So overall, my main takeaway is still that this is a tricky problem, and one we need to tackle relatively early in developing a <strong>serious</strong> reference server, because I&#8217;d bet that it&#8217;ll take effort to get right and will touch a bunch of problems…</li>
<li id="sec-63.3.3">[2009-10-23] Michael Kleber:Great point about blips becoming un-read — and more generally, the view in the UI may well be a function of what&#8217;s changed since you last read a blip, as shown in highlight and strikeout on this client.
<p>However you store it, what you ultimately need is a map from blips to last-read-transform (not a bitmap over blip history, since what you read is the current state of a blip always), right?  But since reading everything is a common use case, I&#8217;d guess store it as &#8220;All blips read through transformation N; also {b1-&gt;N1, b2-&gt;N2,…}&#8221;</p>
<p>Probably at this point we should find out what the present client actually does <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li id="sec-63.3.4"><span class="timestamp-wrapper"> <span class="timestamp">2009-10-23 12:19</span></span> Justin du coeur:Correct – I was thinking about that common use case in the above suggestion.  I&#8217;d guess that most often you will be caught up to a certain history marker in the Wave; the exception list is needed because you <strong>can</strong> read random-access, and can sometimes read the wave linearly down threadwise, which isn&#8217;t the same as history order, so you can leave things in a pretty messy state relative to the history.</li>
</ul>
</li>
<li id="sec-63.4">[2009-10-23] Zsolt Dollenstein:Well the problem is that your assumption of one bit per read blip doesn&#8217;t really hold, because we also need to identify the blip itself. The obvious solution to this would be a blipid -&gt; read bit mapping, which is significantly larger than one bit per blip.<br />
Remember, read state is stored in a private wavelet, not in the blip itself.</li>
<li id="sec-63.5">[2009-10-23] Daniel E. Renfer:Also keep in mind that if the read state is stored by the wave server the user connects to and not the originating server, then that 2500 reader number (which in truth is still quite large for even the busier waves) would be broken up by the number of wave servers that have users that are reading that wave. It&#8217;s still potentially a lot of information, but I&#8217;m sure there are ways of optimizing it. You wouldn&#8217;t necessarily need to store the full wave id if you could use a smaller id to point to the full id. You could reduce the size of the id to say, a long int. (in practice though, you would probably want to allow for more room.)</li>
<li id="sec-63.6">[2009-10-23] Justin du coeur:Actually, that&#8217;s an interesting point.  Are we clear about which side stores the readstate?  I don&#8217;t find it 100% obvious: it depends on how we define the relationship between the wave and its readers.  I suspect that the approach Daniel mentions (readstate on the user&#8217;s &#8220;home&#8221; server&#8221;) is right, but it&#8217;s worth thinking about whether there are tradeoffs…</li>
<li id="sec-63.7">[2009-10-23] Michael Kleber:I&#8217;m definitely with Daniel on this: which blips I&#8217;ve read is private information.  First, storing it in multiple places, or even in one place far from me, is wasteful.  And moreover, as long as I trust the wave server I&#8217;m connected to, I shouldn&#8217;t need to trust the originating wave server to protect my privacy as well.</li>
</ul>
</li>
<li id="sec-64">[2009-10-21] Brian May:Do you really trust the clock on every computer? What happens if a clock is wrong?
<ul>
<li id="sec-64.1">[2009-10-21] Devyn:I agree with that, I think it should be based on UTC server time.</li>
<li id="sec-64.2">[2009-10-22] Justin du coeur:Probably so (it simply makes things easier and more robust than if everybody has to translate time zones around), but I think that goes past Brian&#8217;s point.  Even if everybody&#8217;s using UTC, we need to make sure we don&#8217;t have major problems if, eg, someone&#8217;s server is running 20 minutes slow.
<p>Brian, where are you seeing dangers here?  Are there areas in the protocol that you think might break down if a server clock is off?</li>
<li id="sec-64.3">[2009-10-22] Devyn:I doubt it would &#8220;break down,&#8221; however maybe it would be a good idea to recommend the servers to synchronize with pool.ntp.org?</li>
<li id="sec-64.4">[2009-10-22] Justin du coeur:Oh, absolutely – everybody&#8217;s going to be happier if the clocks are synched.  I just want to make sure that things are resilient if they aren&#8217;t – in a distributed environment like this, somebody&#8217;s occasional going to have a ridiculous clock setting.  (Especially if, as Daniel&#8217;s suggested, some folks are running personal Wave servers – more points of possible failure, with fewer eyes on them.)</li>
<li id="sec-64.5">[2009-10-22] Devyn:It shouldn&#8217;t break it, but it may or may not be confusing to the user.</li>
<li id="sec-64.6">[2009-10-23] Daniel E. Renfer:This was why I was suggesting using the time settings of the originating server. Clock synchronization doesn&#8217;t come into play as long as that server is consistent. The client would be using the timestamps from the server, even if they didn&#8217;t make sense for it&#8217;s own time settings. (last update was in the future)
<p>I&#8217;ve been holding off on contributing further on this issue until I have time to go over the server protocol again. There are some things in that spec I still don&#8217;t fully understand, and I think they may give clues as to how we should be progressing. Even so, the C/S protocol need not bear any relation to the S/S protocol, but it pays to reuse as much of the components as possible. We should still consider that the clients will most likely not be nearly as advanced as the servers will be, and we should try to reduce the amount of complexity for the client.</li>
<li id="sec-64.7">[2009-10-23] mailtolanger@googlewave.com:Just as Zsolt Dollenstein said why not use the allready available version number and wavelet history hash to bring wavelets in order? Why do we even need a timestamp?</li>
<li id="sec-64.8">[2009-10-23] Daniel E. Renfer:The reason I initially suggested looking to the Atom protocol is because Atompub already comes with well-defined rules for modifying and synchronizing collections of authored XML-serializable documents. (documents with a unique uri, one or many authors, a set initial publish date, and a mutable last modified date.) I felt (and still do) that support for the dumb clients out there will be key to the adoption of Wave.
<p>It&#8217;s still unclear to me as to how exactly these hashes are produced, and if the history hash is suitable information to be transmitting to a client, or not. (as I said, I need to look over the whitepapers again.)</p>
<p>If we are using hashes to control synchronization, then some (but not all) of the reasons for looking at Atom go away.</li>
<li id="sec-64.9">[2009-10-23] mailtolanger@googlewave.com:As far as I understand it the hash is produced by hashing the value from version 0 up to the current version much like git hashes the changeset of each commit. So simply checking if the hash is the same should give you enough confidence that the two states are in sync.
<p>So first you check if the version numbers match and only if they match you actually do the hash and see if they match, if they do you know you are up to par with the server.</p>
<p>This has the advantage of being independent of any time information and the versioning gives a natural ordering for the different operations while still being independent on the order they are actually being executed.</li>
</ul>
</li>
<li id="sec-65">[2009-10-22] Zsolt Dollenstein:Okay, quoting from the Client-Server paper from waveprotocol.org :<br />
A client and server can verify that they are referring to the same wavelet state by exchanging a version number and a &#8220;wavelet history hash&#8221;. The latter is a rolling hash over the sequence of operations between version zero and the provided version number.<br />
So, I pass back the question by asking: why do we need the timestamp?<br />
Tags:<br />
Files<br />
Wave Client Protocol Whitepaper Brainstorm</li>
</ul>
<div id="postamble">
<p class="author">Author: Daniel E. Renfer<br />
<a href="mailto:duck@kronkltd.Belkin">&lt;duck@kronkltd.net&gt;</a></p>
<p class="date">Date: 2009-10-24 15:15:56 EDT</p>
<p class="creator">HTML generated by org-mode 6.30c in emacs 23</p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/duck1123.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/duck1123.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/duck1123.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/duck1123.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/duck1123.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/duck1123.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/duck1123.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/duck1123.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/duck1123.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/duck1123.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/duck1123.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/duck1123.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/duck1123.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/duck1123.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=39&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://duck1123.wordpress.com/2009/10/24/wave-client-protocol-whitepaper-brainstorm-export-2009-10-24/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4d29fb194340a4c990639da30f7946af?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">duck1123</media:title>
		</media:content>
	</item>
		<item>
		<title>Test Post from Hero</title>
		<link>http://duck1123.wordpress.com/2009/10/18/test-post-from-hero/</link>
		<comments>http://duck1123.wordpress.com/2009/10/18/test-post-from-hero/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 03:47:33 +0000</pubDate>
		<dc:creator>duck1123</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://duck1123.wordpress.com/2009/10/18/test-post-from-hero/</guid>
		<description><![CDATA[It seems inevitable but whenever I test out a new blog client I have to post some stupid message that i&#8217;m doing a test. Well here it is. Test message from my android phone<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=38&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It seems inevitable but whenever I test out a new blog client I have to post some stupid message that i&#8217;m doing a test.</p>
<p>Well here it is.</p>
<p>Test message from my android phone</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/duck1123.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/duck1123.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/duck1123.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/duck1123.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/duck1123.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/duck1123.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/duck1123.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/duck1123.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/duck1123.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/duck1123.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/duck1123.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/duck1123.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/duck1123.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/duck1123.wordpress.com/38/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=38&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://duck1123.wordpress.com/2009/10/18/test-post-from-hero/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4d29fb194340a4c990639da30f7946af?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">duck1123</media:title>
		</media:content>
	</item>
		<item>
		<title>Architecture of Mycyclopedia, Pt. 1</title>
		<link>http://duck1123.wordpress.com/2009/09/24/mycyclopedia-architecture-1/</link>
		<comments>http://duck1123.wordpress.com/2009/09/24/mycyclopedia-architecture-1/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 03:48:19 +0000</pubDate>
		<dc:creator>duck1123</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[compojure]]></category>
		<category><![CDATA[mycyclopedia]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[semantic web]]></category>

		<guid isPermaLink="false">http://duck1123.wordpress.com/?p=35</guid>
		<description><![CDATA[I forgot I had this blog. I no longer have a website. I once took a small amount of pride in my website, but my heart has always belonged to Mycyclopedia. It&#8217;s coming along well now. I want to release it, because I know I&#8217;ve come up with some cool tricks to do with compojure, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=35&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I forgot I had this blog. I no longer have a website. I once took a small amount of pride in my website, but my heart has always belonged to Mycyclopedia.</p>
<p>It&#8217;s coming along well now. I want to release it, because I know I&#8217;ve come up with some cool tricks to do with compojure, but I&#8217;ll have to wipe my history first. It&#8217;s been a long road to where I&#8217;m at. I played around for a time using Jena and a real RDF parser, but I&#8217;ve found it has made my job much easier taking a simplified approach and just faking it.</p>
<p>One of the beauties of RDF is it allows you to say anything about anyone. I needed to take this one step further and track information about who said what, and what are the privacy levels of what they said, and when did they say it, and was them saying this prompted by another user saying something that they saw.</p>
<p>I realized that I could assign my own uri to the class of Entries that appear in the Subject position of any statements. I can always refer to another uri by giving it a sameAs relation, but that, like all other statements, is subject to the trustworthiness of the person that made that claim.</p>
<p>So if I can create my own uri&#8217;s, then I don&#8217;t have to muck about with using the full uri internally, and can refer to entries and statements by their id. When I was modeling this using a pure RDF engine, I had to store all of the metadata as my actual statements, and had to construct model views of the information using reification.</p>
<p>Now that I am using a simple MySQL database, everything is much simpler. The statement table is the most complicated.</p>
<p>I no longer feel like writing, so I will stop this now.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/duck1123.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/duck1123.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/duck1123.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/duck1123.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/duck1123.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/duck1123.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/duck1123.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/duck1123.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/duck1123.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/duck1123.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/duck1123.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/duck1123.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/duck1123.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/duck1123.wordpress.com/35/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=35&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://duck1123.wordpress.com/2009/09/24/mycyclopedia-architecture-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4d29fb194340a4c990639da30f7946af?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">duck1123</media:title>
		</media:content>
	</item>
		<item>
		<title>Heartless: Song Titles as Answers Meme</title>
		<link>http://duck1123.wordpress.com/2009/03/02/heartless-song-titles-as-answers-meme/</link>
		<comments>http://duck1123.wordpress.com/2009/03/02/heartless-song-titles-as-answers-meme/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 15:51:07 +0000</pubDate>
		<dc:creator>duck1123</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://duck1123.wordpress.com/2009/03/02/heartless-song-titles-as-answers-meme/</guid>
		<description><![CDATA[Put your iPod or other music player on shuffle.For each question, press the next button to get your answer.YOU MUST WRITE THAT SONG NAME DOWN NO MATTER HOW SILLY IT SOUNDS!Tag your friends who might enjoy doing this. IF SOMEONE SAYS “IS THIS OKAY” YOU SAY?Throes of Rejection &#8211; Pantera WHAT WOULD BEST DESCRIBE YOUR [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=27&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Put your iPod or other music player on shuffle.<br />For each question, press the next button to get your answer.<br />YOU MUST WRITE THAT SONG NAME DOWN NO MATTER HOW SILLY IT SOUNDS!<br />Tag your friends who might enjoy doing this.</p>
<p>IF SOMEONE SAYS “IS THIS OKAY” YOU SAY?<br /><a href="http://www.freebase.com/view/authority/musicbrainz/33d1b97d-0717-48a8-bfc1-846a2c1be86c">Throes of Rejection &#8211; Pantera</a></p>
<p>WHAT WOULD BEST DESCRIBE YOUR PERSONALITY?<br /><a href="http://www.freebase.com/view/authority/musicbrainz/78b41371-be0d-4325-87b3-9c67582e9f79">Pushing Me Away &#8211; Linkin Park</a></p>
<p>WHAT DO YOU LIKE IN A GIRL?<br /><a href="http://www.freebase.com/view/authority/musicbrainz/ea815a3b-4a54-4a99-961c-2130d26ee399">Born of a Broken Man &#8211; Rage Against the Machine</a></p>
<p>WHAT IS YOUR LIFE’S PURPOSE?<br /><a href="http://www.freebase.com/view/authority/musicbrainz/641d4b51-8f44-43e8-bc8d-e09a594b9e3e">Conspiracy of One &#8211; The Offspring</a></p>
<p>WHAT IS YOUR MOTTO?<br />&nbsp;Overrated (Everything Is) &#8211; Less Than Jake</p>
<p>WHAT DO YOUR FRIENDS THINK OF YOU?<br />Gasoline &#8211; Seether</p>
<p>WHAT DO YOU THINK ABOUT VERY OFTEN?<br />Heaven Sent &#8211; Hinder</p>
<p>WHAT IS 2+2?<br />A Whole New World &#8211; Brad Kane and Lea Salonga</p>
<p>WHAT DO YOU THINK OF YOUR BEST FRIEND?<br />A Condom? &#8211; Dane Cook<br /><span></span><br />WHAT DO YOU THINK OF THE PERSON YOU LIKE?<br />The Ghosts of Me and You &#8211; Less Than Jake</p>
<p>WHAT IS YOUR LIFE STORY?<br />Symphony of Destruction &#8211; Megadeth</p>
<p>WHAT DO YOU WANT TO BE WHEN YOU GROW UP?<br />Lucas With the Lid Off &#8211; Lucas</p>
<p>WHAT DO YOU THINK WHEN YOU SEE THE PERSON YOU LIKE?<br />Capricorn &#8211; 30 Seconds to Mars</p>
<p>WHAT DO YOUR PARENTS THINK OF YOU?<br />Fell on Black Days &#8211; Soundgarden</p>
<p>WHAT WILL YOU DANCE TO AT YOUR WEDDING?<br />Second Chance &#8211; Shinedown</p>
<p>WHAT WILL THEY PLAY AT YOUR FUNERAL?<br />Cheer Up, Boys (Your Make Up is Running) &#8211; Foo Fighters</p>
<p>WHAT IS YOUR HOBBY/INTEREST?<br />Remember the Time &#8211; Michael Jackson</p>
<p>WHAT DO YOU THINK OF YOUR FRIENDS?<br />Suicide Note, Part 1 &#8211; Pantera</p>
<p>WHAT’S THE WORST THING THAT COULD HAPPEN?<br />Miracle &#8211; Foo Fighters</p>
<p>HOW WILL YOU DIE?<br />P.S. Shock the World &#8211; Less Than Jake</p>
<p>WHAT IS THE ONE THING YOU REGRET?<br />Ich Will &#8211; Rammstein</p>
<p>WHAT MAKES YOU LAUGH?<br />The Story &#8211; 30 Seconds to Mars</p>
<p>WHAT MAKES YOU CRY?<br />Vendetta &#8211; Slipknot</p>
<p>WILL YOU EVER GET MARRIED?<br />James &#8211; Blue October</p>
<p>WHAT SCARES YOU THE MOST?<br />Chemical Marriage &#8211; Mr. Bungle</p>
<p>DOES ANYONE LIKE YOU?<br />Year of tha Boomerang &#8211; Rage Against the Machine</p>
<p>IF YOU COULD GO BACK IN TIME, WHAT WOULD YOU CHANGE<br />Epic &#8211; Faith No More</p>
<p>WHAT HURTS RIGHT NOW?<br />Long Way Down &#8211; Goo Goo Dolls</p>
<p>WHAT WILL YOU POST THIS AS?<br />Heartless &#8211; Hinder</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=e6aa7291-295c-4cd4-8d03-2a80cfc5bceb" /></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/duck1123.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/duck1123.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/duck1123.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/duck1123.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/duck1123.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/duck1123.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/duck1123.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/duck1123.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/duck1123.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/duck1123.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/duck1123.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/duck1123.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/duck1123.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/duck1123.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=27&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://duck1123.wordpress.com/2009/03/02/heartless-song-titles-as-answers-meme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4d29fb194340a4c990639da30f7946af?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">duck1123</media:title>
		</media:content>

		<media:content url="http://img.zemanta.com/pixy.gif?x-id=e6aa7291-295c-4cd4-8d03-2a80cfc5bceb" medium="image" />
	</item>
		<item>
		<title>ScribeFire has a new toolbar</title>
		<link>http://duck1123.wordpress.com/2009/02/11/scribefire-has-a-new-toolbar/</link>
		<comments>http://duck1123.wordpress.com/2009/02/11/scribefire-has-a-new-toolbar/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 16:23:36 +0000</pubDate>
		<dc:creator>duck1123</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[scribefire]]></category>
		<category><![CDATA[toolbar]]></category>

		<guid isPermaLink="false">http://duck1123.wordpress.com/2009/02/11/scribefire-has-a-new-toolbar/</guid>
		<description><![CDATA[I just went back to my blog for the first time in a long while and discovered that the newest update of the ScribeFire Firefox plugin contains a toolbar for quickly adding links and youtube videos. I&#8217;ll have to play with it a bit more and see how well it works out.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=23&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I just went back to my blog for the first time in a long while and discovered that the newest update of the ScribeFire Firefox plugin contains a toolbar for quickly adding links and youtube videos.</p>
<p>I&#8217;ll have to play with it a bit more and see how well it works out.</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=c9162cd6-47c3-4485-b407-54b37124b117" /></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/duck1123.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/duck1123.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/duck1123.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/duck1123.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/duck1123.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/duck1123.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/duck1123.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/duck1123.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/duck1123.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/duck1123.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/duck1123.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/duck1123.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/duck1123.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/duck1123.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=23&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://duck1123.wordpress.com/2009/02/11/scribefire-has-a-new-toolbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4d29fb194340a4c990639da30f7946af?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">duck1123</media:title>
		</media:content>

		<media:content url="http://img.zemanta.com/pixy.gif?x-id=c9162cd6-47c3-4485-b407-54b37124b117" medium="image" />
	</item>
		<item>
		<title>Identi.ca Got So Much Better</title>
		<link>http://duck1123.wordpress.com/2009/01/23/identica-got-so-much-better/</link>
		<comments>http://duck1123.wordpress.com/2009/01/23/identica-got-so-much-better/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 18:00:32 +0000</pubDate>
		<dc:creator>duck1123</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[groups]]></category>
		<category><![CDATA[identica]]></category>
		<category><![CDATA[information overload]]></category>
		<category><![CDATA[microblogging]]></category>
		<category><![CDATA[updates]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://duck1123.wordpress.com/2009/01/23/identica-got-so-much-better/</guid>
		<description><![CDATA[So I logged into my identi.ca account this morning only to find out that they pushed out a new version. In addition to the snazzy new theme and interface, we also finally got groups. Groups are similar to what Jaiku had going, and what I was emulating by using the track feature. When I first [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=13&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So I logged into my <a href="http://identi.ca/">identi.ca</a> account this morning only to find out that they pushed out a new version.</p>
<p>In addition to the snazzy new theme and interface, we also finally got groups. Groups are similar to what Jaiku had going, and what I was emulating by using the track feature.</p>
<p>When I first looked into it, there were only a handful of groups created. Checking back a few hours later shows that that number has exploded. Perhaps the barrier for creating a group is too low, who knows. I kinda fear that the vast majority of these groups are going to languish.</p>
<p>My only problem is, this has just pumped up the amount of messages i am now receiving from various micro-blogging sources. I subscribe to my <a href="http://identi.ca/duck1123/all">identi.ca feed</a>, my <a href="http://twitter.com/duck1123">twitter feed</a>, my <a href="http://friendfeed.com/duck1123">friendfeed feed</a>, and my laconi.ca track feed.</p>
<p>1 message from a &#8220;friend&#8221; could potentially produce up to 4 messages to be sent to me. I really wish all of the micro-blogging platforms would do a better job of linking all the copies and only sending me the first instance. (This would probably require a special XMPP client to do this)</p>
<p>Oh well, as long as I can continue reading all my messages in emacs, I&#8217;ll find a way to keep up.</p>
<p>Edit: Writing this post reminded me of jaiku, so I turned <a href="http://duck1123.jaiku.com/">that feed</a> back on as well.<br /><a class="performancingtags" href="http://technorati.com/tag/updates" rel="tag"></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/duck1123.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/duck1123.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/duck1123.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/duck1123.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/duck1123.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/duck1123.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/duck1123.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/duck1123.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/duck1123.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/duck1123.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/duck1123.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/duck1123.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/duck1123.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/duck1123.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=13&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://duck1123.wordpress.com/2009/01/23/identica-got-so-much-better/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4d29fb194340a4c990639da30f7946af?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">duck1123</media:title>
		</media:content>
	</item>
		<item>
		<title>need a new host</title>
		<link>http://duck1123.wordpress.com/2009/01/17/need-a-new-host/</link>
		<comments>http://duck1123.wordpress.com/2009/01/17/need-a-new-host/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 19:12:38 +0000</pubDate>
		<dc:creator>duck1123</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[domain]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[laconica]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://duck1123.wordpress.com/?p=10</guid>
		<description><![CDATA[What is the best blog hosting service that'll let me point my domain at it for free. My domain is without a home since the place I was using freaked out on me.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=10&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>What is the best blog hosting service that&#8217;ll let me point my domain at it for free. My domain is without a home since the place I was using freaked out on me.</p>
<p>For the longest time, I was using this other guy&#8217;s company. A friend of a friend who moved to New Mexico knew him. He charged me for the first 6 months, and then never hit me up for money after that. It was a pretty basic service, and since I hadn&#8217;t been paying him for a while, I felt guilty asking for anything.</p>
<p>For instance, it was still using PHP 4. I had been wanting to play with the PHP 5 stuff, but I didn&#8217;t want to ask him to install it. Also, the database creation messed up. Because of that, I couldn&#8217;t re-install my laconica instance on the server.</p>
<p>Then I started getting 500 errors one day. I just took back all my stuff, and I&#8217;ve been without a domain ever sence.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/duck1123.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/duck1123.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/duck1123.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/duck1123.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/duck1123.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/duck1123.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/duck1123.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/duck1123.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/duck1123.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/duck1123.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/duck1123.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/duck1123.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/duck1123.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/duck1123.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=duck1123.wordpress.com&amp;blog=22374&amp;post=10&amp;subd=duck1123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://duck1123.wordpress.com/2009/01/17/need-a-new-host/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4d29fb194340a4c990639da30f7946af?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">duck1123</media:title>
		</media:content>
	</item>
	</channel>
</rss>
