<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2585419071803343195</id><updated>2012-02-16T11:37:27.669+01:00</updated><category term='linux'/><category term='distributed'/><category term='jQuery'/><category term='javascript'/><category term='DSCM'/><category term='XMPP'/><category term='input'/><category term='etc'/><category term='Vertebra'/><category term='binary'/><category term='firefox'/><category term='hint'/><category term='ImageScience'/><category term='Git'/><category term='build'/><category term='Ruby'/><category term='RC1'/><category term='performance'/><category term='image_science'/><category term='beta 5'/><category term='ubuntu'/><category term='release'/><category term='SVN'/><category term='error'/><category term='reverse'/><category term='RubyInline'/><category term='Erlang'/><title type='text'>Detached being</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://keymone.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://keymone.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>keymone</name><uri>http://www.blogger.com/profile/13514879211757869019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2585419071803343195.post-4974662046884699936</id><published>2011-06-09T19:24:00.003+02:00</published><updated>2011-06-09T19:57:38.623+02:00</updated><title type='text'>Rails, Sessions, Memcached and Uptime</title><content type='html'>Imagine you have a big Rails app. Like really big. With data center load balancer forwarding requests to your boxes. Then on each box you have a load balancer forwarding requests to your rails dispatchers. That's big enough.&lt;br /&gt;&lt;br /&gt;Usual approach to keep things running and what's more important - to get notified when things break is to have a load balancer sending a request to something like /uptime/check.&lt;br /&gt;&lt;br /&gt;Awesome thing about rails projects is that usually uptime controller looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class UptimeController &lt; ApplicationController&lt;br /&gt;  def check&lt;br /&gt;    render :text =&gt; 'up!', :layout =&gt; false&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Simple enough huh? Well not really because awesome thing about big projects is that your application controller looks a bit like that:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class ApplicationController &lt; ActionController::Base&lt;br /&gt;  before_filter :filter_1, :filter_2, ..., :filter_1000&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And with 99% certainty i can say that one of filters is doing the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def login_from_session&lt;br /&gt;  @current_user = User.find_by_id(session[:user_id])&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So essentially every request from your load balancer will generate a memcache miss and then memcache write and one session that is never used again. Do we need it? No. Solution? skip_before_filter. Solved? No!&lt;br /&gt;&lt;br /&gt;Easier solution will be to extend your UptimeController not from ApplicationController but from ActionController::Base. Who said you can't do it? You can. It's better because you never know when will somebody create another before filter that will try to access session and mess up everything again. What are the benefits? Less code, more maintainable code, better performing code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2585419071803343195-4974662046884699936?l=keymone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://keymone.blogspot.com/feeds/4974662046884699936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2585419071803343195&amp;postID=4974662046884699936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/4974662046884699936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/4974662046884699936'/><link rel='alternate' type='text/html' href='http://keymone.blogspot.com/2011/06/rails-sessions-memcached-and-uptime.html' title='Rails, Sessions, Memcached and Uptime'/><author><name>keymone</name><uri>http://www.blogger.com/profile/13514879211757869019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2585419071803343195.post-8983134058519772323</id><published>2008-12-06T14:53:00.004+01:00</published><updated>2008-12-06T14:57:05.556+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='etc'/><title type='text'>/etc/.git</title><content type='html'>I just had that great idea to put my /etc folder into git repository and it looks like some other great guys also had this great idea.&lt;br /&gt;&lt;br /&gt;All credits to &lt;a href="http://topperh.blogspot.com/2008/07/etc-revision-control-with-git.html"&gt;TopperH&lt;/a&gt; - his post saved me a lot of bashing :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2585419071803343195-8983134058519772323?l=keymone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://keymone.blogspot.com/feeds/8983134058519772323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2585419071803343195&amp;postID=8983134058519772323' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/8983134058519772323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/8983134058519772323'/><link rel='alternate' type='text/html' href='http://keymone.blogspot.com/2008/12/etcgit.html' title='/etc/.git'/><author><name>keymone</name><uri>http://www.blogger.com/profile/13514879211757869019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2585419071803343195.post-3199423945363294470</id><published>2008-11-23T12:52:00.003+01:00</published><updated>2008-11-23T13:08:55.008+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reverse'/><category scheme='http://www.blogger.com/atom/ns#' term='binary'/><category scheme='http://www.blogger.com/atom/ns#' term='Erlang'/><title type='text'>Reversing binary in Erlang</title><content type='html'>It's weird but erlang does not have any BIF for reversing binary so i tried to write the function and there were two options:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;list_to_binary(lists:reverse(binary_to_list(B)))&lt;/li&gt;&lt;br /&gt;&lt;li&gt;writing own loop for reversing&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;loop function worked better than list_to_binary but then i thought what would be faster: looping binary by one byte(:8) nor looping it by word(:16)? well word was faster. then obviously i decided to check it with size :32, :64 and :128. In the end fastest solution was like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;reverse(B) -&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;S = size(B)*8,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&amp;lt;i:s/integer-big&amp;gt;&amp;gt; = B,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&amp;lt;i:s/integer-little&amp;gt;&amp;gt;.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But when binary is bigger than bigint can handle(around 2MB) function becomes much more trickier.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2585419071803343195-3199423945363294470?l=keymone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://keymone.blogspot.com/feeds/3199423945363294470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2585419071803343195&amp;postID=3199423945363294470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/3199423945363294470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/3199423945363294470'/><link rel='alternate' type='text/html' href='http://keymone.blogspot.com/2008/11/reversing-binary-in-erlang.html' title='Reversing binary in Erlang'/><author><name>keymone</name><uri>http://www.blogger.com/profile/13514879211757869019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2585419071803343195.post-6398187830921129790</id><published>2008-08-26T13:43:00.002+02:00</published><updated>2008-08-26T14:04:59.527+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='Erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Build Erlang on Ubuntu</title><content type='html'>Long story short.&lt;br /&gt;&lt;br /&gt;I cloned git repo of erlang-otp here: http://github.com/mfoemmel/erlang-otp and tried to ./configure &amp;&amp; make &amp;&amp; sudo make install but instead of fancy new erlang i got error ~ "can't write file" somewhere in hipe folder.&lt;br /&gt;&lt;br /&gt;to build succesfully i had to&lt;br /&gt;&lt;br /&gt;  mm@mm-desktop:~/dev/git/erlang-otp/lib/hipe$ mkdir ebin&lt;br /&gt;  mm@mm-desktop:~/dev/git/erlang-otp/lib/common_test/priv$ mkdir lib&lt;br /&gt;&lt;br /&gt;happy compiling&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2585419071803343195-6398187830921129790?l=keymone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://keymone.blogspot.com/feeds/6398187830921129790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2585419071803343195&amp;postID=6398187830921129790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/6398187830921129790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/6398187830921129790'/><link rel='alternate' type='text/html' href='http://keymone.blogspot.com/2008/08/build-erlang-on-ubuntu.html' title='Build Erlang on Ubuntu'/><author><name>keymone</name><uri>http://www.blogger.com/profile/13514879211757869019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2585419071803343195.post-5044988804422057936</id><published>2008-06-03T08:19:00.000+02:00</published><updated>2008-06-03T08:22:45.736+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vertebra'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='XMPP'/><title type='text'>Talk to the clouds</title><content type='html'>Instant messaging with friends is past. Future is instant messaging with computers.&lt;br /&gt;&lt;br /&gt;Take a look at theese slides introduced by &lt;a href="http://brainspl.at/articles/2008/06/02/introducing-vertebra"&gt;Ezra&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px;text-align:left" id="__ss_441320"&gt;&lt;object style="margin:0px" height="355" width="425"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=vertebra-1212376580402998-8"/&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=vertebra-1212376580402998-8" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;&lt;a href="http://www.slideshare.net/?src=embed"&gt;&lt;img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/&gt;&lt;/a&gt; | &lt;a href="undefined" title="View this slideshow on SlideShare"&gt;View&lt;/a&gt; | &lt;a href="http://www.slideshare.net/upload"&gt;Upload your own&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://counters.gigya.com/wildfire/CIMP/bT*xJmx*PTEyMTI*NzQyNDc4NTQmcHQ9MTIxMjQ3NDI1MjAxNyZwPTEwMTkxJmQ9Jm49Jmc9Mg==.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2585419071803343195-5044988804422057936?l=keymone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://keymone.blogspot.com/feeds/5044988804422057936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2585419071803343195&amp;postID=5044988804422057936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/5044988804422057936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/5044988804422057936'/><link rel='alternate' type='text/html' href='http://keymone.blogspot.com/2008/06/talk-to-clouds.html' title='Talk to the clouds'/><author><name>keymone</name><uri>http://www.blogger.com/profile/13514879211757869019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2585419071803343195.post-4832439293551526941</id><published>2008-05-30T17:08:00.000+02:00</published><updated>2008-06-03T08:23:37.507+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='DSCM'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Why use distributed SCM?</title><content type='html'>So why would you switch from centralized SCM to distributed SCM?&lt;br /&gt;&lt;br /&gt;well here's the first argument:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Due to errors in our backup scripts, we have gone two weeks without backups of the repositories. Unfortunately, we made an error when cleaning our filesystems. As a result, some repositories have been deleted. Some of them have been recovered from our last backup, which we regret is two weeks old. If you can't access your repository, mostly likely it is lost. We sincerely apologize for any loss of data and inconvenience.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;https://opensvn.csie.org/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2585419071803343195-4832439293551526941?l=keymone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://keymone.blogspot.com/feeds/4832439293551526941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2585419071803343195&amp;postID=4832439293551526941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/4832439293551526941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/4832439293551526941'/><link rel='alternate' type='text/html' href='http://keymone.blogspot.com/2008/05/why-use-distributed-scm.html' title='Why use distributed SCM?'/><author><name>keymone</name><uri>http://www.blogger.com/profile/13514879211757869019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2585419071803343195.post-4564580645628789023</id><published>2008-04-07T08:31:00.000+02:00</published><updated>2008-05-19T08:24:16.496+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RC1'/><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='beta 5'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>Firefox 3. Significant.</title><content type='html'>So it's significant. Really.&lt;br /&gt;Javascript performance is up to 5 times faster than Firefox 2 and I don't even compare to IE crap.&lt;br /&gt;&lt;br /&gt;Here's SunSpider results&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B228,235,236,237,232%5D,%223d-morph%22:%5B204,206,202,212,206%5D,%223d-raytrace%22:%5B211,206,205,206,202%5D,%22access-binary-trees%22:%5B71,79,80,70,70%5D,%22access-fannkuch%22:%5B353,356,355,356,355%5D,%22access-nbody%22:%5B243,239,235,249,240%5D,%22access-nsieve%22:%5B94,95,94,95,97%5D,%22bitops-3bit-bits-in-byte%22:%5B106,106,106,107,109%5D,%22bitops-bits-in-byte%22:%5B138,136,136,137,135%5D,%22bitops-bitwise-and%22:%5B105,100,106,105,102%5D,%22bitops-nsieve-bits%22:%5B175,167,165,169,173%5D,%22controlflow-recursive%22:%5B64,66,63,66,63%5D,%22crypto-aes%22:%5B116,116,117,120,116%5D,%22crypto-md5%22:%5B103,103,103,103,104%5D,%22crypto-sha1%22:%5B105,108,107,104,110%5D,%22date-format-tofte%22:%5B268,269,271,272,278%5D,%22date-format-xparb%22:%5B204,203,194,199,202%5D,%22math-cordic%22:%5B268,263,268,306,297%5D,%22math-partial-sums%22:%5B208,195,224,215,206%5D,%22math-spectral-norm%22:%5B122,130,136,131,132%5D,%22regexp-dna%22:%5B297,302,294,307,302%5D,%22string-base64%22:%5B130,143,132,129,130%5D,%22string-fasta%22:%5B268,277,276,283,293%5D,%22string-tagcloud%22:%5B211,211,214,209,223%5D,%22string-unpack-code%22:%5B511,501,509,514,502%5D,%22string-validate-input%22:%5B161,166,170,167,168%5D%7D"&gt;Firefox 3 Beta 5&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B1250,1187,1187,1125,1110%5D,%223d-morph%22:%5B2047,2063,2062,1984,1984%5D,%223d-raytrace%22:%5B688,688,687,687,687%5D,%22access-binary-trees%22:%5B234,313,204,203,204%5D,%22access-fannkuch%22:%5B625,609,640,703,625%5D,%22access-nbody%22:%5B1609,1594,1594,1594,1609%5D,%22access-nsieve%22:%5B375,375,375,375,375%5D,%22bitops-3bit-bits-in-byte%22:%5B391,360,375,391,390%5D,%22bitops-bits-in-byte%22:%5B375,375,375,375,375%5D,%22bitops-bitwise-and%22:%5B4015,4078,4094,4156,4016%5D,%22bitops-nsieve-bits%22:%5B704,704,703,688,703%5D,%22controlflow-recursive%22:%5B172,141,156,141,141%5D,%22crypto-aes%22:%5B329,313,313,313,328%5D,%22crypto-md5%22:%5B515,515,516,516,516%5D,%22crypto-sha1%22:%5B578,531,532,515,531%5D,%22date-format-tofte%22:%5B1562,1500,1484,1484,1500%5D,%22date-format-xparb%22:%5B4141,4125,4125,4125,4141%5D,%22math-cordic%22:%5B1219,1171,1219,1203,1219%5D,%22math-partial-sums%22:%5B906,875,860,891,875%5D,%22math-spectral-norm%22:%5B578,562,578,578,578%5D,%22regexp-dna%22:%5B1047,1078,1062,1063,1078%5D,%22string-base64%22:%5B1110,1094,1078,1047,1047%5D,%22string-fasta%22:%5B781,796,782,781,781%5D,%22string-tagcloud%22:%5B813,782,766,797,781%5D,%22string-unpack-code%22:%5B2078,1437,1500,1453,1500%5D,%22string-validate-input%22:%5B719,703,703,703,688%5D%7D"&gt;Firefox 2.0.11&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I hope AdblockPlus guys will update their addon because I do not plan to use Firefox 2 except for testing purposes...&lt;br /&gt;&lt;br /&gt;Update: just got Firefox 3 RC1 installed and guess what? Significant again. SunSpider says it's &lt;a href="http://webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B146,147,151,151,150%5D,%223d-morph%22:%5B118,135,118,117,115%5D,%223d-raytrace%22:%5B124,132,123,126,128%5D,%22access-binary-trees%22:%5B49,49,50,50,34%5D,%22access-fannkuch%22:%5B272,286,276,279,272%5D,%22access-nbody%22:%5B149,155,149,144,157%5D,%22access-nsieve%22:%5B69,76,69,67,69%5D,%22bitops-3bit-bits-in-byte%22:%5B93,94,93,95,93%5D,%22bitops-bits-in-byte%22:%5B106,106,107,105,108%5D,%22bitops-bitwise-and%22:%5B84,84,86,84,86%5D,%22bitops-nsieve-bits%22:%5B110,107,140,111,109%5D,%22controlflow-recursive%22:%5B46,48,46,46,46%5D,%22crypto-aes%22:%5B88,87,85,84,88%5D,%22crypto-md5%22:%5B69,67,69,71,67%5D,%22crypto-sha1%22:%5B72,76,72,77,75%5D,%22date-format-tofte%22:%5B188,180,178,179,185%5D,%22date-format-xparb%22:%5B106,114,118,110,107%5D,%22math-cordic%22:%5B179,179,176,188,176%5D,%22math-partial-sums%22:%5B126,135,122,126,124%5D,%22math-spectral-norm%22:%5B77,74,76,77,73%5D,%22regexp-dna%22:%5B268,277,279,280,269%5D,%22string-base64%22:%5B96,96,95,94,98%5D,%22string-fasta%22:%5B184,186,187,188,191%5D,%22string-tagcloud%22:%5B147,148,146,143,148%5D,%22string-unpack-code%22:%5B317,322,308,307,314%5D,%22string-validate-input%22:%5B112,108,111,115,108%5D%7D"&gt;~1.5 times faster&lt;/a&gt; than beta 5, ~8 times faster than 2.0.11 and 10 times faster than IE7(anybody still uses that crap?).&lt;br /&gt;o_O&lt;br /&gt;woot.&lt;br /&gt;and Adblock plugin was ported - no way back for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2585419071803343195-4564580645628789023?l=keymone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://keymone.blogspot.com/feeds/4564580645628789023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2585419071803343195&amp;postID=4564580645628789023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/4564580645628789023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/4564580645628789023'/><link rel='alternate' type='text/html' href='http://keymone.blogspot.com/2008/04/firefox-3-significant.html' title='Firefox 3. Significant.'/><author><name>keymone</name><uri>http://www.blogger.com/profile/13514879211757869019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2585419071803343195.post-6333996630022605279</id><published>2007-08-14T08:35:00.000+02:00</published><updated>2008-02-08T07:57:21.811+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='input'/><category scheme='http://www.blogger.com/atom/ns#' term='hint'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Easy input hints</title><content type='html'>Nothing really complex, just trying not to forget how i did that:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;input note="hello world" value="" type="text"/&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and few more lines in javascript:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function updateForms() {&lt;br /&gt;  jQuery(function($) {&lt;br /&gt;    $("form").submit(function() {&lt;br /&gt;      $("input:password", this).each( function() {&lt;br /&gt;        this.value = SHA256(this.value);&lt;br /&gt;      });&lt;br /&gt;    });&lt;br /&gt;    &lt;br /&gt;    $("input:text[@note],textarea[@note]").each(function(){&lt;br /&gt;      if(!this.value &amp;&amp; $(this).attr("note")) {&lt;br /&gt;        this.value       = $(this).attr("note");&lt;br /&gt;        this.style.color = "gray";&lt;br /&gt;      }&lt;br /&gt;    })&lt;br /&gt;    .blur(function(){&lt;br /&gt;      if(!this.value &amp;&amp; $(this).attr("note")) {&lt;br /&gt;        this.value       = $(this).attr("note");&lt;br /&gt;        this.style.color = "gray";&lt;br /&gt;      }&lt;br /&gt;    })&lt;br /&gt;    .focus(function(){&lt;br /&gt;      if(this.value == $(this).attr("note") &amp;&amp; this.style.color == "gray") {&lt;br /&gt;        this.value       = "";&lt;br /&gt;        this.style.color = "black";&lt;br /&gt;      }&lt;br /&gt;    });&lt;br /&gt;    &lt;br /&gt;    $("input:password[@note]").each(function(){&lt;br /&gt;      if(!this.value &amp;&amp; $(this).attr("note")) {&lt;br /&gt;        $(this).attr("type", "text");&lt;br /&gt;        this.value       = $(this).attr("note");&lt;br /&gt;        this.style.color = "gray";&lt;br /&gt;      }&lt;br /&gt;    })&lt;br /&gt;    .blur(function(){&lt;br /&gt;      if(!this.value &amp;&amp; $(this).attr("note")) {&lt;br /&gt;        $(this).attr("type", "text");&lt;br /&gt;        this.value       = $(this).attr("note");&lt;br /&gt;        this.style.color = "gray";&lt;br /&gt;      }&lt;br /&gt;    })&lt;br /&gt;    .focus(function(){&lt;br /&gt;      if(this.value == $(this).attr("note") &amp;&amp; this.style.color == "gray") {&lt;br /&gt;        this.value       = "";&lt;br /&gt;        this.style.color = "black";&lt;br /&gt;        $(this).attr("type", "password");&lt;br /&gt;      }&lt;br /&gt;    });&lt;br /&gt;  });&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and each time you get new form with AJAX response call updateForms()&lt;br /&gt;&lt;br /&gt;Update: added password fields support, function will also affect only fields where note attribute is not empty&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2585419071803343195-6333996630022605279?l=keymone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://keymone.blogspot.com/feeds/6333996630022605279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2585419071803343195&amp;postID=6333996630022605279' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/6333996630022605279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/6333996630022605279'/><link rel='alternate' type='text/html' href='http://keymone.blogspot.com/2007/08/easy-input-hints.html' title='Easy input hints'/><author><name>keymone</name><uri>http://www.blogger.com/profile/13514879211757869019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2585419071803343195.post-1465454637861709382</id><published>2007-08-01T08:36:00.000+02:00</published><updated>2008-02-08T07:57:52.580+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RubyInline'/><category scheme='http://www.blogger.com/atom/ns#' term='ImageScience'/><category scheme='http://www.blogger.com/atom/ns#' term='image_science'/><title type='text'>ImageScience and RubyInline story</title><content type='html'>Just few tips for using installing ImageScience&lt;br /&gt;&lt;br /&gt;They say FreeImage and RubyInline is required - yes it's true. In ImageScience &lt;a href="http://www.blogger.com/docs%20http://seattlerb.rubyforge.org/ImageScience.html"&gt;docs&lt;/a&gt; you can see few-lines-install-guide for FreeImage but don't believe them because you can get huge headake. Do not use CVS! Please! There is an official &lt;a href="http://freeimage.sourceforge.net/download.html"&gt;source distribution&lt;/a&gt; and i strongly suggest you to use it. Besides that everything is correct:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;and you're done.&lt;br /&gt;&lt;br /&gt;Second issue i got is RubyInline installation. It goes great after typing&lt;br /&gt;&lt;code&gt;&lt;br /&gt;gem install image_science&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;but loading image_science just silently fails. Reason is rw-rw-rw on .ruby_inline directory in your user profile. Remove "w" from group and others - this should fix it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2585419071803343195-1465454637861709382?l=keymone.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://keymone.blogspot.com/feeds/1465454637861709382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2585419071803343195&amp;postID=1465454637861709382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/1465454637861709382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2585419071803343195/posts/default/1465454637861709382'/><link rel='alternate' type='text/html' href='http://keymone.blogspot.com/2007/07/imagescience-and-rubyinline-story.html' title='ImageScience and RubyInline story'/><author><name>keymone</name><uri>http://www.blogger.com/profile/13514879211757869019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
