<?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; future</title>
	<atom:link href="http://antimatter15.com/wp/tag/future/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>The future of the Ajax Animator</title>
		<link>http://antimatter15.com/wp/2009/12/the-future-of-the-ajax-animator/</link>
		<comments>http://antimatter15.com/wp/2009/12/the-future-of-the-ajax-animator/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 21:27:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ajax Animator]]></category>
		<category><![CDATA[awesomeness]]></category>
		<category><![CDATA[future]]></category>
		<category><![CDATA[onlypaths]]></category>
		<category><![CDATA[raphael]]></category>
		<category><![CDATA[svg-edit]]></category>
		<category><![CDATA[vaporware]]></category>
		<category><![CDATA[vectoreditor]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=896</guid>
		<description><![CDATA[Eventually, what will happen is a pluggable editor system and swapping between the new Mini UI and the old standard UI. The pluggable editor system will enable switching between the existing VectorEditor and OnlyPaths editors as well as SVG-edit. Possibly, OnlyPaths will be phased out as SVG-edit supports every feature of the former as well [...]]]></description>
			<content:encoded><![CDATA[<p>Eventually, what will happen is a pluggable editor system and swapping between the new Mini UI and the old standard UI. The pluggable editor system will enable switching between the existing VectorEditor and OnlyPaths editors as well as SVG-edit. Possibly, OnlyPaths will be phased out as SVG-edit supports every feature of the former as well as many more. The priority editors with the new version will be VectorEditor (the Mini UI editor, based on Raphael so it works fine cross-browser, but is also much more limiting than the rest, including OnlyPaths which it partially replaces). SVG-edit is an awesome project which is being actively developed, and will add new features that may make the Ajax Animator viable for more than just stick figures. New features that will come from the transition could include Gradients, Curved paths, Wireframes, Zoom, Groups, Align tools, Rotation and Resizing (without bugs!), Polygon/Polyline editing, to name a small subset. It&#8217;s likely that SVG-edit will have far more features by the time it&#8217;s fully implemented. It&#8217;ll be awesome.</p>
<p>The SVG-edit UI won&#8217;t fit well with the Mini UI (which I actually like more), so the classical UI will be revived.</p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/12/the-future-of-the-ajax-animator/feed/</wfw:commentRss>
		<slash:comments>9</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>ShinyTouch/JS</title>
		<link>http://antimatter15.com/wp/2009/08/shinytouchjs/</link>
		<comments>http://antimatter15.com/wp/2009/08/shinytouchjs/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 02:17:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ShinyTouch]]></category>
		<category><![CDATA[Touchscreens]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[complicated]]></category>
		<category><![CDATA[elitist]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[future]]></category>
		<category><![CDATA[hideous]]></category>
		<category><![CDATA[html 5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[port]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[shiny]]></category>
		<category><![CDATA[ugly]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[webcam]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=799</guid>
		<description><![CDATA[Yay for yet another demo that strives to mix an mash almost everything HTML5 related! ShinyTouch in JS dumps the stuff from a &#60;video&#62; tag with ogg encoded video (well, almost all video from linux is ogg encoded so it&#8217;s just whatever format i got first from cheese). It gets dumped into &#60;canvas&#62; and getImageData [...]]]></description>
			<content:encoded><![CDATA[<p>Yay for yet another demo that strives to mix an mash almost everything HTML5 related! ShinyTouch in JS dumps the stuff from a &lt;video&gt; tag with ogg encoded video (well, almost all video from linux is ogg encoded so it&#8217;s just whatever format i got first from cheese). It gets dumped into &lt;canvas&gt; and getImageData does it&#8217;s magic.</p>
<p>Interestingly, if you don&#8217;t use the video and just do data from a raw image, you get upwards of 125fps on V8. Adding the video, it ceases to work on Chromium (maybe a linux thing? <a href="http://code.google.com/p/chromium/issues/detail?id=16225">this</a> tells me it&#8217;s just linux, but you can never be so sure).</p>
<p><em>//At this point, run away as the algorithm gets messy and hackish</em></p>
<p>So the thing just searches from right to left up to down within the quad. When it finds a column of something that fits the rgb range of the finger that is larger than a certain threshold, it checks for a reflection from the point. If it detects a reflection then yay! it throws the data at the perspective warper (based on a python one which is based on a C# one and though it would probably be easier to port from C# to JS making long chains of derivative work is fun). If there wasnt a reflection then it logs that and if that number is larger than some othe rthreshold then it kills the scanning and goes on with it&#8217;s life. The reflection algorithm just takes the point 5 pixels to the right and assumes that would be a reflection if there was one and a point 15px above and 5px to the left (nasty stuff) and takes the hue value from their RGB values. It takes the absolute value of the difference of the hue values multiplied by 100 (or 200 in the python version) and compares it with a preset configuration variable.</p>
<p>So now that that horrible algorithm which was just whatever came to my little totally untrained mind first. But it works semi-decently, at least for me. But you can hopefully see how nasty it&#8217;s inner workings are and it inspires people to clean it up. It&#8217;s quite a bit more readable than the Python version and only 200 lines of JS so it won&#8217;t be <em>too</em> hard to understand.</p>
<p>But since HTML5 has no Video capture thing for webcams, and my webcam doesn&#8217;t work with flash so I can&#8217;t use that canvas&lt;-flash webcam bridge i built, uh, almost 2 years ago. So now you just get to gaze at my finger moving for like 20 seconds!</p>
<p><a href="http://antimatter15.com/misc/shiny/shinytouch.html">http://antimatter15.com/misc/shiny/shinytouch.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/08/shinytouchjs/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! -->