<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog &#187; Other</title>
	<atom:link href="http://antimatter15.com/wp/category/other/feed/" rel="self" type="application/rss+xml" />
	<link>http://antimatter15.com/wp</link>
	<description>this title probably isn&#039;t very original</description>
	<lastBuildDate>Fri, 23 Jul 2010 21:21:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Steganography in Javascript</title>
		<link>http://antimatter15.com/wp/2010/06/steganography-in-javascript/</link>
		<comments>http://antimatter15.com/wp/2010/06/steganography-in-javascript/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 02:01:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[infornography]]></category>
		<category><![CDATA[kitty]]></category>
		<category><![CDATA[steganography]]></category>
		<category><![CDATA[tree]]></category>
		<category><![CDATA[wikipedia]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=997</guid>
		<description><![CDATA[For no real reason, I was reading the Wikipedia article on Digital Steganography and saw the interesting image where an image of a kitty is extracted from some boring trees. I decided to port the example to &#60;canvas&#62;.]]></description>
			<content:encoded><![CDATA[<div id="attachment_998" class="wp-caption alignnone" style="width: 426px"><a href="http://antimatter15.com/wp/wp-content/uploads/2010/06/Selection_034.png"><img class="size-full wp-image-998 " title="Steganography Kitteh" src="http://antimatter15.com/wp/wp-content/uploads/2010/06/Selection_034.png" alt="" width="416" height="213" /></a><p class="wp-caption-text">Steganography Kitteh</p></div>
<p>For no real reason, I was reading the Wikipedia article on <a href="http://en.wikipedia.org/wiki/Steganography#Digital_steganography">Digital Steganography</a> and saw the interesting image where an image of a kitty is extracted from some boring trees. I decided to <a href="http://antimatter15.com/misc/steganography.html">port the example to &lt;canvas&gt;</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2010/06/steganography-in-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>μwave: lightweight mobile wave client</title>
		<link>http://antimatter15.com/wp/2010/05/%ce%bcwave-lightweight-mobile-wave-client/</link>
		<comments>http://antimatter15.com/wp/2010/05/%ce%bcwave-lightweight-mobile-wave-client/#comments</comments>
		<pubDate>Sun, 30 May 2010 02:08:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microwave]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Wave]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google wave]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[screenshot]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[wave reader]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=988</guid>
		<description><![CDATA[I like bragging when I do something nobody else has done before. And μwave is the first true third-party wave client which is compatible with Google Wave. It&#8217;s free to use at http://micro-wave.appspot.com/ and works great on mobile devices. It supports searching for waves, opening them and writing replies. Currently it doesn&#8217;t know read/unread state [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://antimatter15.com/wp/wp-content/uploads/2010/05/http-micro-wave.appspot.com-static-ui.html-Chromium_025.png"><img class="alignright size-full wp-image-991" title="Microwave Wave-View May 29" src="http://antimatter15.com/wp/wp-content/uploads/2010/05/http-micro-wave.appspot.com-static-ui.html-Chromium_025.png" alt="" width="309" height="459" /></a><a href="http://antimatter15.com/wp/wp-content/uploads/2010/05/http-micro-wave.appspot.com-static-ui.html-Chromium_023.png"><img class="size-full wp-image-990 alignnone" title="Microwave Search-View May 29" src="http://antimatter15.com/wp/wp-content/uploads/2010/05/http-micro-wave.appspot.com-static-ui.html-Chromium_023.png" alt="" width="309" height="459" /></a></p>
<p>I like bragging when I do something nobody else has done before. And <strong>μwave </strong>is the first true third-party wave client which is compatible with Google Wave. It&#8217;s free to use at <a href="http://micro-wave.appspot.com/">http://micro-wave.appspot.com/</a> and works great on mobile devices. It supports searching for waves, opening them and writing replies.</p>
<p>Currently it doesn&#8217;t know read/unread state of the waves from the search panel and doesn&#8217;t know read/unread blips, but as of time of writing, its a limitation and flaw in the current version of the <strong>Google Wave Data API </strong>(introduced just ten days ago at Google I/O). Expect this to be resolved in the near future with upcoming versions of the API and this application.</p>
<p>The source code for the server component is open-source and can be <a href="http://gist.github.com/417035">found on github</a> (though it&#8217;s slightly outdated, but the important stuff is there). It&#8217;s fairly simple (It&#8217;s based on the original <a href="http://oauth.googlecode.com/svn/code/python/oauth/example/client.py">example code</a> so I&#8217;m going to have the same MIT license), but one of the few python scripts which can do authentication with google and pass commands to the data api.  It relies on the <a href="http://oauth.googlecode.com/svn/code/python/oauth/">Python OAuth Library</a>.</p>
<p>The Blip renderer component of this is licensed under the MIT license and can be found on the <a href="http://microwave.googlecode.com/hg/bliprender2.html">old microwave repo</a>. The only part left is the interface, which is going to be the usual GPLv3.</p>
<p>For a little bit of history, this isn&#8217;t exactly a new project. The<a href="http://code.google.com/p/microwave/source/detail?r=cb27d32b3a5ee5aeaef38c58463268e7931f60f0"> google code project</a> has existed since January 9th, 2010. The purpose was to create a mobile-friendly version of Wave Reader. But that goes even deeper, I can trace it back to the<a href="http://static-bot.appspot.com/view/?id=googlewave.com!w+DUX6159GV"> original Static-Bot</a> dated to October 18, 2009. Then, the Google Wave embed API allowed people to view waves only if someone had a Google Wave account and was logged in at the time. This was quite problematic as Wave was still a limited preview which not many people had and probably hampered adoption.</p>
<p>Another separate but eventually convergent issue which led to the microwave project was &#8220;<a href="http://antimatter15.com/misc/read/?googlewave.com!w+Ze3l0mj0A">Desktop Wave Reader + GWave Client/Server Protocol</a>&#8221; post which I made on October 29th of 2009.</p>
<p>During late October of last year, I reverse-engineered some of the features of the Google Wave client. Up until then, the only published specs were the federation protocols, which dealt with how multiple wave servers would use a common protocol to allow multiple users without a central authority and for the gadget and robot apis. Notably missing was a client/server api, for a user of specifically the google wave client, which did not yet support federation (and to date, preview still does not), and to browse/view the waves in one&#8217;s inbox without needing to switch to an entirely new provider. The first component was the ability to read waves. After that was accomplished, I tried to reverse engineer a more complex aspect of the protocol, which was the ability to search waves. I eventually realized that that component, search was part of a larger puzzle, which was the real-time BrowserChannel wire protocol which virtually all of wave was based. I made some progress, but near the end, I gave up in frustration. Luckily, someone else became interested in the same thing, and<a href="github.com/waverz/waveclient"> Silicon Dragon basically got search working</a>.</p>
<p>This happened now in early December. I started on a project called <a href="http://antimatter15.com/wp/2010/01/wave-reader-4-6/">Wave Reader</a>, which merged the ideas of static-bot with the desktop wave reader and a new functional blip rendering engine. At that time, the Google Wave client was still horrendously slow, taking several minutes at times to load large waves.</p>
<p>On January, I began a project to merge Wave Reader and the wire protocol (search). I thought an awesome name would be microwave (or μwave) and started the code repo on January 9th. I worked on it a bit, so that it was mostly complete, with search and loading all working, with one missing component: login. Eventually, I got bored and the project lay abandoned for a few months.</p>
<p>This gets us to basically 4 days ago, when I started working on a renaissance of the μwave project, based on the recently released Google Wave Data API. The first component was creating a new blip renderer specifically designed for parsing the new (much cleaner) json format which is part of the robots api. Then I created a client around that and created a python backend for having it work on app engine.</p>
<p>The Future is always awesome to prophesize about. In the coming weeks or days, google will probably update the data api to allow for information like  So, while http://micro-wave.appspot.com will likely remain free and maintained for the forseeable future, I do plan on making a paid iPhone/iPad app. The iPhone app may have some extra features like offline/caching support.</p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2010/05/%ce%bcwave-lightweight-mobile-wave-client/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Project Wikify Updated</title>
		<link>http://antimatter15.com/wp/2009/12/project-wikify-updated/</link>
		<comments>http://antimatter15.com/wp/2009/12/project-wikify-updated/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 01:22:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Project Wikify]]></category>
		<category><![CDATA[finally]]></category>
		<category><![CDATA[old]]></category>
		<category><![CDATA[revive]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[wikify]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=903</guid>
		<description><![CDATA[In 2008 (That long ago, I know!), I started something called Project Wikify. Basically, it was a bookmarklet which let people edit stuff on web pages and save it onto a server. A lot of people may be aware of the simple thing where pasting javascript:document.designMode=&#8221;on&#8221;; into the URL bar makes the internet explode into [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_904" class="wp-caption alignright" style="width: 310px"><a href="http://antimatter15.com/wp/wp-content/uploads/2009/12/screenshot_056.png"><img class="size-medium wp-image-904 " title="Wikify Updated" src="http://antimatter15.com/wp/wp-content/uploads/2009/12/screenshot_056-300x220.png" alt="" width="300" height="220" /></a><p class="wp-caption-text">Yes, it&#39;s true. I finally updated Wikify</p></div>
<p>In 2008 (That long ago, I know!), I started something called <a href="http://wikify.antimatter15.com/">Project Wikify</a>. Basically, it was a bookmarklet which let people edit stuff on web pages and <em>save it onto a server</em>. A lot of people may be aware of the simple thing where pasting javascript:document.designMode=&#8221;on&#8221;; into the URL bar makes the internet explode into awesomeness such as replacing every other word in this blog with the name of a certain genitalia. Of course, the absolutely huge issue with this is that you really can&#8217;t <em>share</em> your <em>awesome</em> creation.</p>
<p>So here comes Wikify to fix that, the age-old problem of sharing your vandalized sites has been finally resolved&#8230;.  a year ago. And since then, nobody really has ever cared.</p>
<p>So, I looked back at it last week, and realized how painfully crappy the website for it was. To fix it, I decided to test out iWeb, yes, a totally non-leet WYSIWYG editor. But yes, that&#8217;s how crappy my web-design skills are, so the result is quite an improvement. Anyway, I used the Blank-Page template, so at least you can spare your eyes from yet another generic theme (*cough this blog cough*).</p>
<p>While designing the site, I tried out Wikify and discovered that it didn&#8217;t work on Wikipedia articles and the News button didn&#8217;t work. So I quickly got those features working, so now i&#8217;m writing this blog post about my tiny edits and the new site.</p>
<p><a href="http://wikify.antimatter15.com/">http://wikify.antimatter15.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/12/project-wikify-updated/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>XPath Bookmark Bookmarklet</title>
		<link>http://antimatter15.com/wp/2009/11/xpath-bookmark-bookmarklet/</link>
		<comments>http://antimatter15.com/wp/2009/11/xpath-bookmark-bookmarklet/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 21:33:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bookmarklet]]></category>
		<category><![CDATA[elitist]]></category>
		<category><![CDATA[future]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[link]]></category>
		<category><![CDATA[userscript]]></category>
		<category><![CDATA[visionary]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[xpath]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=875</guid>
		<description><![CDATA[javascript:(function(){ //inspired by http://userscripts.org/scripts/show/8924 var s = document.createElement(&#8216;script&#8217;); s.setAttribute(&#8216;src&#8217;,'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js&#8217;); if(typeof jQuery==&#8217;undefined&#8217;) document.getElementsByTagName(&#8216;head&#8217;)[0].appendChild(s); (function() { if(typeof jQuery==&#8217;undefined&#8217;) setTimeout(arguments.callee, 100) else{ jQuery(&#8220;*&#8221;).one(&#8220;click&#8221;,function(event){ //http://snippets.dzone.com/posts/show/4349 for(var path = &#8221;, elt = jQuery(this)[0]; elt &#38;&#38; elt.nodeType==1; elt=elt.parentNode){ var idx = jQuery(elt.parentNode).children(elt.tagName).index(elt)+1; idx&#62;1 ? (idx=&#8217;['+idx+']&#8216;) : (idx=&#8221;); path=&#8217;/'+elt.tagName.toLowerCase()+idx+path; } window.location.hash = &#8220;#xpath:&#8221;+path event.stopImmediatePropagation() }) } })(); })() Sometimes you want to [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">javascript:(function(){</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">//inspired by http://userscripts.org/scripts/show/8924</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">var s = document.createElement(&#8216;script&#8217;);</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">s.setAttribute(&#8216;src&#8217;,'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js&#8217;);</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">if(typeof jQuery==&#8217;undefined&#8217;) document.getElementsByTagName(&#8216;head&#8217;)[0].appendChild(s);</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">(function() {</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">if(typeof jQuery==&#8217;undefined&#8217;) setTimeout(arguments.callee, 100)</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">else{</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">jQuery(&#8220;*&#8221;).one(&#8220;click&#8221;,function(event){</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">//http://snippets.dzone.com/posts/show/4349</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">for(var path = &#8221;, elt = jQuery(this)[0]; elt &amp;&amp; elt.nodeType==1; elt=elt.parentNode){</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">var idx = jQuery(elt.parentNode).children(elt.tagName).index(elt)+1;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">idx&gt;1 ? (idx=&#8217;['+idx+']&#8216;) : (idx=&#8221;);</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">path=&#8217;/'+elt.tagName.toLowerCase()+idx+path;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">}</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">window.location.hash = &#8220;#xpath:&#8221;+path</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">event.stopImmediatePropagation()</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">})</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">}</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">})();</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">})()</div>
<p>Sometimes you want to link to a certain part of a web page. That&#8217;s great and works well if its a nice site that clearly defines anchor tags to link to, but what if there isn&#8217;t?</p>
<p>Today I just remembered something and I thought that I saw something earlier with a xpath URL hash. I googled it and couldn&#8217;t find anything native to the browser (please correct me if I&#8217;m wrong) but found this script: <a href="http://userscripts.org/scripts/show/8924">http://userscripts.org/scripts/show/8924</a> which is basically what I was thinking about. But it was allegedly hard to make those URLs, so I thought why not make a bookmarklet to make linking to those URLs simple? So I quickly hacked this together</p>
<p><a href="javascript:(function(){var a=document.createElement(&quot;script&quot;);a.setAttribute(&quot;src&quot;,&quot;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js&quot;);if(typeof jQuery==&quot;undefined&quot;){document.getElementsByTagName(&quot;head&quot;)[0].appendChild(a)}(function(){if(typeof jQuery==&quot;undefined&quot;){setTimeout(arguments.callee,100)}else{jQuery(&quot;*&quot;).one(&quot;click&quot;,function(d){jQuery(this)[0].scrollIntoView();for(var e=&quot;&quot;,c=jQuery(this)[0];c&amp;&amp;c.nodeType==1;c=c.parentNode){var b=jQuery(c.parentNode).children(c.tagName).index(c)+1;b&gt;1?(b=&quot;[&quot;+b+&quot;]&quot;):(b=&quot;&quot;);e=&quot;/&quot;+c.tagName.toLowerCase()+b+e}window.location.hash=&quot;#xpath:&quot;+e;d.preventDefault();d.stopPropagation();jQuery(&quot;*&quot;).unbind(&quot;click&quot;,arguments.callee)})}})()})(); ">XPathLink</a> (Just drag it over to your bookmarks bar as with any other bookmarklet). To use, just click on the bookmark, and click on the element you want to link to. You should see the URL will update with a xpath hash showing you the copy-pastable link to that element. The code is quite simple and should work on Firefox, Chrome and all the other browsers (maybe even IE) but the ability to auto-scroll and actually use the links is only available to Firefox and potentially Opera and Chrome.</p>
<p>And I&#8217;m working on a Chrome Extension for the original userscript (which should work with Chrome&#8217;s userscript support, but I&#8217;m going to try packaging it as a chrome extension file) But sadly chromium for linux isnt up to speed especially with extension development.</p>
<p>The source can be found <a href="http://gist.github.com/223708">http://gist.github.com/223708</a>.</p>
<p><strong><em>Update:</em><span style="font-weight: normal;"> <em>Fixed the link for the path and added some stuff. <strong>Update 2</strong></em><em>: Fixed bookmarklet, now scrolls to clicked, executes only once, prevents default</em></span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/11/xpath-bookmark-bookmarklet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Massive file sharing networks?</title>
		<link>http://antimatter15.com/wp/2009/09/massive-file-sharing-networks/</link>
		<comments>http://antimatter15.com/wp/2009/09/massive-file-sharing-networks/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 19:39:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Distributed]]></category>
		<category><![CDATA[P2P]]></category>
		<category><![CDATA[distributed]]></category>
		<category><![CDATA[p2p]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=839</guid>
		<description><![CDATA[With BitTorrent and everything else, logically everone just has a network around a single file everyone is interested in. It makes tit-for-tat really practical and quite easy. Almost like darwinian natural selection (well, evolution is like moore&#8217;s law, you can just about apply it to everything imaginable ignoring the massive pardigm tangents that result), the [...]]]></description>
			<content:encoded><![CDATA[<p>With BitTorrent and everything else, logically everone just has a network around a single file everyone is interested in. It makes tit-for-tat really practical and quite easy. Almost like darwinian natural selection (well, evolution is like moore&#8217;s law, you can just about apply it to everything imaginable ignoring the massive pardigm tangents that result), the popular files are fast and the unpopular ones get slow and/or eventually die, totally lost.</p>
<p>Certainly this almost capitalistic approach is efficient for the massively popular files where the chances are that you will encounter many fast seeds. But for those less fortunate, the downloads may slow to a crawl as peers may be geographically distant.</p>
<p>What about something like freenet, where everyone has a cache of data that they may or may not be interested in. With such a massive netowrk, you no longer have to worry about trackers taking over as all of them are now on equal ground, finding trackers is useless as they are inhrently found. Leeching is solved by a global karma system, and all of the other problems are replaced with the single complicated problem of scalability (which totally makes the whole concept crap).</p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/09/massive-file-sharing-networks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wave Gadget API issues (again)</title>
		<link>http://antimatter15.com/wp/2009/09/wave-gadget-api-issues-again/</link>
		<comments>http://antimatter15.com/wp/2009/09/wave-gadget-api-issues-again/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 13:40:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ajax Animator]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Wave]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google wave]]></category>
		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=822</guid>
		<description><![CDATA[So I&#8217;ve been having issues with the Wave Gadget API (again). This one is simple, Wave isn&#8217;t really real time. So right after doing a submitDelta, you can&#8217;t get() the data and expect to have the new one instantly. It&#8217;s been giving me some problems, but I&#8217;m getting around it by using my awesome wave [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve been having issues with the Wave Gadget API (again). This one is simple, Wave isn&#8217;t really real time. So right after doing a submitDelta, you can&#8217;t get() the data and expect to have the new one instantly. </p>
<p>It&#8217;s been giving me some problems, but I&#8217;m getting around it by using my awesome wave gadget library which will now magically apply the changes immediately so you can access it even before things actually happen.</p>
<p>Also, partially due to this, things would be far more useful if you could get the date of each insertion or deletion.</p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/09/wave-gadget-api-issues-again/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Migrating small stuff to GitHub</title>
		<link>http://antimatter15.com/wp/2009/09/migrating-small-stuff-to-github/</link>
		<comments>http://antimatter15.com/wp/2009/09/migrating-small-stuff-to-github/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 23:46:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ajax Animator]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[vX JS]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[small]]></category>
		<category><![CDATA[spamming]]></category>
		<category><![CDATA[xkcd]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=812</guid>
		<description><![CDATA[So I&#8217;m moving the small totally unknown and 1-2 file things that I&#8217;ve spammed Google Code with previously. Small things like js-xdb, mental-interpreter, js-tpl-engine, js-xdomain, subleq2, vxjs-ajax (a whole project for a single function? crazy stuff). So i&#8217;m shrinking my google code profile to reduce my spamminess, becasue I used to feel like it would [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignright" style="width: 192px"><img title="GitHub" src="http://www.ubuntu-pics.de/bild/23721/screenshot_053_X8im56.png" alt="Ill take the liberties of plagarizing this as who wouldnt recognize its source?" width="182" height="286" /><p class="wp-caption-text">I&#39;ll take the liberties of plagarizing this as who wouldn&#39;t recognize it&#39;s source?</p></div>
<p>So I&#8217;m moving the small totally unknown and 1-2 file things that I&#8217;ve spammed Google Code with previously. Small things like js-xdb, mental-interpreter, js-tpl-engine, js-xdomain, subleq2, vxjs-ajax (a whole project for a single function? crazy stuff).</p>
<p>So i&#8217;m shrinking my google code profile to reduce my spamminess, becasue I used to feel like it would be awesome to have a project for everything I spent more than 2 minutes on doing in hopes that someone would eventually find it interesting.</p>
<p>Hopefully someone would find it interesting on github.</p>
<p>I&#8217;m also adding some lost projects, like my backups of stuff that got lost when appjet shut down, a substition code cracker a few jetpacks and still adding more.</p>
<p><a href="http://github.com/antimatter15/antimatter15/tree/master">http://github.com/antimatter15/antimatter15/tree/master</a></p>
<p>Those are all the tiny projects not big enough to deserve a actual repo or google code project page.</p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/09/migrating-small-stuff-to-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How I Would Design The Browser 2: Addons</title>
		<link>http://antimatter15.com/wp/2009/08/how-i-would-design-the-browser-2-addons/</link>
		<comments>http://antimatter15.com/wp/2009/08/how-i-would-design-the-browser-2-addons/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 20:37:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[addons]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[chrome os]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[jetpack]]></category>
		<category><![CDATA[prodigy]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=769</guid>
		<description><![CDATA[So I was watching Aza Raskin&#8217;s TechTalk on Jetpack, and I was thinking on how I would design an extension system. I would have to say to not have one, it&#8217;s just too complex, and why restrict the sound recording functionality to a taskbar. Even worse, why fragment the API and require someone to use [...]]]></description>
			<content:encoded><![CDATA[<p>So I was watching Aza Raskin&#8217;s TechTalk on <a href="http://www.youtube.com/watch?v=Wp5Crg_KI10&amp;feature=sdig&amp;et=1250769392.47">Jetpack</a>, and I was thinking on how I would design an extension system. I would have to say to not have one, it&#8217;s just too complex, and why restrict the sound recording functionality to a taskbar. Even worse, why fragment the API and require someone to use Flash or &lt;audio&gt; in the page space and have a nice jetpack.future.import(&#8220;audio&#8221;) for a taskbar?</p>
<p>I think a good idea would to expose the power to web pages. The page could request special capabilities through a magical button dropdown or bouncy annoying notifier on a corner of the page saying permissions, populated by checkboxes of whatever features that the page wants to be able to use.</p>
<p>I think bookmarklets are almost perfect. Adding some more greasemonkey-like features would make it just about perfect. Scripts can run with the same permissions as the page, and the page&#8217;s permissions can be granted easily by the user (and the permissions persist through refreshes and browser restarts). Again, if functionality is not supported, things can gracefully degrade with partial functionality.</p>
<p>After that, is the idea of background tabs or alternatively, merging the statusbar type widgets into the tab bar. This is logical with everything merged into the page, and allows things to gracefully degrade if they don&#8217;t support the feature. You also get the benefits of being able to reorder remove, get info (which would be the contents of an extension page), etc. I think the interface for a plugin that operates in the background (like a gmail notifier) would be just a small tab that only has an icon, with special flag that makes it run on browser start (I think this could be one of the things for the permissions panel).</p>
<p>So one problem I see in the way Jetpack works, is that it doesn&#8217;t easily allow you to make a jetpack that hacks another running jetpack. Sure you can &#8220;fork&#8221; it, but that defeats the purpose of extensions, rather than having extensions only 1-level deep, make it work all the way down. The easy way I see is just to use the bookmarklet philosophy, and everything can mess around with anything within the page. So if you have a GMail notifier, that came out before the tab persist feature existed, you could just add a simple bookmarklet-type-greasemonkey thing that adds something to the permissions box that says &#8220;Persist Page&#8221; and then the user could check that in order to make a background GMail Notifier that runs on browser startup.</p>
<p>Malware is easy to fight now. Imagine if every application was forced to have a icon in the taskbar of windows at all times. Finding malware is as easy as looking for things you dont want running and closing it. And if some tab-bar autohide is to be implemented on the system, only people who are quite experienced would use 10+ extension/notifier pages and it would still be easier to recognize than finding some other strange wcultns.exe or whatever when half of the system things look like that.</p>
<p>With these features, Browser as an OS would really make sense. I wouldn&#8217;t be suprised if Google Chrome OS implements some stuff that are similar to what I&#8217;ve listed here.</p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/08/how-i-would-design-the-browser-2-addons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wave2: A higher level Wave Gadget State API</title>
		<link>http://antimatter15.com/wp/2009/08/wave2-a-higher-level-wave-gadget-state-api/</link>
		<comments>http://antimatter15.com/wp/2009/08/wave2-a-higher-level-wave-gadget-state-api/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 21:26:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ajax Animator]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[gadget]]></category>
		<category><![CDATA[google wave]]></category>
		<category><![CDATA[googlewave]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=759</guid>
		<description><![CDATA[I was working on a new little Wave State API update. It supports lists in the form of subkeys, and something very much like hierarchy and events on specific sub-nodes. This way you don&#8217;t have everything update (someone&#8217;s edits on frame 36 doesn&#8217;t matter if you&#8217;re on frame 42). Everything is namespaced under a singleton [...]]]></description>
			<content:encoded><![CDATA[<p>I was working on a new little Wave State API update. It supports lists in the form of subkeys, and something very much like hierarchy and events on specific sub-nodes. This way you don&#8217;t have everything update (someone&#8217;s edits on frame 36 doesn&#8217;t matter if you&#8217;re on frame 42).</p>
<p>Everything is namespaced under a singleton global, wave2. It includes functions like</p>
<ul>
<li>listen (execute a callback when something beginning with the prefix is changed)</li>
<li>ignore (un-listen),</li>
<li>keys (shortcut for wave.getState().getKeys()),</li>
<li>subkeys (get keys which begin with a certain prefix, important to the pseudo hierarchy),</li>
<li>set (submitdelta with first arg as name and second as value),</li>
<li>get (shortcut for wave.getState().get()</li>
<li>reset_gadget (a simple way to empty all the data in the store)</li>
</ul>
<p>And since it&#8217;s quite short, I&#8217;m putting it under public domain at http://antimatter15.com/misc/wave/wave2.js</p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/08/wave2-a-higher-level-wave-gadget-state-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Freemovie/JS: Pure Javascript SWF Generator</title>
		<link>http://antimatter15.com/wp/2009/08/freemoviejs/</link>
		<comments>http://antimatter15.com/wp/2009/08/freemoviejs/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 16:12:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ajax Animator]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[freemovie]]></category>
		<category><![CDATA[future]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=751</guid>
		<description><![CDATA[I&#8217;m making a crude python script that translates PHP to JS rather hideously. It probably will not work on any other codebase. It was a script quickly hacked together to one purpose. Freemovie is FreeMovie is an SWF generator library written in PHP and ported to Ruby. FreeMovie can be used to develop Web and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m making a crude python script that translates PHP to JS rather hideously. It probably will not work on any other codebase. It was a script quickly hacked together to one purpose.</p>
<p><a href="http://sourceforge.net/projects/freemovie/">Freemovie </a>is</p>
<blockquote><p>FreeMovie is an SWF generator library written in PHP and ported to Ruby. FreeMovie can be used to develop Web and desktop aplications.</p></blockquote>
<p><span style="text-decoration: line-through;">Speaking of the Ruby port, I can&#8217;t find it. So if anyone finds it, I think it might be useful somewhere.</span> Found it in the CVS, it&#8217;s really incomplete compared to the PHP version.</p>
<p>The machine translated code (Not *entirely* autogenerated, I wrote a line or two of it) is not too hideous, the tabbing is slightly off, but it&#8217;s at least mostly readable. It was a lot worse 2 hours ago (half of the lines had indentation, other without any, debugging comments everywhere saying useless and distracting things).</p>
<p>The translator is only 107 lines of (hideous code, though the language is beautiful, I guess if you loved JS enough, you could try running the program though <a href="http://www.skulpt.org/">skulpt</a>) python (+ 20 or so in another file to change chr() to String.fromCharCode, etc). After that, it uses 6 PHP compatibility functions and 5 from the PHP.js project to cover the features that I&#8217;m too lazy to  put in the compiler or are just not features in JS.</p>
<p><a href="http://antimatter15.com/misc/freemovie/js/demo/fm-demo-0.htm">http://antimatter15.com/misc/freemovie/js/demo/fm-demo-0.htm</a></p>
<p>The above demo generates a flash image entirely client-side, though the resulting base64 encoded data is sent to be decoded on the server since you can&#8217;t load a SWF from a data-url. If someone finds out how, it would be cool to tell me.</p>
<p>A big issue though, is that for some odd reason half the shapes don&#8217;t work. The ones in the demo work, but all filled shapes, and the circles/arcs do not work.</p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/08/freemoviejs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->