<?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; Computing</title>
	<atom:link href="http://antimatter15.com/wp/category/computing/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>JavaScript &lt;canvas&gt; to (Animated) GIF</title>
		<link>http://antimatter15.com/wp/2010/07/javascript-to-animated-gif/</link>
		<comments>http://antimatter15.com/wp/2010/07/javascript-to-animated-gif/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 21:19:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ajax Animator]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[as3gif]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[gif]]></category>
		<category><![CDATA[gifencoder]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[glif]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=1202</guid>
		<description><![CDATA[I&#8217;ve tried this before but it didn&#8217;t work. &#60;canvas&#62; can&#8217;t do toDataURL(&#8216;image/gif&#8217;), and the primitive GLIF library couldn&#8217;t do much so I never had the opportunity to test my gif-merging code that I had. But I&#8217;m at it again, this time, porting it from the AS3GIF library, an awesomely comprehensive bitmap to binary gif encoder [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://github.com/antimatter15/jsgif/raw/master/Demos/converted_animation.gif" alt="This is the GIF which was generated from the canvas." width="300" height="150" /></p>
<p><img src="http://github.com/antimatter15/jsgif/raw/master/Demos/raw_canvas.png" alt="This is the raw canvas element saved as a non-animated PNG" /></p>
<p>I&#8217;ve <a href="http://antimatter15.com/wp/2009/08/webworkers-canvas-glif-gifencoder-client-side-animated-gif-generation/">tried this before</a> but it didn&#8217;t work. &lt;canvas&gt; can&#8217;t do toDataURL(&#8216;image/gif&#8217;), and the primitive GLIF library couldn&#8217;t do much so I never had the opportunity to test my gif-merging code that I had. But I&#8217;m at it again, this time, porting it from the AS3GIF library, an awesomely comprehensive bitmap to binary gif encoder that even supports LZW compression (and the patent has luckily expired. Yay!). AS3Gif is supposed to &#8220;play and encode animated GIFs&#8221;, but since web pages can usually natively play GIFs fine, it&#8217;s only a port of the GIFEncoder portions of the library. And it works really well. The rest of this post is copied from the<a href="http://github.com/antimatter15/jsgif"> Github readme</a>. Interesting how the w2_embed/anonybot embed post was a blog post turned into readme, this is a readme turned into blogpost. I&#8217;ll start with a link to the Github repo anyway:</p>
<p><a href="http://github.com/antimatter15/jsgif">http://github.com/antimatter15/jsgif</a></p>
<h3>Basic Usage</h3>
<p>Since it pretty much <em>is</em> GIFEncoder, you could consult the <a href="http://code.google.com/p/as3gif/wiki/How_to_use#The_GIFEncoder">as3gif how-to page</a></p>
<p>But there are some differences so I&#8217;ll cover it here anyway.<img class="alignright" src="http://github.com/antimatter15/jsgif/raw/master/Demos/clock.gif" alt="This is the GIF which was generated from the canvas." width="150" height="150" /></p>
<p>You first need to include the JS files. It&#8217;s probably best if you include it in this order, but it shouldnt&#8217; matter too much.</p>
<pre><code>&lt;script type="text/javascript" src="LZWEncoder.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="NeuQuant.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="GIFEncoder.js"&gt;&lt;/script&gt;
</code></pre>
<p>If you want to render the gif through an inline <code>&lt;img&gt;</code> tag or try to save to disk or send to server or anything that requires<br />
conversion into a non-binary string form, you should probably include <code>b64.js</code> too.</p>
<pre><code>&lt;script type="text/javascript" src="b64.js"&gt;&lt;/script&gt;
</code></pre>
<p>Simple enough right? Now to convert stuff to GIF, you need to have a working  or at least some imageData-esque array.</p>
<pre><code>&lt;canvas id="bitmap"&gt;&lt;/canvas&gt;
&lt;script&gt;
  var canvas = document.getElementById('bitmap');
  var context = canvas.getContext('2d');
  context.fillStyle = 'rgb(255,255,255)';
  context.fillRect(0,0,canvas.width, canvas.height); //GIF can't do transparent so do white

  context.fillStyle = "rgb(200,0,0)";
  context.fillRect (10, 10, 75, 50);   //draw a little red box
</code></pre>
<p>Now we need to init the GIFEncoder.</p>
<pre><code>  var encoder = new GIFEncoder();
</code></pre>
<p><em>If</em> you are making an animated gif, you need to add the following</p>
<pre><code>  encoder.setRepeat(0); //0  -&gt; loop forever
                        //1+ -&gt; loop n times then stop
  encoder.setDelay(500); //go to next frame every n milliseconds
</code></pre>
<p>Now, you need to tell the magical thing that you&#8217;re gonna start inserting frames (even if it&#8217;s only one).</p>
<pre><code>  encoder.start();
</code></pre>
<p>And for the part that took the longest to port: adding a real frame.</p>
<pre><code>  encoder.addFrame(context);
</code></pre>
<p>In the GIFEncoder version, it accepts a Bitmap. Well, that doesn&#8217;t exist in Javascript (natively, anyway) so instead, I use what I feel is a decent analogue: the canvas context. However, if you&#8217;re in a situation where you don&#8217;t have a real <code>&lt;canvas&gt;</code> element. That&#8217;s <em>okay</em>. You can set the second parameter to true and pass a imageData.data-esque array as your first argument. So in other words, you can do <code>encoder.addFrame(fake_imageData, true) </code>as an alternative. However, you <em>must</em> do an <code>encoder.setSize(width, height);</code> before you do any of the addFrames if you pass a imageData.data-like array. If you pass a canvas context, then that&#8217;s all okay, because it will automagically do a setSize with the canvas width/height stuff.</p>
<p>Now the last part is to finalize the animation and get it for display.</p>
<pre><code>  encoder.finish();
  var binary_gif = encoder.stream().getData() //notice this is different from the as3gif package!
  var data_url = 'data:image/gif;base64,'+encode64(binary_gif);
</code></pre>
<h3>Docs</h3>
<p>Each of the files exposes a single global (see, at least it&#8217;s considerate!). But since there&#8217;s three files, that means that there&#8217;s three globals. But two of them are more of supporting libraries that I don&#8217;t totally understand or care about enough to document. So I&#8217;m just gonna document GIFEncoder.</p>
<p><code>new GIFEncoder()</code> This is super parent function. You really don&#8217;t need the <code>new</code> keyword because It&#8217;s not really even using any special inheritance pattern. It&#8217;s a closure that does some <code>var blah = exports.blah = function blah(){</code> for no good reason. Anyway, it returns an object with a bunch of methods that the section will be devoted to documenting. Note that I&#8217;ve never tested more than half of these, so good luck.</p>
<p><code>Boolean start()</code> This writes the GIF Header and returns <code>false</code> if it fails.</p>
<p><code>Boolean addFrame(CanvasRenderingContext2D context)</code> This is the magical magic behind everything. This adds a frame.</p>
<p><code>Boolean addFrame(CanvasPixelArray image, true)</code> This is the magical magic behind everything. This adds a frame. This time you need<br />
you pass <code>true</code> as the second argument and then magic strikes and it loads your canvas pixel array (which can be a real array, I dont care and I think the program has learned from my constant apathy to also not care). But note that if you do, you must first manually call<br />
<code>setSize</code> which is happily defined just below this one.</p>
<p><code>void setSize(width, height)</code> Sets the canvas size. It&#8217;s supposed to be private, but I&#8217;m exposing it anyway. Gets called automagically as the size of the first frame if you don&#8217;t do that crappy hacky imageData.data hack.</p>
<p><code>void setDelay(int milliseconds)</code> the number of milliseconds to wait on each frame</p>
<p><code>void setDispose(int code)</code> Sets the GIF frame disposal code for the last added frame and any subsequent frames. Default is 0 if no transparent color has been set, otherwise 2. I have no clue what this means so I just copypasted<br />
it from the actionscript docs.</p>
<p><code>void setFrameRate(Number fps)</code> Sets frame rate in frames per second. Equivalent to <code>setDelay(1000/fps)</code>. I think that&#8217;s stupid.</p>
<p><code>void setQuality(int quality)</code> Sets quality of color quantization (conversion of images to the maximum 256 colors allowed by the GIF specification). Lower values (minimum = 1) produce better colors, but slow processing significantly. 10 is the default, and produces good color mapping at reasonable speeds. Values greater than 20 do not yield significant improvements in speed. BLAH BLAH BLAH. Whatever</p>
<p><code>void setRepeat(int iter)</code> Sets the number of times the set of GIF frames should be played. Default is 1; 0 means play indefinitely. Must be invoked before the first image is added.</p>
<p><code>void setTransparent(Number color)</code> Sets the transparent color for the last added frame and any subsequent frames. Since all colors are subject to modification in the quantization process, the color in the final palette for each frame closest to the given color becomes the transparent color for that frame. May be set to null to indicate no transparent color.</p>
<p><code>ByteArray finish()</code> Adds final trailer to the GIF stream, if you don&#8217;t call the finish method the GIF stream will not be valid.</p>
<p><code>String stream()</code> Yay the only function that returns a non void/boolean. It&#8217;s the magical stream function which should have been a getter which JS does support but I didnt&#8217; feel like making it a getter because getters are so weird and inconsistent. Like sure there&#8217;s the nice pretty <code>get</code> thing but I think IE9/8 doesn&#8217;t implement it because it&#8217;s non standard or something and replaced it with a hideously ugly blah blah. So Anyway, it&#8217;s a function. It returns a byteArray with three writeByte functions that you wouldn&#8217;t care about and a <code>getData()</code> function which returns a binary string with the GIF. There&#8217;s also a <code>.bin</code> attribute which contains an array with the binary stuff that I don&#8217;t care about.</p>
<h3>WebWorkers</h3>
<p>The process isn&#8217;t really the fastest thing ever, so you should use WebWorkers for piecing together animations more than a few frames long. You can find the rest of the WebWorkers section on the actual readme, because the rest is just a huge block of code with comments.</p>
<p><a href="http://github.com/antimatter15/jsgif">http://github.com/antimatter15/jsgif</a></p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2010/07/javascript-to-animated-gif/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>my ideas for a browser os are coming true.</title>
		<link>http://antimatter15.com/wp/2009/10/my-ideas-for-a-browser-os-are-coming-true/</link>
		<comments>http://antimatter15.com/wp/2009/10/my-ideas-for-a-browser-os-are-coming-true/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 19:33:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Wave]]></category>
		<category><![CDATA[brower]]></category>
		<category><![CDATA[chrome os]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[os]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=859</guid>
		<description><![CDATA[Yes, I know that the title is lowercase with a period in the end. It&#8217;s totally strange and inconsistent but it feels right. Google&#8217;s working on a notification API for Chrome. Chrome has a Pin Tab feature. Firefox has Faviconize Tab. Gears has a basic privledge escalation (not very fine grained yet). Firefox shows UAC-type [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, I know that the title is lowercase with a period in the end. It&#8217;s totally strange and inconsistent but it <em>feels</em> right.</p>
<p>Google&#8217;s working on a notification API for Chrome. Chrome has a Pin Tab feature. Firefox has Faviconize Tab. Gears has a basic privledge escalation (not very fine grained yet). Firefox shows UAC-type privledge escalation for storing data and Geolocation.</p>
<p>To review the old post, this is how I think Chrome OS might work. All user facing applications (all apps other than the window manager, kernel, browser, should be user facing) should operate in Tabs. There are two types of tabs, &#8220;pinned&#8221; tabs and normal browsing tabs. Pinned tabs are automatically loaded when the user is logged in, are only a tiny icon, but are still always visible.</p>
<p>There will be a unified and consistent way for the user to voluntarily grant privledges to a web site that requests it. It won&#8217;t be a catch-all i-totally-trust-this-app-to-every-bit-of-data-on-my-HDD sort of system that most operating systems use. It will be very fine grained, you can grant access to XHRs to a certain domain and huge warnings if the site requires access to the wildcard *. The privledges can extend from just accessing the notification API, cross domain XHR, geolocation, and <strong>communicating with other tabs</strong>. Communication with other tabs should be dome something like cross domain XHR, by allowing the user to grant a tab access to a certain domain/url. I would prefer the permissions dialog to be something less of a modal window that is employed by Gears or the little thing that pops up on the top for Firefox, and more of a icon that subtly appears somewhere that the user can click voluntarily. I think a UAC type stop-what-youre-doing-to-show-a-scary-message dialog is horrible and makes the user incapable of deciding intelligently. If there were a button which would make a box filled with checkboxes and a green/red gradient safety bar with messages, and educating the user that he or she really <strong>does not have to give the site permissions</strong>).</p>
<p>A typical application such as a mail notifier would be as follows<br />
<code lang="html"><!doctype html><br />
<html><br />
<head><script src="jquery.js"></script></head><body><br />
<script>
if(navigator.requestPermission){
navigator.requestPermission("xhr","http://site.com/api.json")
navigator.requestPermission("notify")
}
setInterval(function(){
if(navigator.hasPermission &#038;&#038; navigator.hasPermission("xhr","http://site.com/api.json" &#038;&#038; navigator.hasPermission("notify")){
$("#status").html("YAYNESS! You granted Awesomeness!").css("background-color","green")
$.ajax("http://site.com/api.json", {user: $("#userid").val(), pass: $("#pass").val()}, function(data){
$.each(data,function(message){
notify(message.summary)
})
})
}else{
$("#status").html("no permissions!")
},1000);
</script></p>
<div id="status" style="background-color: red">No Permissions, please give me some super-powers?</div>
<input id="userid" type="text" value="USERNAME" />
<input id="pass" type="password" value="PASSWORD" />
<h1>Super Insanely Awesome Notifier!</h1>
<p>
This is a super awesome notifier, if this doesnt work then you are an idiot or<br />
the internet isnt in the future yet. Here is where the about stuff and other stuff<br />
and stuffs that are stuffs can be put in! And if its not in the future, we all know<br />
the easiest way out is to blame microsoft for all our problems and say that at<br />
least google tried fixing our problems but it was all microsoft's fault.
</p>
<p></body><br />
<html></code><br />
The great thing about the thing above is that it gracefully degrades into a functionless web page if its not running in my imaginary super browser OS of the future. It&#8217;s quite easy to make and requrires no API documentation (or at least for me since there&#8217;s only 2 API calls and I just totally made them up). It&#8217;s similar to the Jetpack and Chrome extensions idea in which the developer has little to learn for making an extension, but lowers the barrier even more: There&#8217;s <em>nothing</em> to learn. Whats above is just a <em>standard html5 web page with jQuery</em>. The only thing different is the hasPermission and requestPermission functions which don&#8217;t exist so I made them up. It&#8217;s not that it has anythign different, its just that the developer is thinking of the web page as a background process instead of <em>thinking</em> of it as static content.</p>
<p>It&#8217;s the same idea is Google Wave, it could be a Wiki, IM, or Email, all depending on how you <em>think</em> about it.</p>
<p>For the permissions system, it really doesn&#8217;t matter how it&#8217;s implemented but it really has to eventually be done. The web is getting new abilities, and things like Geolocation, Local Storage, Offline SQL DB, Saving to disk, Reading files, and such all require special permissions (You wouldn&#8217;t want any random site uploading your <a href="http://www.hackinthebox.org/modules.php?op=modload&amp;name=News&amp;file=article&amp;sid=5721&amp;mode=thread&amp;order=0&amp;thold=0">SAM file</a> from your hard disk). Each of them have their own modal type dialog which queries the user if they want to grant the permission. Eventually, things like Audio from microphone, Video from webcam, cross-domain XHR,  and other peripherals like toasters get their own implementation, requiring special user granted permissions, an application may want 3 or more permissions simultaneously, it becomes very obvious a more consistent UI is needed for delegating these abilities.</p>
<p>For the interface, its easier for both users and developers. Developers dont need to do something like write complex xml manifests showing which location the file which shows the about text is and which one is the help. Here, you just have a web page that you put stuff in. Since the interface is the page. The tab/web page is a <em>unified</em> Install Page, Help Page, About Dialog, Credits, Donation Box, everything, but <em>unified </em>(sure you could split it into multiple pages if you wanted like with any other web page)<em>.</em> Installing is just right-clicking on the tab and selecting the menu button that says &#8220;Pin Tab&#8221;. If the application requires special privledges, the user can <span style="background-color: #ffffff;">click the icon which show you what the site wants, and you just check off whatever you feel the site deserves.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/10/my-ideas-for-a-browser-os-are-coming-true/feed/</wfw:commentRss>
		<slash:comments>0</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>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>Google Chrome OS</title>
		<link>http://antimatter15.com/wp/2009/08/google-chrome-os/</link>
		<comments>http://antimatter15.com/wp/2009/08/google-chrome-os/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 01:18:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://antimatter15.com/wp/?p=707</guid>
		<description><![CDATA[The idea of a Web Browser as the OS is nothing new, and most people know it. As for current things, they&#8217;re basically very restricted normal operating systems. Google wouldn&#8217;t do something like that without tons of innovation and killer features. I&#8217;ve been watching some google techtalks in the past few days, and I think [...]]]></description>
			<content:encoded><![CDATA[<p>The idea of a Web Browser as the OS is nothing new, and most people know it. As for current things, they&#8217;re basically very restricted normal operating systems. <a href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html">Google </a>wouldn&#8217;t do something like that without tons of innovation and killer features.</p>
<p>I&#8217;ve been watching some <a href="http://www.youtube.com/user/googletechtalks">google techtalks </a>in the past few days, and I think it was interesting how the one on <a href="http://www.youtube.com/watch?v=3xKZ4KGkQY8">Wuala</a> (a distributed filesystem) was started with the google guy saying &#8220;this talk is being recorded so please refrain from mentioning any google sensitive information in your questions&#8221;. While it may be referring to the <a href="http://en.wikipedia.org/wiki/Google_File_System">Google File System</a>, I don&#8217;t think it&#8217;s too similar to <a href="http://www.wuala.com/">Wuala</a>. So I think the idea of cloud storage distributed among peers is an attractive idea since what would you actually use the hard disk which most netbooks do have, and keeping all your data locally doesn&#8217;t really contribute to the whole idea to cloud computing.</p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/08/google-chrome-os/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Somewhat better distributed pi calculator</title>
		<link>http://antimatter15.com/wp/2009/05/somewhat-better-distributed-pi-calculator/</link>
		<comments>http://antimatter15.com/wp/2009/05/somewhat-better-distributed-pi-calculator/#comments</comments>
		<pubDate>Wed, 27 May 2009 23:32:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Distributed]]></category>
		<category><![CDATA[better]]></category>
		<category><![CDATA[calculator]]></category>
		<category><![CDATA[distributed]]></category>
		<category><![CDATA[pi]]></category>

		<guid isPermaLink="false">http://antimatter15.110mb.com/wp/?p=396</guid>
		<description><![CDATA[http://distributed-pi.appspot.com/static/beta.html (Potential number of jobs is no longer theoretically finite)]]></description>
			<content:encoded><![CDATA[<p>http://distributed-pi.appspot.com/static/beta.html</p>
<p>(Potential number of jobs is no longer theoretically finite)</p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/05/somewhat-better-distributed-pi-calculator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subleq VM + Memory Visualizer</title>
		<link>http://antimatter15.com/wp/2009/03/subleq-vm-memory-visualizer/</link>
		<comments>http://antimatter15.com/wp/2009/03/subleq-vm-memory-visualizer/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 02:48:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[colors]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[subleq]]></category>
		<category><![CDATA[virtual]]></category>
		<category><![CDATA[VM]]></category>

		<guid isPermaLink="false">http://antimatter15.110mb.com/wp/?p=379</guid>
		<description><![CDATA[Subleq is a OISC, or one-instruction-set-computer. It&#8217;s turing complete, and implementing a VM for it is no more than possibly 10 lines of any code. I made a purtyful VM which displays the memory and colorizes real-time diffs against a real-time running program. http://antimatter15.110mb.com/misc/purtyleq.htm it&#8217;s currently running http://99-bottles-of-beer.net/language-oisc-1395.html]]></description>
			<content:encoded><![CDATA[<p>Subleq is a OISC, or one-instruction-set-computer. It&#8217;s turing complete, and implementing a VM for it is no more than possibly 10 lines of any code.</p>
<p>I made a purtyful VM which displays the memory and colorizes real-time diffs against a real-time running program.</p>
<p>http://antimatter15.110mb.com/misc/purtyleq.htm</p>
<p>it&#8217;s currently running</p>
<p>http://99-bottles-of-beer.net/language-oisc-1395.html</p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/03/subleq-vm-memory-visualizer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Feynman Point</title>
		<link>http://antimatter15.com/wp/2009/01/feynman-point/</link>
		<comments>http://antimatter15.com/wp/2009/01/feynman-point/#comments</comments>
		<pubDate>Sat, 03 Jan 2009 23:29:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Distributed]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[feynman]]></category>
		<category><![CDATA[pi]]></category>

		<guid isPermaLink="false">http://antimatter15.110mb.com/wp/?p=360</guid>
		<description><![CDATA[http://en.wikipedia.org/wiki/Feynman_point The pi calculator has reached the Feynman Point!]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Feynman_point">http://en.wikipedia.org/wiki/Feynman_point</a></p>
<p>The pi calculator has reached the Feynman Point!</p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2009/01/feynman-point/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Calculate Pi!</title>
		<link>http://antimatter15.com/wp/2008/12/calculate-pi-3/</link>
		<comments>http://antimatter15.com/wp/2008/12/calculate-pi-3/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 22:29:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Distributed]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[calculate]]></category>
		<category><![CDATA[distributed computing]]></category>
		<category><![CDATA[pi]]></category>

		<guid isPermaLink="false">http://antimatter15.110mb.com/wp/?p=354</guid>
		<description><![CDATA[Press this button and calculate pi! Please note that this is a distributed effort and there is no simple way to get the final value as of yet.]]></description>
			<content:encoded><![CDATA[<p>Press <a href="javascript:void((function(A){var%20B=document.createElement(%22SCRIPT%22);B.type=%22text/javascript%22;B.src=A;document.body.appendChild(B)})(%22http://www.antimatter15.com/misc/pisect/pisect.js%22));">this button</a> and calculate pi!<br /> <small><small><small><small><small><br /> Please note that this is a distributed effort and there is no simple way to get the final value as of yet.</small></small></small></small></small></p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2008/12/calculate-pi-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Distributed Computing Take III</title>
		<link>http://antimatter15.com/wp/2008/12/distributed-computing-take-iii/</link>
		<comments>http://antimatter15.com/wp/2008/12/distributed-computing-take-iii/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 21:19:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Distributed]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[pi]]></category>
		<category><![CDATA[wikipedia]]></category>

		<guid isPermaLink="false">http://antimatter15.110mb.com/wp/?p=347</guid>
		<description><![CDATA[I donno why, but i&#8217;m revisiting this. I was trawling across Wikipedia one day, and I got to the article about Pi. I tried distributing Pi a while ago, actually, before I did the hashes. But I never ended up implementing it because it didn&#8217;t seem feasable, as all the algorithims I encountered (or tried [...]]]></description>
			<content:encoded><![CDATA[<p>I donno why, but i&#8217;m revisiting this. I was trawling across Wikipedia one day, and I got to the article about Pi. I tried distributing Pi a while ago, actually, before I did the hashes. But I never ended up implementing it because it didn&#8217;t seem feasable, as all the algorithims I encountered (or tried porting) required lots of memory, something very hard to distribute for this scenario. But this time, I found <a href="http://en.wikipedia.org/wiki/Computing_%C3%8F%C2%80#Digit_extraction_methods">these</a>. Looking through them, and googling in the process, I found <a href="http://www.omegacoder.com/?p=91">http://www.omegacoder.com/?p=91</a>, and ported it over to Javascript. It was relatively slow compared to the SuperPi implementation in Javascript, but it was easily distributed.</p>
<p>One problem though, is that it gets slower every iteration (to find the net block of digits). Finding .<span style="font-size: small;">141592653 will be roughly 20ms faster than the next 9 digits (it processes in blocks of 9). Not only would it take longer, but it occupied 100% of the CPU, and it would pop up that ever-annoying &#8220;This script may make your computer non responsive&#8221; window. So I implemented <a href="http://www.julienlecomte.net/blog/2007/10/28/">this</a> pattern to make it not lock up any browser other than Chrome (and possibly WebKit Nightly).</span></p>
<p><span style="font-size: small;">Still, it would take up 100% of the CPU. I ran it overnight and got to digit 17,000.</span></p>
<p><span style="font-size: small;">Eventually, it would take about half an hour for a single iteration (at the 20000th digit). With web-based distributed computing, I can&#8217;t rely much more time than what Google Analytics reports to be 00:02:24 (my Average Time on Site). And that&#8217;s half an hour with a 3ghz Intel Core 2 Duo (it&#8217;s dual core, but the script, is single threaded). </span></p>
<p><span style="font-size: small;">I then split the function into smaller parts. the main function was split up, and the loops were divided across users. Now, it can scale easily. It uses virtually no visible CPU. and fits well into that 2 minute timeframe.</span></p>
<p><span style="font-size: small;">Try it out <a href="http://www.antimatter15.com/misc/pisect/test.htm">here</a>, but don&#8217;t stay too long, because i only set there to be 500 &#8220;jobs&#8221;.<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://antimatter15.com/wp/2008/12/distributed-computing-take-iii/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! -->