<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-19000527</id><updated>2024-09-02T11:17:38.072+02:00</updated><title type='text'>Some assembly required</title><subtitle type='html'>This blog is about unimplemented ideas. At least until they get ticked off; I suppose a few eventually will have implementations too, but fresh posts never will. Because that&#39;s the primary purpose of this blog: keeping track of ideas I&#39;d like to dive into, or problems I&#39;d like to see solved. Feel free to join me in implementing, or further developing these ideas. I don&#39;t mind working solo, but it&#39;s a whole lot more fun working in concert!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default?alt=atom'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-19000527.post-1552259948517910511</id><published>2008-02-23T02:17:00.007+01:00</published><updated>2008-02-23T16:54:03.263+01:00</updated><title type='text'>Greasemonkey @require libraries</title><content type='html'>&lt;dl&gt;&lt;dt&gt;Problem:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;There is a shortage of well abstracted micro-libraries to @require in Greasemonkey scripts.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Solution:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;Define useful, minimal feature sets, and implement and/or advertise their specs to prospective other implementors.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Interfaces:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;dl&gt;&lt;br /&gt;&lt;dt&gt;&lt;a href=&quot;http://ecmanaut.googlecode.com/svn/trunk/lib/gm/$x$X.js&quot;&gt;$x(xpath, root) / $X(xpath, root)&lt;/a&gt;&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;$x evaluates an XPath expression, returning an Array of nodes, a string, number or boolean, depending on the return type it evaluates to. $X returns the first match only (in document order). Both take an optional context node to resolve the expression from.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;&lt;a href=&quot;http://ecmanaut.googlecode.com/svn/trunk/lib/gm/wget.js&quot;&gt;wget(url, cb) / wget$x(url, cb, xpath) / wget$X(url, cb, xpath)&lt;/a&gt;&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;wget does a GM_xmlhttpRequest fetch of an entity and renders it into a DOM that can be queried by XPath, and gets passed on to the callback (second parameter: url). The wget$x methods also do the slicing and pass the $x result, the document, url and xhr object to cb.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;&lt;a href=&quot;http://ecmanaut.googlecode.com/svn/trunk/lib/md5.js&quot;&gt;MD5 singleton&lt;/a&gt;&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;MD5.string(data) yields the binary MD5 hash, MD5.hex(data) will hex code it prior to returning the result. MD5.base64(data) similarly for Base64 encoding.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;&lt;a href=&quot;http://ecmanaut.googlecode.com/svn/trunk/lib/sha1.js&quot;&gt;SHA1 singleton&lt;/a&gt;&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;Like MD5, but for SHA1 instead, and the string method is called &quot;hash&quot;. Also takes an optional second argument 8 or 16 for string width. MD5 ought to be updated to mimic this API instead.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;&lt;a href=&quot;http://ecmanaut.googlecode.com/svn/trunk/lib/jsdiff.js&quot;&gt;Diff singleton&lt;/a&gt;&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;Renders a text/html diff of two text/plain (unfortunately) inputs. Usage: &lt;pre&gt;var diff = Diff.diff_main(text1, text2);&lt;br /&gt;           Diff.diff_cleanupSemantic(diff);&lt;br /&gt;var html = Diff.diff_prettyHtml(diff);&lt;/pre&gt;&lt;/dd&gt;&lt;br /&gt;&lt;/dl&gt;&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Notes:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;Incomplete.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Update incrementally.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;/dl&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/1552259948517910511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/1552259948517910511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/1552259948517910511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/1552259948517910511'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2008/02/greasemonkey-require-libraries.html' title='Greasemonkey @require libraries'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-116990498874384672</id><published>2007-01-27T12:38:00.000+01:00</published><updated>2007-01-27T14:45:56.626+01:00</updated><title type='text'>Track changed URLs via subversion</title><content type='html'>&lt;dl&gt;&lt;dt&gt;Problem:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;Online resources don&#39;t provide a standardized way of tracking changes, much less one well integrated with feed readers and other technology suited for news coverage.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Solution:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;Setup an agent that polls tracked URLs for changes, committing any changes to a subversion repository. Provide feeds, linking to diffs and noting their sizes.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Elevator pitch:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;Ever tried to track changes to some online &lt;abbr title=&quot;Application&#39;s Programmer&#39;s Interface&quot;&gt;API&lt;/abbr&gt;, &lt;abbr title=&quot;Terms of Service&quot;&gt;TOS&lt;/abbr&gt; or similar, by hand? Of course not; it&#39;s way too messy and too much laboursome work. And there are just too many of them, anyway; staying on top of each is impossible. It&#39;s not a task for humans.&lt;br /&gt;&lt;br /&gt;Ever thought of how neat it would be if you could just point some automated agent at your URL of choice, whenever you find the need, and have it magically track that URL, commiting new changes, once they appear, to a subversion repository?&lt;br /&gt;&lt;br /&gt;Get a changes timeline you can tune in to instead, to peruse the diffs at your leisure?  Well, that is the basic idea of this service. Coupled with feeds for your feed reader, of course, so you can forget about them all, while nothing happens, and be alerted, the times when there &lt;i&gt;is&lt;/i&gt; some action.&lt;br /&gt;&lt;br /&gt;Without having to opt in on lots of blogs and the like, who may or may not announce the news, and who will most certainly not announce these news in any standard format easy to discover and digest. See, that&#39;s what you need Swwwoon for.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Method:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;Per host, or perhaps otherwise intelligently grouped cluster of URLs, iterate:&lt;br /&gt;&lt;br /&gt;&lt;dl&gt;&lt;dt&gt;New URL:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;ol&gt;&lt;li&gt;Fetch URL and Content-type header&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Store as &lt;a href=&quot;#swwwoon-note-1&quot;&gt;${repository}/${URL hostname}/${URL path}&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;svn propset svn:mime-type ${Content-type} ${path}&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Old URL:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;#swwwoon-note-2&quot;&gt;Fetch URL and Content-type header&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Update file contents and mime-type in working copy.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;svn diff ${path} | format_commit_message&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;br /&gt;&lt;code&gt;svn ci -m &lt;a href=&quot;#swwwoon-note-3&quot;&gt;${commit message}&lt;/a&gt; ${paths}&lt;/code&gt;&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Requirements:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;Interface to add an URL to track (web page, bookmarklet)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Change tracker agent run at regular intervals&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Feeds generator; per user, per repository (optional), aggregate all&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A database of:&lt;ul&gt;&lt;li&gt;urls&lt;/li&gt;&lt;br /&gt;&lt;li&gt;users&lt;/li&gt;&lt;br /&gt;&lt;li&gt;what users track which urls&lt;/li&gt;&lt;br /&gt;&lt;li&gt;optional: urls &amp;amp; credentials to remote repositories&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Interface:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;dl&gt;&lt;dt&gt;Add URL:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;tt&gt;&lt;a href=&quot;#swwwoon-note-4&quot;&gt;http://swwwoon/add?url=[&lt;b&gt;URL encoded URL&lt;/b&gt;]&lt;/a&gt;&lt;/tt&gt;&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Feeds:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;http://swwwoon/feeds/user/&lt;a href=&quot;#swwwoon-note-6&quot;&gt;${user public id}&lt;/a&gt;&lt;/tt&gt;&lt;br /&gt;- all the user&#39;s tracked URLs&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;tt&gt;http://swwwoon/feeds/url/${repository path}&lt;/tt&gt;&lt;br /&gt;- changes to a single URL&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;tt&gt;http://swwwoon/feeds/subtree/${partial repository path}&lt;/tt&gt;&lt;br /&gt;- changes to all URLs in the subtree rooted at the given prefix&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;tt&gt;http://swwwoon/feeds/domin/google.com&lt;/tt&gt;&lt;br /&gt;- anything covered at *.google.com&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Perhaps combinations of the above&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Notes:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;Multiple users tracking the same resource don&#39;t waste resources in proportion to their numbers. This is a very good property.&lt;/li&gt;&lt;br /&gt;&lt;li id=&quot;swwwoon-note-1&quot;&gt;Some normalization scheme may prove necessary to cover URL queries too, if present. Or, alternatively, plain disallowing them.&lt;/li&gt;&lt;br /&gt;&lt;li id=&quot;swwwoon-note-2&quot;&gt;Making use of &lt;a href=&quot;http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.25&quot;&gt;HTTP/1.1 If-Modified-Since&lt;/a&gt;, when possible, might prove a worthwhile optimization. It also is likely that won&#39;t catch changes of Content-type due to bugs in web servers or their configuration, so it is likely worth verifying with a HEAD request, even when given a 304 Not Modified.&lt;/li&gt;&lt;br /&gt;&lt;li id=&quot;swwwoon-note-3&quot;&gt;Good commit messages aren&#39;t in ready supply, but listing content type (for new files, and from/to, when changed), file lengths (in lines, too, for text/* and some xml formats) and, for text variants, diff sizes (+20/-3 lines), are good for a start. Machine readable format, so the feed generator can present a set of nicely annotated links to online diff browsers (via Code Librarian or Trac, for instance), is good.&lt;/li&gt;&lt;br /&gt;&lt;li id=&quot;swwwoon-note-4&quot;&gt;Passing a &lt;a href=&quot;#swwwoon-note-5&quot;&gt;private user id&lt;/a&gt; cookie to associate the URL with your account.&lt;/li&gt;&lt;br /&gt;&lt;li id=&quot;swwwoon-note-5&quot;&gt;Good user id:s are chunks of opaque random ASCII. For instance, a cryptographic hash of a private key and an auto_increment user number. Forcing login/passwords on users is annoying; invent good private keys instead.&lt;/li&gt;&lt;br /&gt;&lt;li id=&quot;swwwoon-note-6&quot;&gt;A public id can be shared with others without issues. Given the open nature suggested here, allowing anyone to see anyone else&#39;s tracked URLs, plain integers would work.&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/Swwwoon&quot; rel=&quot;tag&quot;&gt;Swwwoon&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/subversion&quot; rel=&quot;tag&quot;&gt;subversion&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/116990498874384672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/116990498874384672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/116990498874384672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/116990498874384672'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2007/01/track-changed-urls-via-subversion.html' title='Track changed URLs via subversion'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-115167856123877794</id><published>2006-06-30T16:32:00.000+02:00</published><updated>2006-06-30T17:08:01.426+02:00</updated><title type='text'>Roll your own full post feed</title><content type='html'>&lt;dl&gt;&lt;dt&gt;Problem:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;Bloggers or other feed providers that don&#39;t treat visitors with a full feed.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Solution:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;Convert a partial feed to a full feed.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Method:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;Scrape a partial feed for URLs to full posts.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cut out the portion of the page that contains the post.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Encode it into another feed, based in all other aspects on the partial feed.&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Requirements:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;(partial) Feed URL.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;(per-feed) XPath selector that slices out the post content node.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Web server to run the feed-to-feed translator.&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Interface:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;tt&gt;http://[&lt;b&gt;base url of f2f translator&lt;/b&gt;]?feed=[&lt;b&gt;URL encoded feed URL&lt;/b&gt;]&amp;amp;post=[&lt;b&gt;URL encoded XPath expression that slices out the full post content node from a full post page&lt;/b&gt;]&lt;/tt&gt;&lt;/dd&gt;&lt;br /&gt;&lt;dd&gt;...producing a new feed to the specs of the two parameters.&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;Notes:&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;It&#39;s probably a good idea to limit the feed handling to one feed format.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I would adopt ATOM, and put the Google Reader backend to use for the conversion step.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Might prove useful to adopt some caching strategy to only perform each URL + XPath combination once as subscribers fetch the feed and as new content shows up.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;OTOH, that would probably also render a need for cacheability checks. Cacheability metadata from the feed and HTTP headers of the post URL itself should provide enough guidelines.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It&#39;s likely that Google Reader (or other online aggregators) could be put to good use for the republication and caching layer, granted that feed subscribers are routed through that service (via HTTP redirects), whereas the Google Reader spider invokes the fetch-and-compose engine.&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;br /&gt;This isn&#39;t an advocacy post; the web is simply mine to consume however I please. I pick my browser, my feed reader, and, true to my habits, my way of browsing - including when and why I opt to take a visit to a site for reading a post, and when I stay in my feed reader.&lt;br /&gt;&lt;br /&gt;Command line tools for XPath extraction of data from a given HTML file or URL might prove useful for quick prototyping; any available?&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+feeds&quot; rel=&quot;tag&quot;&gt;feeds&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+syndication&quot; rel=&quot;tag&quot;&gt;syndication&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+ReverseEngineering&quot; rel=&quot;tag&quot;&gt;ReverseEngineering&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/115167856123877794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/115167856123877794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/115167856123877794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/115167856123877794'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2006/06/roll-your-own-full-post-feed.html' title='Roll your own full post feed'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-114342281322056495</id><published>2006-03-27T02:57:00.000+02:00</published><updated>2006-03-27T03:28:23.326+02:00</updated><title type='text'>Generic image browser Greasemonkey script</title><content type='html'>I used to keep two bookmarklets around to do quick image browsing from directory lists, and the like:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;one that took all links to files ending in &lt;tt&gt;.gif&lt;/tt&gt;, &lt;tt&gt;.png&lt;/tt&gt;, &lt;tt&gt;.jpeg&lt;/tt&gt; or &lt;tt&gt;.jpeg&lt;/tt&gt;, rewrote the window contents to &lt;a href=&quot;javascript:(function(){function z(y){return y.y&amp;gt;=pageYOffset}function r(y){return y.y&amp;gt;pageYOffset};function go(c,n){a=[];for(I=document.images,i=0;i&amp;lt;I.length;i++)if(c(j=I[i])&amp;amp;&amp;amp;j!=a[a.length-1])a.push(j);if(x=a.length){j=a.sort(function(u,v){return u.y-v.y})[Math.min((n+x)%x,x-1)];scrollTo(0,j.y);return j}}if(!document.links.length)go(r,0);else{m=&#39;/[^/]*\\.(jpe?g|png|gif)$&#39;;if(m!=null){m=new RegExp(m,&#39;i&#39;);E={};l=0;i=document.links.length;while(i--)if((u=document.links[i].href).match(m)&amp;amp;&amp;amp;!E[u])E[u]=i,++l;I=new Array(L=l);if(1||confirm(l+&#39; matches. View all?&#39;)){p=[];for(u in E){I[--l]=new Image();p.unshift(&#39;&amp;lt;img onclick=%22document.images.length&amp;gt;1&amp;amp;&amp;amp;this.parentNode.removeChild(this)%22 src=%22&#39;+(I[l].src=u)+&#39;%22&amp;gt;&#39;);I[l].onload=function(){var p=top.p;if(!--L)with(document){open();write(&#39;&amp;lt;html&amp;gt;&amp;lt;body bgcolor=black style=margin:0;text-align:center&amp;gt;&#39;+p.join(&#39;&#39;)+&#39;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&#39;);close();onkeydown=function(e){k=e?e.which:event.keyCode;if(k==48)k+=10;if(k&amp;gt;48&amp;amp;&amp;amp;k&amp;lt;59)go(function(){return 1},k-49);else if(k==16||k==32)go(r,0);else if(k==13)go(function(y){return y.y&amp;lt;pageYOffset},-1);else if(k==46)go(z,0).onclick();else if(k==17)with(go(z,0))scrollTo(0,y+((height-innerHeight)&amp;gt;&amp;gt;1))}}}}}}}})()&quot;&gt;show them after one another on a black background&lt;/a&gt;, centered and fitting as many as possible horizontally,&lt;/li&gt;&lt;br /&gt;&lt;li&gt;one that did much the same, but opened a new window for this view, and &lt;a href=&quot;javascript:if(!document.links.length){for(I=document.images,i=0;i&amp;lt;I.length&amp;amp;&amp;amp;pageYOffset&amp;gt;=I[i].y;i++);scrollTo(0,I[i].y)}else{m=prompt(&#39;Linked image matcher regexp (case insensitive):&#39;,&#39;/[^/]*\\.(jpe?g|png|gif)$&#39;);if(m!=null){m=new RegExp(m,&#39;i&#39;);E={};l=0;i=document.links.length;while(i--)if((u=document.links[i].href).match(m)&amp;amp;&amp;amp;!E[u])E[u]=i,++l;I=new Array(l);if(confirm(l+&#39; matches. View all?&#39;)){for(u in E){I[--l]=new Image();I[l].src=u}n=window.open(&#39;&#39;,Math.random().toString().substr(2),&#39;toolbar=yes,directories=yes,status=yes,scrollbars=yes,resize=yes,menubar=yes,location=yes&#39;);for(i=0;i&amp;lt;I.length;i++)with(I[i])n.document.write(&#39;&amp;lt;img src=%22&#39;+src+&#39;%22&amp;gt;&#39;);n.document.close()}}}void 0&quot;&gt;prompting for a regexp&lt;/a&gt; of what URLs to show in the opened window.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The first one even had some keyboard commands that once upon a time enabled zooming to the next and previous image and centering the present image vertically by pressing shift, ctrl and return, but I believe the code rotted sometime, and either way bookmarklets are painful to maintain if you don&#39;t keep a copy around of the code prior to minimization. I tend to misplace such data.&lt;br /&gt;&lt;br /&gt;Anyway, I&#39;d like to revisit the idea and make this into a handy Greasemonkey script I can keep around and perhaps auto-invoke on some pages too. The only problem I want to address first is finding some really good photo album viewer / image browser to raid some good UI ideas from. On invocation, the script should proceed to:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Pick out all linked images in the page, as do the above bookmarklets.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Rewrite the page to drop all prior content, replacing it with the album viewer.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Add convenient browsing hotkeys for operations like &quot;drop image from album view&quot;, &quot;focus previous/next image&quot;, &quot;zoom image to full screen&quot;; any others?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I&#39;m also considering something similar to the configuration screen of &lt;a href=&quot;http://ecmanaut.blogspot.com/2006/03/mark-my-links.html&quot;&gt;Mark my links&lt;/a&gt; for adding sites or URLs matching some given regexps to always invoke the album view for, right after the page has loaded. Similarly for pages whose referrers match given regexps.&lt;br /&gt;&lt;br /&gt;But first I&#39;ll have to find some good album viewers. Suggestions? While a bit off target, &lt;a href=&quot;http://www.huddletogether.com/projects/lightbox/&quot;&gt;LightBox&lt;/a&gt; (and the (and &lt;a href=&quot;http://jquery.com/blog/2006/02/10/greybox-redux/&quot;&gt;JQuery greybox redux&lt;/a&gt;, for that matter) has some nice visual properties it might be worth lending too, though I have yet to come across a neat and tidy image browser, without clutter soup. I&#39;m thinking something about as tidy as the Google (Web) Search front page, of a few years ago (more clutter has found its way there since, though it&#39;s still good).&lt;br /&gt;&lt;br /&gt;Tips and feedback very welcome.&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+Greasemonkey&quot; rel=&quot;tag&quot;&gt;Greasemonkey&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+ImageBrowser&quot; rel=&quot;tag&quot;&gt;ImageBrowser&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/114342281322056495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/114342281322056495' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/114342281322056495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/114342281322056495'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2006/03/generic-image-browser-greasemonkey.html' title='Generic image browser Greasemonkey script'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113894921663712071</id><published>2006-02-03T07:41:00.000+01:00</published><updated>2006-02-03T07:47:24.600+01:00</updated><title type='text'>Link verifier bookmarklet / Greasemonkey script</title><content type='html'>Create a bookmarklet that, perhaps in concert with a Greasemonkey script (to spider to off-site links) processes all &lt;code&gt;a[@href]&lt;/code&gt; tags in the page invoked on, checks whether they work, and mark those that did not, for instance with a &lt;code&gt;style.textDecoration = &#39;line-through&#39;&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Hm. Or maybe even a Greasemonkey script which does that and gets invoked via the greasemonkey menu scripts can register themselves for.</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113894921663712071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113894921663712071' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113894921663712071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113894921663712071'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2006/02/link-verifier-bookmarklet-greasemonkey.html' title='Link verifier bookmarklet / Greasemonkey script'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113525753228555920</id><published>2005-12-22T14:13:00.000+01:00</published><updated>2005-12-22T14:18:52.286+01:00</updated><title type='text'>Graphic Emote Greasemonkey Script</title><content type='html'>Doing graphic emoticons on Blogger &lt;span style=&quot;font-style: italic;&quot;&gt;is&lt;/span&gt; possible.  I&#39;ve done it on my personal blog since I started.  What I do is simple -- I write the post normally, as if useing text-emotes, and then go back through the code when I&#39;m done and manually change them all to something like :&lt;br /&gt;&amp;lt;img src=&quot;http://www.xanga.com/images/winky.gif&quot; class=&quot;emote&quot; alt=&quot;;)&quot; /&amp;gt;&lt;br /&gt;which works just fine.  Why do I use Xanga emoticons?  Well, despite how ugly they are, I prefer them to text-emotes.  If I found another service with easily-accesible emote images I might switch to using them.&lt;br /&gt;&lt;br /&gt;The idea, then, is to make a greasemonkey script that runs on clicking &#39;Publish Post&#39; and automatically goes through and replaces certain emote strings ( ;), :), :D, :P, etc ) to the appropriate image-tag code.</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113525753228555920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113525753228555920' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113525753228555920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113525753228555920'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/12/graphic-emote-greasemonkey-script.html' title='Graphic Emote Greasemonkey Script'/><author><name>Singpolyma</name><uri>http://www.blogger.com/profile/14267910391550235126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.gravatar.com/avatar/3ab4d3a66e470ce10eb7ec812fab3c46'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113476151444303621</id><published>2005-12-16T20:14:00.000+01:00</published><updated>2005-12-16T20:32:31.723+01:00</updated><title type='text'>Tagged OPML to navbar topic links</title><content type='html'>An OPML list of feeds can have a set of tags added to each feed, for instance for making topic navigation easier in your feed reader -- Google Reader, for instance. Given a (well kept) OPML feed, with quality tags for good feeds you would want to recommend on your site, it should be a rather simple thing, autogenerating a navigation bar of feed links, broken down by topic.&lt;br /&gt;&lt;br /&gt;Unfortunately the OPML feed does not provide both feed and blog URLs, at least not those exported from Google Reader, so it is just half way to a site navigation panel of related sites, but it is a start, and the missing bits would probably be easy enough to pick out of each feed linked. ATOM feeds, for instance, seem to have a nice &lt;code&gt;/link[@rel=&quot;alternate&quot;][@href]&lt;/code&gt; attribute that should be a good pick for such links.&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+OPML&quot; rel=&quot;tag&quot;&gt;OPML&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+navigation&quot; rel=&quot;tag&quot;&gt;navigation&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113476151444303621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113476151444303621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113476151444303621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113476151444303621'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/12/tagged-opml-to-navbar-topic-links.html' title='Tagged OPML to navbar topic links'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113405927427332801</id><published>2005-12-08T17:14:00.000+01:00</published><updated>2005-12-29T14:16:11.896+01:00</updated><title type='text'>Template fixes for Some Assembly Required</title><content type='html'>&lt;ul&gt;&lt;br /&gt;&lt;li class=&quot;done&quot;&gt;For &lt;code&gt;&amp;lt;ul&amp;gt;...&amp;lt;li class=&quot;done&quot;&amp;gt;&lt;/code&gt; items, add an &quot;implemented!&quot; checkmark.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Should we have a common tag Del.icio.us set across all our posts? (Then fix that.)&lt;/li&gt;&lt;br /&gt;&lt;li class=&quot;done&quot;&gt;Johan&#39;s tag links are broken at the moment, throughout most post pages; fix.&lt;/li&gt;&lt;br /&gt;&lt;li class=&quot;done&quot;&gt;The contributor name in the post footer should be a link, either to blogger our profiles or to our tech blogs.&lt;/li&gt;&lt;br /&gt;&lt;li class=&quot;done&quot;&gt;It&#39;s really annoying that post titles are not links to the post permalink; fix that.&lt;/li&gt;&lt;br /&gt;&lt;li class=&quot;done&quot;&gt;Make external links linked by icon, similar to the solution at &lt;a href=&quot;http://ecmanaut.blogspot.com/&quot;&gt;ecmanaut&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li class=&quot;done&quot;&gt;Presently, we use the standard comments page for commenting this blog. Stephen prefers the popup comment page, I prefer leaving such choices to the reader. Would it be possible to support both, in some fashion that would be intuitive? Shift click the comment link for popup coupled with a title attribute stating that? (Still not changed anywhere but on the item pages; could it be done nicely elsewhere too?)&lt;/li&gt;&lt;br /&gt;&lt;li class=&quot;done&quot;&gt;Implement &lt;a href=&quot;http://some-assembly-required.blogspot.com/2005/12/comments-feed-for-blogger.html&quot;&gt;Stephen&#39;s blogger comments feed hack&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Add an &lt;code&gt;accessKey=E&lt;/code&gt; to the first post edit button shown in each page, as at ecmanaut.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Similarly add a &quot;write new post&quot; link to every page (hidden to normal viewers as the edit button) and give it an &lt;code&gt;accessKey=N&lt;/code&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Clean up the authors section in the top of the page, as per previous discussion (blog links, et cetera).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+Blogger&quot; rel=&quot;tag&quot;&gt;Blogger&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+template&quot; rel=&quot;tag&quot;&gt;template&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113405927427332801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113405927427332801' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113405927427332801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113405927427332801'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/12/template-fixes-for-some-assembly.html' title='Template fixes for Some Assembly Required'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113386159890456536</id><published>2005-12-06T10:26:00.000+01:00</published><updated>2006-01-09T13:17:59.136+01:00</updated><title type='text'>View Source in New Tab for Firefox</title><content type='html'>&lt;span style=&quot;font-weight: bold;&quot;&gt;Extension discovered - &lt;a href=&quot;http://brian.kingsonline.net/talk/index.php/archives/132&quot;&gt;View Source Choice&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I have for the longest time wished I could have Firefox open the &#39;View Source&#39; dialog in a new tab instead of a new window.  There are extensions that include this functionality, but no lightweight ones.  Most of them add a bunch of tab functionality that either I don&#39;t need, or is built right into Firefox.  I have now found a possible solution.  Prefixing &#39;view-source:&#39; to any URL in the Firefox address bar will open the &#39;View Source&#39; dialog for that URL in the current tab.  For example, &lt;a href=&quot;view-source:http://some-assembly-required.blogspot.com/&quot;&gt;this link&lt;/a&gt; will bring up the source for this page.  Using this information it should be simple enough to create a Firefox extension that overrides the View &gt; Page Source menu item and the Ctrl+U shortcut key to open the source code for the current page in a new tab. &lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/unimplemented+ideas+Firefox&quot; rel=&quot;tag&quot;&gt;Firefox&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113386159890456536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113386159890456536' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113386159890456536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113386159890456536'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/12/view-source-in-new-tab-for-firefox.html' title='View Source in New Tab for Firefox'/><author><name>Singpolyma</name><uri>http://www.blogger.com/profile/14267910391550235126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.gravatar.com/avatar/3ab4d3a66e470ce10eb7ec812fab3c46'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113380768928044749</id><published>2005-12-05T19:27:00.000+01:00</published><updated>2005-12-05T19:34:49.290+01:00</updated><title type='text'>Templateize el Burro</title><content type='html'>The &lt;a href=&quot;http://ecmanaut.blogspot.com/2005/09/book-burro-find-cheap-books.html?tags=BookBurro&quot;&gt;Book Burro user script&lt;/a&gt;, besides being a very cool hack for the &lt;i&gt;functionality&lt;/i&gt; it provides, is also a very good base for making other very cool hacks for context sensitive popups, not necessarily about books. If we pulled out all the code that handles book stores, and just leave the bare bones clickable menu you can fill with some kind of content, and slap on a nice API onto that to cook your own * Burros, with logos and feature sets of their own.&lt;br /&gt;&lt;br /&gt;So, let&#39;s do that.&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+Greasemonkey&quot; rel=&quot;tag&quot;&gt;Greasemonkey&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+BookBurro&quot; rel=&quot;tag&quot;&gt;BookBurro&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113380768928044749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113380768928044749' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113380768928044749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113380768928044749'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/12/templateize-el-burro.html' title='Templateize el Burro'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113361402779854333</id><published>2005-12-03T13:37:00.000+01:00</published><updated>2005-12-27T17:21:44.213+01:00</updated><title type='text'>Comments Feed for Blogger</title><content type='html'>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;This Hack Has Been Completed&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The fully functional hack, with the extra features mentioned in the comments working, is available at &lt;a href=&quot;http://bloggercomments.ning.com/&quot;&gt;http://bloggercomments.ning.com/&lt;/a&gt;.  I have also written a &lt;a href=&quot;http://bloggercomments.ning.com/instructions.php&quot;&gt;page of instructions&lt;/a&gt; on setting up your blog to work with the service.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;If I understand rightly the way the &lt;a href=&quot;http://bloggerhacks.blogspot.com/2004/09/farrago-recent-comments-hack-103.html&quot;&gt;Farrago Recent Comments Hack&lt;/a&gt; works, then the recent comments on Blogger blogs could be output to the sidebar, or to an invisible section, in a similar manner but without the javascript and in a standard format that included the contents of the comment.  Such could be styled / scripted to display as the blog owner wished, or to not display at all, as long as such did not alter the ability to parse the section (perhaps even using an easy-to-parse structure such as &lt;a href=&quot;http://microformats.org/wiki/xoxo&quot;&gt;XOXO&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;A server-side script could then be run on another server (or even, perhaps, on &lt;a href=&quot;http://www.ning.com/&quot;&gt;Ning&lt;/a&gt;, although I&#39;m not sure this use would be acceptable given the purpose of the site) that would parse this section out of the Blogger page and use it to generate an RSS feed from the data.  Thus a real-time, custom, properly encoded comments feed could be generated for a Blogger blog.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Update:&lt;/span&gt; Such a use would not be outside of the terms of use on Ning, however they will not allow you to use any GPL code, due to licensing restrictions, which means among other things that my XOXO library couldn&#39;t be used.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+Blogger&quot; rel=&quot;tag&quot;&gt;Blogger&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+Comment&quot; rel=&quot;tag&quot;&gt;Comment&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+Syndication&quot; rel=&quot;tag&quot;&gt;Syndication&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+Complete&quot; rel=&quot;tag&quot;&gt;Complete&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113361402779854333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113361402779854333' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113361402779854333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113361402779854333'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/12/comments-feed-for-blogger.html' title='Comments Feed for Blogger'/><author><name>Singpolyma</name><uri>http://www.blogger.com/profile/14267910391550235126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.gravatar.com/avatar/3ab4d3a66e470ce10eb7ec812fab3c46'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113346031114101037</id><published>2005-12-01T17:38:00.000+01:00</published><updated>2005-12-22T19:37:24.783+01:00</updated><title type='text'>Foldable Blogger comments</title><content type='html'>I have seemed to attract quite a few long in-depth comments, which is good. My blog template, however, isn&#39;t -- at least not for catering these. A better style would be (in javascript enabled browsers) to&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;fold the comments,&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;or better still, all comments already seen on prior visits (2005-12-22 addition),&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;until clicking the &quot;comments&quot; link, or an arrow icon next to it.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;This brings up -- in the event of a single comment: the comment, properly unfolded.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In the event of many comments: a list of all commentee names, the dates and times they were written, and why not how many paragraphs the comment body holds (split &lt;code&gt;innerHTML&lt;/code&gt; on &lt;code&gt;/(&amp;lt;br&amp;gt;){2,}/i&lt;/code&gt;, and the &lt;code&gt;length&lt;/code&gt; length property will hold the number of paragraphs).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Add little fold/unfold arrows, just like the backlinks,&lt;/li&gt;&lt;br /&gt;&lt;li&gt;and a fold/unfold all arrow for the &lt;i&gt;Comments&lt;/i&gt; header.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+Blogger&quot; rel=&quot;tag&quot;&gt;Blogger&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+template&quot; rel=&quot;tag&quot;&gt;template&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+unimplemented+comments&quot; rel=&quot;tag&quot;&gt;comments&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113346031114101037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113346031114101037' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113346031114101037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113346031114101037'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/12/foldable-blogger-comments.html' title='Foldable Blogger comments'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113344788852409039</id><published>2005-12-01T15:15:00.000+01:00</published><updated>2005-12-12T15:45:26.593+01:00</updated><title type='text'>Blogger publish ping TODO</title><content type='html'>&lt;h3&gt;Bugs&lt;/h3&gt;&lt;br /&gt;&lt;ul&gt;&lt;li class=&quot;done&quot;&gt;Injection of the &lt;b&gt;Tags:&lt;/b&gt; field on the &lt;i&gt;edit post&lt;/i&gt; page fails when either of Title and Link fields has been turned off.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When the Published! page for some reason fails to publish, the URL linkifier renders some sort of error.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The Published! page always adds the Del.icio.us and Post links, even when republishing the entire archive, in which case it just links the last post. Unintuitive.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h3&gt;Short term&lt;/h3&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.feedburner.com/fb/a/ping&quot;&gt;Ping FeedBurner&lt;/a&gt; (to avoid up to half an hour&#39;s update latency).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Research &lt;a href=&quot;http://www.burningdoor.com/feedburner/archives/001433.html&quot;&gt;which sites FeedBurner can ping for you&lt;/a&gt;? It doesn&#39;t seem to be listed in plain: might be worth at least asking politely.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://pchere.blogspot.com/2005/09/one-click-blog-pinging-services.html&quot;&gt;Quick Online Tips&lt;/a&gt; mentions a few other ping aggregator services worth picking up on, among others &lt;a href=&quot;http://www.kping.com/&quot;&gt;King Ping&lt;/a&gt;, &lt;a href=&quot;http://blip.lco.net/SubmitForm.aspx&quot;&gt;Blog Blip&lt;/a&gt; and &lt;a href=&quot;http://www.pings.ws/&quot;&gt;Pings.ws&lt;/a&gt;. There probably are a few more still mentioned in the &lt;a href=&quot;http://www.blogger.com/comment.g?blogID=9802627&amp;postID=112574160881829524&quot;&gt;visitor comments to the post&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h3&gt;Longer term&lt;/h3&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Implement a proper script-local version of the &lt;a href=&quot;http://www.xmlrpc.com/weblogsCom&quot;&gt;XML-RPC Ping&lt;/a&gt; protocol and do fine-grained custom pinging.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Perhaps even pick up on the semantics of the preferences set for any already configured ping sites (to only ping every mentioned site once, without using any of the middleman ping aggregator services).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Add a &lt;a href=&quot;http://www.burningdoor.com/feedburner/archives/000478.html&quot;&gt;ping preferences dialogue&lt;/a&gt;, perhaps similar to that of Movable Type, as pictured. If above is done, perhaps sport some comments (&quot;tagged for Pingoat and Ping-O-Matic&quot;) too for good measure.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/Someassemblyrequired/Someassemblyrequired+Greasemonkey&quot; rel=&quot;tag&quot;&gt;Greasemonkey&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/Someassemblyrequired/Someassemblyrequired+FeedBurner&quot; rel=&quot;tag&quot;&gt;FeedBurner&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/Someassemblyrequired/Someassemblyrequired+tools&quot; rel=&quot;tag&quot;&gt;tools&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/Someassemblyrequired/Someassemblyrequired+ping&quot; rel=&quot;tag&quot;&gt;ping&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/Someassemblyrequired/Someassemblyrequired+xmlrpc&quot; rel=&quot;tag&quot;&gt;xmlrpc&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113344788852409039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113344788852409039' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113344788852409039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113344788852409039'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/12/blogger-publish-ping-todo.html' title='Blogger publish ping TODO'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113344586771588580</id><published>2005-12-01T14:43:00.000+01:00</published><updated>2005-12-01T19:08:33.186+01:00</updated><title type='text'>FeedBurner traffic history Greasemonkey visualizer</title><content type='html'>For pages that link to Feedburner for subscriptions (and/or shows a subscription count c/o Feedburner), it would be lots of fun to have a Greasemonkey script that graphs the blog traffic in a little canvas widget somewhere on the page (bottom right corner?) for blogs with the FeedBurner &lt;a href=&quot;http://www.feedburner.com/fb/a/api/awareness&quot;&gt;Awareness API&lt;/a&gt; turned on.&lt;br /&gt;&lt;br /&gt;Details to be decided, but I think a mix of graphing the past week with some precision, offering more rough &quot;past month&quot; details, some less still precision for the past year, and perhaps something to give a rough idea of for how long the blog has been online and tracked by FeedBurner at all. Here is &lt;a href=&quot;http://api.feedburner.com/awareness/1.0/GetFeedData?uri=micropersuasion&amp;dates=2004-07-08/2004-07-09/2004-07-10/2004-07-11/2004-07-12/2004-07-13/2004-07-14/2004-07-15/2004-08-01/2004-09-01/2004-10-01/2004-11-01/2004-12-01/2005-01-01/2005-02-01/2005-03-01/2005-04-01/2005-05-01/2005-06-01/2005-07-01/2005-08-01/2005-09-01/2005-10-01/2005-11-01,2005-12-01&quot;&gt;a peek into Micropersuasion&#39;s traffic logs&lt;/a&gt;; I believe it started tracking via FeedBurmer on July 9, 2004, judging by the statistics.&lt;br /&gt;&lt;br /&gt;Maybe a good visualization would even sport some time navigation -- that way, it would probably be good enough just picking a month at a time and a day per month a year back from the focused month range (and perhaps one date per month forward too?). Add a bit of caching to that, to be nice to FeedBurner, and we have a quality hack.&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+Greasemonkey&quot; rel=&quot;tag&quot;&gt;Greasemonkey&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+FeedBurner&quot; rel=&quot;tag&quot;&gt;FeedBurner&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113344586771588580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113344586771588580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113344586771588580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113344586771588580'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/12/feedburner-traffic-history.html' title='FeedBurner traffic history Greasemonkey visualizer'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113323737262722589</id><published>2005-11-29T04:56:00.000+01:00</published><updated>2005-11-29T05:09:32.643+01:00</updated><title type='text'>MochiKit regexp visualizer</title><content type='html'>This &lt;a href=&quot;http://mochikit.com/examples/mochiregexp/&quot;&gt;RegExp visualizer&lt;/a&gt; was rather well executed; in some ways better than the one that has been sitting unimplemented in the back of my head ever since I did my first hack using the RegExp match object&#39;s &lt;code&gt;index&lt;/code&gt; and &lt;code&gt;length&lt;/code&gt; properties to do I-don&#39;t-remember-what (count word lengths and embolden all words longer than N characters, perhaps).&lt;br /&gt;&lt;br /&gt;It lacks only one thing: clearly marking what parts of the input text is part of what match paren pair index. My own plan was to make the entire input text visible somewhere in the page, and then style match 0 (all matched text of the regexp) bold, and 1 (first paren), ...all the way through paren N with differently colored &lt;code&gt;border-bottom&lt;/code&gt;:s, at growing &lt;code&gt;padding-bottom&lt;/code&gt; distances (since a particular character can be part of many matched parens at the same time, and hence have multiple underlines), and appropriate &lt;code&gt;title&lt;/code&gt; attributes for each such &lt;code&gt;span&lt;/code&gt;, attributing which parens it was a part of.&lt;br /&gt;&lt;br /&gt;MochiKit, again, seems like a really pleasant framework to work with; I&#39;ve got to play with this. Really. This just might be the ideal entrance door to doing it, too.&lt;br /&gt;&lt;br /&gt;The half a second delay until things happens is just silly, though; it ought to be more like a tenth or even fiftieth of a second; computers are fast these days, and this feels like it would be an &lt;a href=&quot;http://redredmusic.com/brendon/rejax/&quot;&gt;AJAX application&lt;/a&gt; running home to a mother server for answers, rather than done fully client side. It&#39;s sluggish, and for no good reason, either.&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+MochiKit&quot; rel=&quot;tag&quot;&gt;MochiKit&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+RegExp&quot; rel=&quot;tag&quot;&gt;RegExp&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113323737262722589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113323737262722589' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113323737262722589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113323737262722589'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/11/mochikit-regexp-visualizer.html' title='MochiKit regexp visualizer'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113322983344899118</id><published>2005-11-29T02:48:00.000+01:00</published><updated>2005-11-29T03:03:53.470+01:00</updated><title type='text'>Automated comment trackback tool</title><content type='html'>My previously proposed semi-automated publish trackback tool needs a sister: the similarly semi-automated &lt;i&gt;comment&lt;/i&gt; trackback tool. Once you write a comment somewhere that links to other pages, that page ought to get a trackback ping, if it has a trackback URI, to make the web better interconnected. Links on the web are not both ways by default yet, but trackbacks try to mend that misdesign, when we want them to be -- and that should be encouraged. Tools help with such things. This would be a useable means to that end.&lt;br /&gt;&lt;br /&gt;I don&#39;t care that Blogger has another solution, which could fill the same function for the specific case of Blogger blogs equipped with backlinks lists; the tool is useful in the wide scope of alerting people anywhere when others bring perspective, new ideas and / or thoughts to the mix -- trackbacks are good. Let&#39;s make them better and easier to use.&lt;br /&gt;&lt;br /&gt;And why not couple this with a bookmarklet that lets you mark a section of text in a page, run the bookmarklet, and perform the trackback scanning of pages linked in that bit of text (or other markup), to show &lt;a href=&quot;http://ecmanaut.blogspot.com/2005/09/book-burro-find-cheap-books.html?tags=BookBurro&quot;&gt;a context menu much like Book Burro&#39;s&lt;/a&gt; where you can tick the pages you want to trackback ping from the present location. While at it. That would be a truly worthy hack. (Or Greasemonkey menu command, if that&#39;s your preference. I personally find them a bit unwieldy as accessibility goes, though.)&lt;br /&gt;&lt;br /&gt;Feed curiosity. Make it easier for others to hear your own ideas making out with theirs. That is mostly what creative cross pollination is all about. And it&#39;s good.&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+Blogger&quot; rel=&quot;tag&quot;&gt;Blogger&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+comments&quot; rel=&quot;tag&quot;&gt;comments&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+trackback&quot; rel=&quot;tag&quot;&gt;trackback&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+ping&quot; rel=&quot;tag&quot;&gt;ping&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+tools&quot; rel=&quot;tag&quot;&gt;tools&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+BlogTech&quot; rel=&quot;tag&quot;&gt;BlogTech&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+Greasemonkey&quot; rel=&quot;tag&quot;&gt;Greasemonkey&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113322983344899118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113322983344899118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113322983344899118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113322983344899118'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/11/automated-comment-trackback-tool.html' title='Automated comment trackback tool'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113322671164203752</id><published>2005-11-29T02:11:00.000+01:00</published><updated>2005-11-29T02:11:51.643+01:00</updated><title type='text'>Make anonymous faceless comments purely faceless</title><content type='html'>My &lt;a href=&quot;http://ecmanaut.blogspot.com/2005/10/blogger-hack-inline-comment-faces.html&quot;&gt;Blogger inlined comment faces hack&lt;/a&gt; doesn&#39;t recognize non-blogger comments, &lt;a href=&quot;http://ecmanaut.blogspot.com/2005/08/adding-calendar-navigation-to-your.html#c113321755357555092&quot;&gt;see?&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;I need to add some bit of code that makes sure that blogger-profile-less comments don&#39;t get any space reserved for the face; it just locks Really Tacky.</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113322671164203752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113322671164203752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113322671164203752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113322671164203752'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/11/make-anonymous-faceless-comments.html' title='Make anonymous faceless comments purely faceless'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113322566090729492</id><published>2005-11-29T01:18:00.000+01:00</published><updated>2005-11-29T01:54:20.920+01:00</updated><title type='text'>Lower bribery threshold</title><content type='html'>Bribery can actually be a good thing! When it occasionally lowers our thresholds to doing other good things, for instance (I don&#39;t believe it ever applies to things like government, no).&lt;br /&gt;&lt;br /&gt;I&#39;ve been thinking of setting up something like a quick &quot;tip me a dollar&quot; link, or some such, to make it easy for people who stop by to read something they found Really Useful (I do occasional &lt;a href=&quot;http://ecmanaut.blogspot.com/2005/11/blogger-previous-and-next-date-links.html?tags=howto&quot;&gt;howto articles&lt;/a&gt;, occasionally rather extraordinarily adoption friendly, like that one) to express a little gratitude in a way that would once in a while buy me a good book, or, admittedly much more likely, sponsor someone else similarly.&lt;br /&gt;&lt;br /&gt;Because once in a while, I really feel that way -- &lt;i&gt;this&lt;/i&gt; I would like to pay for, whether I need to or not, or in some other fashion add to the author&#39;s bin of incoming appreciation that hits the mark, making him/her feel a little better about having done whatever that was and having shared it with me. These things should be encouraged.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://bloggerhacks.blogspot.com/&quot;&gt;Blogger hacks&lt;/a&gt; has a rather nice PayPal &quot;tip jar&quot; kind of thing, which verbally gives about the right feel. It&#39;s a bit on the spacious side, and kind of eats space I would prefer not to have to allocate. Besides, the more space we allocate for it, I think (and this could of course be argued), the message &quot;give me cold, hard cash&quot; kind of gets nailed in (yes, the text testifies to the opposite; this does not change anything, though). I don&#39;t want it to look like or be perceived as that. I just want to make it easy for someone of my own mindset to drop a dollar or two, or whatever feels appropriate.&lt;br /&gt;&lt;br /&gt;I wish I were a bit more graphically inclined; these things are difficult to design, if we think &quot;an icon&quot;, and perhaps a bit of title text to clarify (on hover, perhaps) -- if anyone tosses some graphic creation (perhaps including the PayPal logo?) I like placed under the public domain (I intend to do the same), I&#39;ll be sure to drop my own first tip at you. :-)&lt;br /&gt;&lt;br /&gt;Regarding licenses, by the way, I usually like the &lt;a href=&quot;http://creativecommons.org/licenses/&quot;&gt;Creative Commons licenses&lt;/a&gt;, but for once, even the least restrictive ones quite make the cut; we can&#39;t have this be the &lt;a href=&quot;http://creativecommons.org/licenses/sa/1.0/&quot;&gt;ShareAlike license&lt;/a&gt;, because it requires that you must make clear to others the license terms of the work, and we just don&#39;t have the space, and risk mixing up that with the work on the page it sits on, and we can&#39;t have the &lt;a href=&quot;http://creativecommons.org/licenses/by/2.5/&quot;&gt;Attribution license&lt;/a&gt;, for the same reason (and adding that the creditee would again be blurred and mixed up with page content). Public domain was good in the Amiga days, though, and still is good.&lt;br /&gt;&lt;br /&gt;I will place the results of this idea in the public domain, whenever I finish. Feel free to do whatever you want with it, hopefully for the better of the state of things. :-)&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+PayPal&quot; rel=&quot;tag&quot;&gt;PayPal&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113322566090729492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113322566090729492' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113322566090729492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113322566090729492'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/11/lower-bribery-threshold.html' title='Lower bribery threshold'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113322361332509129</id><published>2005-11-29T01:12:00.000+01:00</published><updated>2005-11-29T02:02:12.863+01:00</updated><title type='text'>Add Blogger calendar date format options</title><content type='html'>My &lt;a href=&quot;http://ecmanaut.blogspot.com/2005/08/adding-calendar-navigation-to-your.html&quot;&gt;Blogger calendar&lt;/a&gt; doesn&#39;t allow for any other date formatting options than beautiful ISO YYYY-MM-DD dates (mostly since I wrote it for my own blog, and only coincidentally also wrote a tutorial on how to use it in your own).&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:small;&quot;&gt;Yes, I admit to also subconsciously, maybe even consciously, whoop at the thought of spreading the use of a date format that is &lt;i&gt;not&lt;/i&gt; susceptible to misinterpretation, such as two-digit years, and the horrible DD/MM and MM/DD formats used by Britons and Americans, or Americans and Britons. Or whomever else use whichever of those formats, for that matter; they are Evil! Begone!&lt;/span&gt; &lt;span style=&quot;font-size:x-small;&quot;&gt;(Out! Out! You demons of stupidity!)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A bit later on, I actually wrote up a rather ambitious date parsing routine for another (more benevolent) article I wrote, on &lt;a href=&quot;http://ecmanaut.blogspot.com/2005/11/blogger-previous-and-next-date-links.html&quot;&gt;how to add previous and next date links to Blogger blogs&lt;/a&gt;, which would be able to serve the same purpose in a future Calendar article, if I wrote one.&lt;br /&gt;&lt;br /&gt;Maybe I should start by &lt;a href=&quot;http://some-assembly-required.blogspot.com/2005/11/lower-bribery-threshold.html&quot;&gt;making myself more easily susceptible to reader bribery&lt;/a&gt;.&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+Blogger&quot; rel=&quot;tag&quot;&gt;Blogger&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+calendar&quot; rel=&quot;tag&quot;&gt;calendar&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113322361332509129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113322361332509129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113322361332509129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113322361332509129'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/11/add-blogger-calendar-date-format.html' title='Add Blogger calendar date format options'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113235115645336518</id><published>2005-11-18T22:30:00.000+01:00</published><updated>2005-11-18T23:05:04.036+01:00</updated><title type='text'>Automate double password confirmation typing by means of Greasemonkey</title><content type='html'>Ever seen, and really hated, one of these?&lt;br /&gt;&lt;br /&gt;&lt;form&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;Password:&lt;/td&gt;&lt;td&gt;&lt;input onkeypress=&quot;var n=document.getElementById(&#39;p1&#39;);n.innerHTML=&#39;(No, no, no! Just for show. :-)&#39;; setTimeout(function(){ n.innerHTML=&#39;&#39;; }, 5e3);&quot; type=&quot;password&quot; /&gt; &lt;span style=&quot;color:red;font-style:italic;&quot; id=&quot;p1&quot;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Again:&lt;/td&gt;&lt;td&gt;&lt;input onkeypress=&quot;var o=document.getElementById(&#39;p2&#39;);o.innerHTML=&#39;Ssh! Someone might be peeking!&#39;; setTimeout(function(){ o.innerHTML=&#39;&#39;; }, 5e3);&quot; type=&quot;password&quot; /&gt; &lt;span style=&quot;color:red;font-style:italic;&quot; id=&quot;p2&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/form&gt;&lt;br /&gt;Wouldn&#39;t it be rather stylish to have a Greasemonkey script fill in the second entry as you type the first, when there was nothing written there in the first place? (Yes, it severely defeats the intended &lt;i&gt;purpose&lt;/i&gt; of the double check, I know. But let&#39;s move on.)&lt;br /&gt;&lt;br /&gt;A good solution to the above would look for any two password fields in any page, that do not have any other visible form widget between them, and attach an onkeypress handler to the first, passing on the event, or a copy of it, to the other field as well. Points of style for additionally verifying that they are not very far apart in the page flow using this, or some variant thereof:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;function getScreenCoordinates( node )&lt;br /&gt;{&lt;br /&gt;  var x = node.offsetLeft;&lt;br /&gt;  var y = node.offsetTop;&lt;br /&gt;  while( (node = node.offsetParent) )&lt;br /&gt;  {&lt;br /&gt;    x += node.offsetLeft;&lt;br /&gt;    y += node.offsetTop;&lt;br /&gt;  }&lt;br /&gt;  return { x:x, y:y };&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;The Google Reader blog mentioned a while ago &lt;a href=&quot;http://googlereader.blogspot.com/2005/11/warning-geekery-ahead.html&quot;&gt;how you synthesize your own mouse click events&lt;/a&gt;; I&#39;m sure it&#39;s not far from how it&#39;s done with keyboard input. Their code looked like this:&lt;br /&gt;&lt;pre&gt;function simulateClick( node )&lt;br /&gt;{&lt;br /&gt;  var event = node.ownerDocument.createEvent( &#39;MouseEvents&#39; );&lt;br /&gt;&lt;br /&gt;  event.initMouseEvent( &#39;click&#39;,&lt;br /&gt;                        true, // can bubble&lt;br /&gt;                        true, // cancellable&lt;br /&gt;                        node.ownerDocument.defaultView,&lt;br /&gt;                        1, // clicks&lt;br /&gt;                        50, 50, // screen coordinates&lt;br /&gt;                        50, 50, // client coordinates&lt;br /&gt;                        false, false, false, false, // control/alt/shift/meta&lt;br /&gt;                        0, // button,&lt;br /&gt;                        node );&lt;br /&gt;&lt;br /&gt;  node.dispatchEvent( event );&lt;br /&gt;}&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113235115645336518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113235115645336518' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113235115645336518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113235115645336518'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/11/automate-double-password-confirmation.html' title='Automate double password confirmation typing by means of Greasemonkey'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113231671271629018</id><published>2005-11-18T13:07:00.000+01:00</published><updated>2005-11-18T13:25:12.726+01:00</updated><title type='text'>Blogger automated trackback ping tool</title><content type='html'>Write a Greasemonkey script which adds (outgoing) Trackback functionality to Blogger. I believe a good solution would be to add one or several links to the publish page, similar to my &lt;a href=&quot;http://ecmanaut.blogspot.com/2005/11/blogger-publish-ping-and-categorizer.html&quot;&gt;Blogger ping tool&lt;/a&gt; to trig each trackback ping manually.&lt;br /&gt;&lt;br /&gt;My present favourite thought on how to accomplish this is by processing the published post&#39;s links (including both the optional Link: field and any &lt;tt&gt;&amp;lt;a href&amp;gt;&lt;/tt&gt; tags in the post body), to sum up a list of outbound links. Then, for each link in that list, fetch the pointed to page, processing it for structured announcement of a trackback URI for that page (via the RDF markup standardized for this purpose -- there may be hairs to split about how to behave, in case a page would specify more than one trackback URI -- I&#39;ll leave that for further pondering and discussion). Filter out all the URLs from the list which did not yield one trackback URI. For each of the links left, add a &quot;Trackback ping&quot; link on the &quot;post published&quot; page.&lt;br /&gt;&lt;br /&gt;Points for style awarded for stylishly formatting this list, relating it to A) the linked URL, B) the &lt;tt&gt;&amp;lt;a href&amp;gt;&lt;/tt&gt;link contents&lt;tt&gt;&amp;lt;/a&amp;gt;&lt;/tt&gt;, C) the trackback ping of the resource. I&#39;d appreciate any suggestions and HTML mockups very much; this is a bit of my weak spot.&lt;br /&gt;&lt;br /&gt;Additional points of style for an additional list, clearly separated from the first, for the filtered out links (and marked as such) for the links lacking a trackback URI we could find, for human manual visit, to pick up any such trackback URIs (as I&#39;m sure many are only marked up for human visitors to find), and related machinery to add the trackback URIs to these, and have ping functionality for them as well. (The mechanics part of which I will also manage myself without any problems.) Aid on the visiofunctional design, again, much appreciated.&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/Someassemblyrequired/Someassemblyrequired+Blogger&quot; rel=&quot;tag&quot;&gt;Blogger&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/Someassemblyrequired/Someassemblyrequired+trackback&quot; rel=&quot;tag&quot;&gt;trackback&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/Someassemblyrequired/Someassemblyrequired+ping&quot; rel=&quot;tag&quot;&gt;ping&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/Someassemblyrequired/Someassemblyrequired+tools&quot; rel=&quot;tag&quot;&gt;tools&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/Someassemblyrequired/Someassemblyrequired+BlogTech&quot; rel=&quot;tag&quot;&gt;BlogTech&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/Someassemblyrequired/Someassemblyrequired+Greasemonkey&quot; rel=&quot;tag&quot;&gt;Greasemonkey&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113231671271629018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113231671271629018' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113231671271629018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113231671271629018'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/11/blogger-automated-trackback-ping-tool.html' title='Blogger automated trackback ping tool'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113217017171880910</id><published>2005-11-16T20:35:00.000+01:00</published><updated>2005-11-20T01:02:30.920+01:00</updated><title type='text'>Make real link of Blogger details... URLs</title><content type='html'>When publishing a post at Blogger, you get a view much like this:&lt;br /&gt;&lt;h1&gt;Your blog published successfully. &lt;a href=&quot;#&quot;&gt;(Show details ...)&lt;/a&gt;&lt;/h1&gt;&lt;br /&gt;Files published... &lt;strong&gt;100%&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;archives/2005_11_08_ecmanaut_archive.html&lt;br /&gt;2005/11/subscribe-to-feed-user-scripts.html&lt;br /&gt;atom.xml&lt;br /&gt;index.html&lt;br /&gt;&lt;br /&gt;These paths are not links to these pages; let&#39;s make them. I have some of the base code covered already in my &lt;a href=&quot;http://ecmanaut.blogspot.com/2005/11/comment-blogging-tool-for-blogger.html&quot;&gt;commentblogging scriptlet&lt;/a&gt; (it parses the stuff to make &lt;i&gt;one&lt;/i&gt; link at the bottom of the page; should be a snap, adding links to all of them, while at it.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;completed&quot;&gt;Completed! It became part of my somewhat larger &lt;a href=&quot;http://ecmanaut.blogspot.com/2005/11/blogger-publish-ping-and-categorizer.html&quot;&gt;Blogger publish ping and categorizer&lt;/a&gt; tool, since I&#39;m trying to lay low on making multiple scripts for the same page, and this tool already addressed that page. (The reasoning behind this is that in Greasemonkey 0.6.3 and earlier, the &lt;a href=&quot;http://mozdev.org/pipermail/greasemonkey/2005-November/006685.html&quot;&gt;user interface does not scale usability wise&lt;/a&gt; to more than about 30 scripts, and I&#39;m pushing that threshold rather hard myself. 0.6.4 will be a saviour!)&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;width:100%;text-align:center;&quot;&gt;&lt;img width=&quot;413&quot; height=&quot;278&quot; alt=&quot;screenshot&quot; src=&quot;http://img392.imageshack.us/img392/9357/linkedurls1jj.png&quot; /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+completed&quot; rel=&quot;tag&quot;&gt;completed&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+Greasemonkey&quot; rel=&quot;tag&quot;&gt;Greasemonkey&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas unimplemented+Blogger&quot; rel=&quot;tag&quot;&gt;Blogger&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113217017171880910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113217017171880910' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113217017171880910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113217017171880910'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/11/make-real-link-of-blogger-details-urls.html' title='Make real link of Blogger details... URLs'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113216410745631591</id><published>2005-11-16T18:48:00.000+01:00</published><updated>2005-11-16T19:01:47.463+01:00</updated><title type='text'>Add link love to Blogger comments script</title><content type='html'>Write a Greasemonkey user script which scours through Blogger blog post pages (&lt;tt&gt;http://*.blogspot.com/*&lt;/tt&gt;) for comments whose comment body contains one or more links with the &lt;tt&gt;rel=nofollow&lt;/tt&gt; attribute. To each of these posts, add an icon (&lt;img src=&quot;http://www.lysator.liu.se/%7Ejhs/blog/ecmanaut/2005-11-16/heart.png&quot; alt=&quot;&amp;lt;3&quot; class=&quot;inline&quot; style=&quot;vertical-align: bottom;&quot; height=&quot;15&quot; width=&quot;16&quot;&gt;) which, when clicked, kicks off a GM_xmlhttpRequest for the Blogger edit post page (&lt;tt&gt;http://www.blogger.com/post-edit.g?blogID=&lt;i&gt;blog-id&lt;/i&gt;&amp;postID=&lt;i&gt;comment-id&lt;/i&gt;&lt;/tt&gt;), parsing the comment body and removing the &lt;tt&gt;REL=NOFOLLOW&lt;/tt&gt;, before posting the comment back to Blogger again. Upon successful completion, remove the icon from the page.&lt;br /&gt;&lt;br /&gt;Additional points awarded for slowly &lt;a href=&quot;http://ecmanaut.blogspot.com/2005/11/greasemonkey-imageshack-this-scripts.html&quot;&gt;pulsating the icon while busy with the net traffic&lt;/a&gt; (&lt;a href=&quot;http://www.lysator.liu.se/~jhs/userscript/*/imageshack-inline.user.js&quot;&gt;code available here&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://ecmanaut.blogspot.com/2005/11/on-relnofollow-splogging-deterrent.html&quot;&gt;A more detailed discussion on the topic&lt;/a&gt;.&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+rel=nofollow&quot; rel=&quot;tag&quot;&gt;rel=nofollow&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+BlogTech&quot; rel=&quot;tag&quot;&gt;BlogTech&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+LinkLove&quot; rel=&quot;tag&quot;&gt;LinkLove&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+Greasemonkey&quot; rel=&quot;tag&quot;&gt;Greasemonkey&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113216410745631591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113216410745631591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113216410745631591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113216410745631591'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/11/add-link-love-to-blogger-comments.html' title='Add link love to Blogger comments script'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113210505750131097</id><published>2005-11-16T02:28:00.000+01:00</published><updated>2005-11-16T02:38:54.893+01:00</updated><title type='text'>Google Analytics Greasemonkey spy script</title><content type='html'>Here&#39;s a useless idea that struck me: people use &lt;a href=&quot;http://www.google.com/analytics/&quot;&gt;Google Analytics&lt;/a&gt; to spy on their visitors. It&#39;s quite possible to spy back, finding out which sites are tied to the same Google account. Oh, lookie -- this site has one too. (However did &lt;i&gt;that&lt;/i&gt; happen? :-) Each new site using it gets a &lt;code&gt;var _uacct = &quot;UA-&lt;i&gt;[account id]&lt;/i&gt;-&lt;i&gt;[site id]&lt;/i&gt;&quot;;&lt;/code&gt; &quot;cookie&quot; which is used to identify the statistics data flow back to Google.&lt;br /&gt;&lt;br /&gt;So by gathering up these cookies, tying them to the site they were found at, eventually you will be able to detect which sites are tied to the same account.&lt;br /&gt;&lt;br /&gt;Given this much text to explain the thought, it suddenly feels like a very silly idea, but what the heck, this place is for ideas first, filtering and/or implementation later anyway. Perhaps I ought to invite a slew of other idea generators here too, by the way?&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+Greasemonkey&quot; rel=&quot;tag&quot;&gt;Greasemonkey&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+GoogleAnalytics&quot; rel=&quot;tag&quot;&gt;GoogleAnalytics&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113210505750131097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113210505750131097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113210505750131097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113210505750131097'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/11/google-analytics-greasemonkey-spy.html' title='Google Analytics Greasemonkey spy script'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19000527.post-113209488056686863</id><published>2005-11-15T23:41:00.000+01:00</published><updated>2005-11-16T02:27:41.890+01:00</updated><title type='text'>Fixing Blogger&#39;s post editor&#39;s keybindings</title><content type='html'>The Blogger post editor has rather nice Ctrl+B / Ctrl+I key bindings for making the current selection bold / italic. Unfortunately they generate &lt;code&gt;&amp;lt;span style=&quot;font-weight:bold;&quot;&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;span style=&quot;font-style:italic;&quot;&amp;gt;&lt;/code&gt; abhorrations instead of proper HTML &lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;i&amp;gt;&lt;/code&gt;tags. Let&#39;s make a Greasemonkey script to fix that, shall we?&lt;br /&gt;&lt;div class=&quot;tags&quot;&gt;Tags:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+Blogger&quot; rel=&quot;tag&quot;&gt;Blogger&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://del.icio.us/ohayou/ideas+Greasemonkey&quot; rel=&quot;tag&quot;&gt;Greasemonkey&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://some-assembly-required.blogspot.com/feeds/113209488056686863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19000527/113209488056686863' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113209488056686863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19000527/posts/default/113209488056686863'/><link rel='alternate' type='text/html' href='http://some-assembly-required.blogspot.com/2005/11/fixing-bloggers-post-editors.html' title='Fixing Blogger&#39;s post editor&#39;s keybindings'/><author><name>Johan Sundström</name><uri>http://www.blogger.com/profile/04076097346172610543</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry></feed>