tag:blogger.com,1999:blog-193028792024-03-19T16:23:30.593+05:30Random ThoughtsAnonymoushttp://www.blogger.com/profile/06072219414022235355noreply@blogger.comBlogger45125tag:blogger.com,1999:blog-19302879.post-47880896214121294722014-01-25T00:01:00.000+05:302014-01-25T00:02:17.323+05:30Deep learning libraries in python<div dir="ltr" style="text-align: left;" trbidi="on">
<h3 style="text-align: left;">
Theano</h3>
<div>
Theano is a generic mathematical expression evaluation library. The main advantage is, it compiles to either CPU or GPU. By default it uses cpu. </div>
<div>
<br /></div>
<div>
Download from <a href="http://deeplearning.net/software/theano/">http://deeplearning.net/software/theano/</a></div>
<div>
Tutorial <a href="http://deeplearning.net/software/theano/tutorial/index.html#tutorial">http://deeplearning.net/software/theano/tutorial/index.html#tutorial</a></div>
<h3 style="text-align: left;">
Pylearn2</h3>
Pylearn2 is based on theano. So you can get advantage of running on GPU.<br />
<br />
Download from <a href="https://github.com/lisa-lab/pylearn2">https://github.com/lisa-lab/pylearn2</a><br />
<br />
<b>Models</b><br />
<ul style="text-align: left;">
<li>Logistic Regression </li>
<li>K-means </li>
<li>Multilayer Perceptron (MLP)</li>
<li>Restricted Boltzmann Machines (RBM)</li>
<li>Deep Boltzmann Machines (DBM)</li>
<li>Ising </li>
<li>Auto Encoder: Autoencoders, denoising autoencoders, and stacked DAEs.</li>
<li>Maxout Networks (Maxout)</li>
</ul>
It is not limited to above models and any one can add new model. Above models are pre implemented.<br />
<div>
<h3 style="text-align: left;">
Hebel</h3>
It is also GPU accelerated deep learning library. Its based on PyCuda.<br />
<br />
<b>Models</b><br />
<ul style="text-align: left;">
<li>Logistic Regression</li>
<li>Neural network regression</li>
<li>Muti-Task neural net</li>
</ul>
Download from <a href="https://github.com/hannes-brt/hebel">https://github.com/hannes-brt/hebel</a><br />
<h3 style="text-align: left;">
Deepnet</h3>
<div>
GPU accelerated. Based on cudamat. </div>
<div>
<b><br /></b></div>
<div>
<b>Models</b></div>
<ul style="text-align: left;">
<li>Feed-forward Neural Nets</li>
<li>Restricted Boltzmann Machines</li>
<li>Deep Belief Nets</li>
<li>Autoencoders</li>
<li>Deep Boltzmann Machines</li>
<li>Convolutional Neural Nets</li>
</ul>
<div>
Download from <a href="https://github.com/nitishsrivastava/deepnet">https://github.com/nitishsrivastava/deepnet</a></div>
<h3 style="text-align: left;">
Others</h3>
</div>
<div>
Python tutorial on Restricted Bolzmann Machines - <a href="https://github.com/echen/restricted-boltzmann-machines">https://github.com/echen/restricted-boltzmann-machines</a></div>
<div>
Modular Restricted Bolzmann machine implementation. Its based on theano. <a href="https://github.com/benanne/morb">https://github.com/benanne/morb</a></div>
<div>
Matrix Library for cuda - <a href="https://github.com/deeplearningais/CUV">https://github.com/deeplearningais/CUV</a></div>
<div>
<br /></div>
</div>
<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymoushttp://www.blogger.com/profile/06072219414022235355noreply@blogger.com215tag:blogger.com,1999:blog-19302879.post-14098372163319417022014-01-17T16:08:00.001+05:302014-01-24T01:59:16.717+05:30Linear Separability<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: left;">
In geometry, a two dimensional plane is linearly separable if we can divide the plane using a line. In case of n-dimensions it is a hyperplane. In Machine learning, we use this property to classify the data. Lets first understand what do we mean by Learning here ?. </div>
<h3 style="text-align: left;">
Learning vs Memorising</h3>
<div>
Oxford dictionary defines learning as "<i>the acquisition of knowledge or skills through study, experience, or being taught</i>". Memorising is the ability to remember/call what ever we have seen before. The key difference is, if we learn correctly we can able to answer the things which we haven't seen before. While learning, we generalise the things we have seen before and apply the same to new things we haven't seen. Achieving 100% memorisation in computers is very very easy. Its matter of how fast we can go through the things we have seen and get the answer. The challenge lies in how we make computer learn. To achieve that we will not define any explicit rules for any particular problem rather we will create a model where we will give the computer ability to generalise from examples we have given. The key for learning is <i>ability to generalise</i>. </div>
<div style="text-align: left;">
<h3 style="text-align: left;">
Linear separability</h3>
</div>
<div style="text-align: left;">
Lets take following example. For now lets ignore how we will convert out problem to cartesian coordinates. </div>
<div style="text-align: left;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWngw_tVec6LTBRMM3FSnoqZx0e_mXHY5RWD9DaIniivcbj2EmatH0OD9XYjO97ynw5nKQ67yYhKwQvGVJP7eZtIJ1oIZwWh7av1dfgBvechEicJfAGk6qPSh_l8DkRm9uRJlQ/s1600/linearly_separable_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWngw_tVec6LTBRMM3FSnoqZx0e_mXHY5RWD9DaIniivcbj2EmatH0OD9XYjO97ynw5nKQ67yYhKwQvGVJP7eZtIJ1oIZwWh7av1dfgBvechEicJfAGk6qPSh_l8DkRm9uRJlQ/s320/linearly_separable_1.png" height="240" width="320" /></a></div>
The problem is if a new point comes, consider the green cross in below picture. In what category we will put it into ?. Is it belongs to blue cluster or red cluster ?.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzXpE1aJlPx2jVblMyQ5DZ6IagemIwP7U_-OFYb4AYeycApSFcqbCab-P2rVHMgaTxI11ybnuJoJrZ2bX0IlRr50zp38aztVgvGcF_4BhhUJ9UDTbGjcuxhCgpkhGdKTexLxS2/s1600/linearly_separable_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzXpE1aJlPx2jVblMyQ5DZ6IagemIwP7U_-OFYb4AYeycApSFcqbCab-P2rVHMgaTxI11ybnuJoJrZ2bX0IlRr50zp38aztVgvGcF_4BhhUJ9UDTbGjcuxhCgpkhGdKTexLxS2/s320/linearly_separable_2.png" height="240" width="320" /></a></div>
Most of us will agree that it belongs to red cluster. Because it is close to it. What we do intuitively is we draw a link between these two clusters and we will decide based on what side it is falling into.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6pbQ0CEURTy2aj3NaUuUcvUpHbCNUli3wzGfZerWSvM5HDYmjjR84tlOUM-aOcRssIzCAlm0_FR-OW4vKnwIl-fo7evMJsWpXAbqGFl4eQi8pDX70oJ5hBsleMNUZ3zyX6Vk0/s1600/linearly_separable_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6pbQ0CEURTy2aj3NaUuUcvUpHbCNUli3wzGfZerWSvM5HDYmjjR84tlOUM-aOcRssIzCAlm0_FR-OW4vKnwIl-fo7evMJsWpXAbqGFl4eQi8pDX70oJ5hBsleMNUZ3zyX6Vk0/s320/linearly_separable_3.png" height="240" width="320" /></a></div>
<br />
For two dimension it is a line and for multi-dimensions it is a hyperplane.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7RgxQr-VcyRIMn5HzujA50KCxIMc6mzIuvSpbCdTF0SekeIpXHEpeSBX3A8Wo8uXgYCdhBuPo6Gq2yfWYgH2d0YlrW69B3hNaFHoCB3XhMvYPOnty-PkYXgfey108rwa3PQav/s1600/linearly_separable_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7RgxQr-VcyRIMn5HzujA50KCxIMc6mzIuvSpbCdTF0SekeIpXHEpeSBX3A8Wo8uXgYCdhBuPo6Gq2yfWYgH2d0YlrW69B3hNaFHoCB3XhMvYPOnty-PkYXgfey108rwa3PQav/s320/linearly_separable_4.png" height="305" width="320" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
If the data can be separated using a hyperplane (straight line in case of two dimension) then we call the data linearly separable. What we defined now is a simple algorithm to classify the data into two classes. We defined a simple classifier now that can divide the data into two classes. How can we do that if we have more than one class ?.</div>
<h3 style="text-align: left;">
Multi-class classification</h3>
<div class="separator" style="clear: both; text-align: left;">
Once we have an algorithm to classify the data into two classes, we can generalise it to multiple classes. There are two approaches for doing that. </div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul style="text-align: left;">
<li>One vs Rest (one vs all): Here we will have n classifiers. Meaning we will have n hyperplanes. First we will check whether it belongs to class1. We will check this by drawing the hyperplane between class1 and rest of the classes (we will mix all other classes into one). We will repeat this for all the classes. </li>
<li>One vs One: This is more complicated but is useful for certain class of problems. Here we will have (n * (n - 1)/2) classifiers. For 4 classes we will have 6 classifiers. We will compare class1 vs class2, class1 vs class3, class1 vs class4, class2 vs class3, class2 vs class4, class4 vs class4. Whichever class comes more times we will classify it as that class. </li>
</ul>
<div>
<h3>
Revisiting Linear separability</h3>
</div>
<div>
Not all problems are linearly separable. Take following example. </div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiyichRwf865d_1bUao6I0IdRnwnSsEiFZqxB6MTKSh9ghILzg1B74qL7xTGt-qbprmHc-p_zwXeZL0lZpb8nDlVpfllLOlPAioHuF8-L29fmCzp2eEqV8JQoFcqE9PprKWCkv/s1600/not_lineararly_separable.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiyichRwf865d_1bUao6I0IdRnwnSsEiFZqxB6MTKSh9ghILzg1B74qL7xTGt-qbprmHc-p_zwXeZL0lZpb8nDlVpfllLOlPAioHuF8-L29fmCzp2eEqV8JQoFcqE9PprKWCkv/s320/not_lineararly_separable.png" height="240" width="320" /></a></div>
<div>
<br /></div>
<div>
We can't draw any line that separates these two classes. Only way is to draw an ellipse. These kind of problems are solved into two ways. As i said before, draw an ellipse instead of line. Meaning, we are using non-linear function to classify the data. </div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiDZWMK_rOmzALnbuxv0UmBFeGDpaXCJAjlBisNytQY9PIzJdcVuY-3Dq7M840KNKY2go6Da-BKMhiMVpTnp9r7z375oSCnPWgCDUTz8ZNPtzBvSXfm0Vic2_X-uyhnUJNwdZu/s1600/not_lineararly_separable_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiDZWMK_rOmzALnbuxv0UmBFeGDpaXCJAjlBisNytQY9PIzJdcVuY-3Dq7M840KNKY2go6Da-BKMhiMVpTnp9r7z375oSCnPWgCDUTz8ZNPtzBvSXfm0Vic2_X-uyhnUJNwdZu/s320/not_lineararly_separable_1.png" height="240" width="320" /></a></div>
<div>
<br /></div>
<div>
The other way (ex. kernel trick in svm) is to project the data to higher dimension and check whether it is linearly separable. If we project above data into 3rd dimension we will see it as, </div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn235evdAYpE_XTew6qcRQoo19nARzpTcakdk1jb_RqUseav9S3dqMdl5I77WYDHxt6MGBl-LhzUpZmV2cXsyoH67qC3b2L81JRJHbty0KPAU9E_yykRCOjbnYnKWnDz-4QQEp/s1600/tranformed_to_linearly_separable.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn235evdAYpE_XTew6qcRQoo19nARzpTcakdk1jb_RqUseav9S3dqMdl5I77WYDHxt6MGBl-LhzUpZmV2cXsyoH67qC3b2L81JRJHbty0KPAU9E_yykRCOjbnYnKWnDz-4QQEp/s320/tranformed_to_linearly_separable.png" height="240" width="320" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Clearly, above data is linearly separable using a hyperplane. In the next blog, we will see how we can use this for sentiment analysis. </div>
<div>
</div>
<h3 style="text-align: left;">
References</h3>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul style="text-align: left;">
<li>http://en.wikipedia.org/wiki/Linear_separability</li>
<li>SVM Example: http://stackoverflow.com/questions/9480605/what-is-the-relation-between-the-number-of-support-vectors-and-training-data-and</li>
<li>Multi-class classification: http://scikit-learn.org/stable/modules/multiclass.html</li>
<li>http://www.statsoft.com/textbook/naive-bayes-classifier/</li>
</ul>
</div>
</div>
<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Anonymoushttp://www.blogger.com/profile/06072219414022235355noreply@blogger.com2tag:blogger.com,1999:blog-19302879.post-70210440180758816032009-09-06T22:57:00.015+05:302009-09-07T08:45:27.429+05:30Hello World Arduino !<span style="font-size:100%;">I got my <a href="http://www.arduino.cc/">arduino</a> board today. If you don't know what arduino is, </span><span style="font-style: italic;font-size:100%;" >"Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. It's intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments".</span><span style="font-size:100%;"> (from http://www.arduino.cc/)</span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_udBna-s0ow8/SqR3nHYrWWI/AAAAAAAACM8/zxCapma8ltk/s1600-h/DSC02106.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="http://2.bp.blogspot.com/_udBna-s0ow8/SqR3nHYrWWI/AAAAAAAACM8/zxCapma8ltk/s400/DSC02106.JPG" alt="" id="BLOGGER_PHOTO_ID_5378555368868370786" border="0" /></a><span style="font-size:100%;">I have written sort of <a href="http://en.wikipedia.org/wiki/Hello_world_program">hello world</a> of Arduino !. Blinking LED. Follow the excellent tutorials from <a href="http://www.ladyada.net/learn/arduino/">ladyada.net</a>.</span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_udBna-s0ow8/SqR4JCu0P7I/AAAAAAAACNE/3Dg4snij4kc/s1600-h/DSC02104.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 180px;" src="http://3.bp.blogspot.com/_udBna-s0ow8/SqR4JCu0P7I/AAAAAAAACNE/3Dg4snij4kc/s320/DSC02104.JPG" alt="" id="BLOGGER_PHOTO_ID_5378555951734603698" border="0" /></a><br /><span style="font-size:130%;">Similar Boards.<br /></span><span style="font-size:100%;">At first I was confused between freeduino, sanguino, seeduino etc. These are all clones of arduino (There are many more. Checkout <a href="http://en.wikipedia.org/wiki/Arduino">wiki</a>).Although arduino hardware and software references are available opensource, the name "Arduino" should not be used in the derived works. So these boards often uses a name that ends with "duino". Often you find freeduino and sanguino. There is no difference between freeduino and arduino. Sanguino is a more powerful varient of arduino. You can find the difference between arduino, sanguino and arduino mega <a href="http://blog.makerbot.com/2009/03/27/arduino-vs-sanguino-vs-arduino-mega/">here</a>.<br /></span><br /><span style="font-size:130%;">Where to buy ?.</span><br /><br /><span style="font-size:100%;">The board I got is from <a href="http://www.makershed.com/ProductDetails.asp?ProductCode=MSAPK">makershed</a>. There are lot of starter kits available. Before buying any of these check out comparison of these boards <a href="http://aaroneiche.com/2009/07/16/arduino-starter-rundown-part-2/">here</a>.<br /><br />If you are in India then you don't have much options. Makershed is shifting the boards to India but the shipping cost is 25$. You can find freeduino and sanguino board from <a href="http://www.bhasha.co.cc/">Bhasha e-store</a>. It is Pune based company. The price of these boards is very less Rs 1000 (20$) and you can get useful components (including 16x2 lcd, breadboard and few more components) for about Rs500 (10$). This is the cheapest of all.</span><br /><br /><span style="font-size:130%;">Useful links. </span><br /><br /><span style="font-size:100%;"><a href="http://www.arduino.cc/">http://www.arduino.cc/</a><br /><a href="http://en.wikipedia.org/wiki/Arduino">http://en.wikipedia.org/wiki/Arduino</a><br /><a href="http://www.ladyada.net/learn/arduino/">http://www.ladyada.net/learn/arduino/</a><br /><a href="http://blog.makerbot.com/2009/03/27/arduino-vs-sanguino-vs-arduino-mega/">http://blog.makerbot.com/2009/03/27/arduino-vs-sanguino-vs-arduino-mega/</a><br /><a href="http://aaroneiche.com/2009/07/16/arduino-starter-rundown-part-2/">http://aaroneiche.com/2009/07/16/arduino-starter-rundown-part-2/</a><br /><a href="http://www.makershed.com/ProductDetails.asp?ProductCode=MSAPK">http://www.makershed.com/ProductDetails.asp?ProductCode=MSAPK</a><br /><a href="http://www.bhasha.co.cc/">http://www.bhasha.co.cc/</a></span><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-19302879.post-77954512445196906552009-08-08T20:42:00.029+05:302009-08-28T01:06:24.095+05:30Disassembling Inspiron LaptopOn a weekend (2 months back I guess) I didn't know what to do :) and I decided to disassemble my laptop. Here is the guide. Mine is Dell Inspiron 1420.<br /><table><tbody><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_udBna-s0ow8/Sn2acbDDYTI/AAAAAAAACLQ/JybENqABik8/s1600-h/DSC01972.JPG"><img id="BLOGGER_PHOTO_ID_5367616143983075634" style="margin: 0pt 10px 10px 0pt; float: left; width: 400px; cursor: pointer; height: 225px;" alt="" src="http://4.bp.blogspot.com/_udBna-s0ow8/Sn2acbDDYTI/AAAAAAAACLQ/JybENqABik8/s400/DSC01972.JPG" border="0" /></a><br /></td><td><span style="font-size:85%;">First remove the battery pack from the system.</span></td><br /></tr><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_udBna-s0ow8/Sn2aOMSNYHI/AAAAAAAACLI/ZxBmlytyMow/s1600-h/DSC01970.JPG"><img id="BLOGGER_PHOTO_ID_5367615899501944946" style="margin: 0pt 10px 10px 0pt; float: left; width: 400px; cursor: pointer; height: 225px;" alt="" src="http://1.bp.blogspot.com/_udBna-s0ow8/Sn2aOMSNYHI/AAAAAAAACLI/ZxBmlytyMow/s400/DSC01970.JPG" border="0" /></a><br /></td><td><span style="font-size:85%;">Before disassembling, identify the important parts of the system.</span><div><span style="font-size:85%;">1. Battery<br />2. CPU Fan</span><br /><div><span style="font-size:85%;">3. RAM</span></div><div><span style="font-size:85%;">4. Hard disk<br />The nice thing here is that if we want to upgrade one specific part, we can do it without touching other parts. For example, if we want to upgrade the hard disk we can just remove screws shown in part 4.<br /></span></div></div></td></tr><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_udBna-s0ow8/Sn2alZtpptI/AAAAAAAACLY/VA2Vx-RPMS4/s1600-h/DSC01968.JPG"><img id="BLOGGER_PHOTO_ID_5367616298243696338" style="margin: 0pt 10px 10px 0pt; float: left; width: 400px; cursor: pointer; height: 225px;" alt="" src="http://2.bp.blogspot.com/_udBna-s0ow8/Sn2alZtpptI/AAAAAAAACLY/VA2Vx-RPMS4/s400/DSC01968.JPG" border="0" /></a></td><td><span style="font-size:85%;">We have to start disassembling from front side. First time I started from backside and I couldn't continue further. As shown in figure, pull the highlighted part and you can able to remove the entire frame (including the frame that has power button).</span></td></tr><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_udBna-s0ow8/Sn2c0CBzo4I/AAAAAAAACLw/Tpi_hrAXZKk/s1600-h/DSC01962.JPG"><img id="BLOGGER_PHOTO_ID_5367618748607079298" style="margin: 0pt 10px 10px 0pt; float: left; width: 400px; cursor: pointer; height: 225px;" alt="" src="http://3.bp.blogspot.com/_udBna-s0ow8/Sn2c0CBzo4I/AAAAAAAACLw/Tpi_hrAXZKk/s400/DSC01962.JPG" border="0" /></a><br /></td><td><span style="font-size:85%;">The next step is to remove the keyboard.<br />Be careful while removing the keyboard. Back side there will be a connection to mother board.<br />After removing the screws, pull it up and remove the connection to the motherboard.<br /></span></td></tr><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_udBna-s0ow8/Sn2czvcBj8I/AAAAAAAACLo/eYAI3onpF_w/s1600-h/DSC01964.JPG"><img id="BLOGGER_PHOTO_ID_5367618743616769986" style="margin: 0pt 10px 10px 0pt; float: left; width: 400px; cursor: pointer; height: 225px;" alt="" src="http://3.bp.blogspot.com/_udBna-s0ow8/Sn2czvcBj8I/AAAAAAAACLo/eYAI3onpF_w/s400/DSC01964.JPG" border="0" /></a><br /></td><td><span style="font-size:85%;">Remove this connector and keyboard will be disconnected from the rest of the system.</span></td></tr><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_udBna-s0ow8/Sn2c0W5OLII/AAAAAAAACL4/AjHXRlzRJL8/s1600-h/DSC01961.JPG"><img id="BLOGGER_PHOTO_ID_5367618754208214146" style="margin: 0pt 10px 10px 0pt; float: left; width: 400px; cursor: pointer; height: 225px;" alt="" src="http://3.bp.blogspot.com/_udBna-s0ow8/Sn2c0W5OLII/AAAAAAAACL4/AjHXRlzRJL8/s400/DSC01961.JPG" border="0" /></a><br /></td><td><span style="font-size:85%;">Next step is to remove the monitor. First remove the supported cups (1 and 2 in figure). Just pull them off by holding the thick edge.<br /></span></td></tr><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_udBna-s0ow8/Sn2c0rvUnwI/AAAAAAAACMA/2PqJ3qwkv3Q/s1600-h/DSC01960.JPG"><img id="BLOGGER_PHOTO_ID_5367618759803838210" style="margin: 0pt 10px 10px 0pt; float: left; width: 400px; cursor: pointer; height: 225px;" alt="" src="http://2.bp.blogspot.com/_udBna-s0ow8/Sn2c0rvUnwI/AAAAAAAACMA/2PqJ3qwkv3Q/s400/DSC01960.JPG" border="0" /></a><br /></td><td><span style="font-size:85%;">Remove the connection to monitor (4 in above figure)<br /></span></td></tr><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_udBna-s0ow8/Sn2d7rxfcsI/AAAAAAAACMQ/n370XRWAPdo/s1600-h/DSC01958.JPG"><img id="BLOGGER_PHOTO_ID_5367619979583648450" style="margin: 0pt 10px 10px 0pt; float: left; width: 400px; cursor: pointer; height: 225px;" alt="" src="http://1.bp.blogspot.com/_udBna-s0ow8/Sn2d7rxfcsI/AAAAAAAACMQ/n370XRWAPdo/s400/DSC01958.JPG" border="0" /></a><br /></td><td><span style="font-size:85%;"></span></td></tr><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_udBna-s0ow8/Sn2d8V_qMKI/AAAAAAAACMY/8WcNKSKNv8Y/s1600-h/DSC01957.JPG"><img id="BLOGGER_PHOTO_ID_5367619990917361826" style="margin: 0pt 10px 10px 0pt; float: left; width: 400px; cursor: pointer; height: 225px;" alt="" src="http://3.bp.blogspot.com/_udBna-s0ow8/Sn2d8V_qMKI/AAAAAAAACMY/8WcNKSKNv8Y/s400/DSC01957.JPG" border="0" /></a><br /></td><td><span style="font-size:85%;">Now the hard part comes. Remove the wifi cables. Be patient while remvoing. Here, reassembling takes more time than disassembling.<br /></span></td></tr><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_udBna-s0ow8/Sn2d8p9fUiI/AAAAAAAACMg/eW-jwk69Z6Q/s1600-h/DSC01955.JPG"><img id="BLOGGER_PHOTO_ID_5367619996276970018" style="margin: 0pt 10px 10px 0pt; float: left; width: 400px; cursor: pointer; height: 225px;" alt="" src="http://1.bp.blogspot.com/_udBna-s0ow8/Sn2d8p9fUiI/AAAAAAAACMg/eW-jwk69Z6Q/s400/DSC01955.JPG" border="0" /></a></td><br /><td><span style="font-size:85%;">We have removed all the connections to the monitor.</span></td><br /></tr><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_udBna-s0ow8/Sn2d8xkcwUI/AAAAAAAACMo/3xp3dUtXejM/s1600-h/DSC01954.JPG"><img id="BLOGGER_PHOTO_ID_5367619998319427906" style="margin: 0pt 10px 10px 0pt; float: left; width: 400px; cursor: pointer; height: 225px;" alt="" src="http://3.bp.blogspot.com/_udBna-s0ow8/Sn2d8xkcwUI/AAAAAAAACMo/3xp3dUtXejM/s400/DSC01954.JPG" border="0" /></a></td><br /><td><span style="font-size:85%;"></span></td></tr><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_udBna-s0ow8/Sn2e2CuMBpI/AAAAAAAACMw/9NTWsPqn1wY/s1600-h/DSC01953.JPG"><img id="BLOGGER_PHOTO_ID_5367620982176220818" style="margin: 0pt 10px 10px 0pt; float: left; width: 400px; cursor: pointer; height: 225px;" alt="" src="http://4.bp.blogspot.com/_udBna-s0ow8/Sn2e2CuMBpI/AAAAAAAACMw/9NTWsPqn1wY/s400/DSC01953.JPG" border="0" /></a><br /></td><td><span style="font-size:85%;">Now remove the rest of screws and you are set.<br /></span></td></tr></tbody></table><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com18tag:blogger.com,1999:blog-19302879.post-6792355386195268062009-08-01T19:20:00.009+05:302009-08-28T19:35:23.083+05:30Appengine Task Queue API & Gotchas<div>I recently added a new feature for <a href="http://www.appsd.com/twitter/">Appsd</a>. It shows the recent iphone related news from twitter. For this we search twitter every 10 minutes and gather all links. It shows the highest tweeted links. I used task queue api and cron for crawling. Here are things I learned from task queue api.<br /><div><ol><li>As of now Task queue api is in experimental state. So you have to import it from google.appengine.api.labs.taskqueue. When it got stabilized you have to import it from google.appengine.api.taskqueue. So proper way of importing is, first try to import from google.appengine.api.taskqueue. If it fails then import it from labs.<br /></li><br /><li>If the response of the request is not HTTP 200 OK then appengine tries to reexecute the task after some time. This is a big problem. It has two side effects. Task might have failed because of some temporal problem or because of some bug or exception. If it is the second case, reexecuting the task after some time won't solve the problem. Second problem is, it basically exhausts your 10000 quota limit. </li><br /><li>Now there is no way to increase the quota of tasks from 10000 requests. So if each task is not taking more time then pack more tasks into single task. For instance I process multiple urls in single task. </li><br /><li>If you change schema, don't forget to support the old schema. (Refer 2nd point)</li><br /><li>when you change something from post to get then do support get request and return nothing otherwise task will fail. (Again refer 2nd point)</li></ol></div>Update: Task queue uses exponential backoff scheme to prevent single error exhausting your quota. see<a href="http://groups.google.com/group/google-appengine/browse_thread/thread/5e32c52b18ac8085?pli=1"> this post.</a></div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com7tag:blogger.com,1999:blog-19302879.post-75192816219043585422009-06-11T23:47:00.003+05:302009-06-15T15:17:03.165+05:30Startup CityLast Saturday i attended <a title="startup city" href="http://www.siliconindia.com/startupcity_09/index.php" id="t90d">Startup city</a> at <a title="Nimhans convention centre" href="http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=nimhans+convention+center,+bangalore&sll=37.439974,-95.712891&sspn=51.500384,135.351563&ie=UTF8&ll=12.943564,77.596393&spn=0.015684,0.033045&z=16" id="aswr">Nimhans convention centre</a>. It was second time i attended. These were few companies that i found interesting.<br /><br /><a title="MedFlo Telematics" href="http://www.medflotelematics.com/index.html" id="a47r">MedFlo Telematics</a>: They Develop telemedicine kiosks. This project is already started and they deployed few kiosks in rural areas of Kerala.<br /><a title="Vidteq" href="http://www.vidteq.com/" id="sfkq">Vidteq</a>: They show driving directions. Instead of showing just maps they show actual video directions. Among the companies that participated in conference, this is the only service i used before. Though this is a very good thought, i find streaming a bit sluggish. They should provide even more options like controlling the stream speed etc to make it more usable. This is simplified version of Google street maps.<br /><a title="Ikensolutions" href="http://www.ikensolutions.com/" id="d-br">Iken Solutions</a>: They developed recommendation engine for different domains.<br /><a title="Latlong" href="http://www.latlong.in/LatLong/" id="v:po">Latlong</a>: Its a location based service. You can get the results by SMSing or by installing their custom software. Since GPS devices are not prevalent in India they maped tower information to location.<br /><a title="Ennovasys" href="http://www.ennovasys.com/index.php" id="asut">Ennovasys</a>: Provides supply chain management solutions. Companies can directly track their inventory directly using their software and it is integrated with Google maps.<br /><a title="Panini" href="http://www.paninikeypad.com/" id="laxv">Panini</a>: They developed Indian language keypad for mobiles. They did statical language modeling to predict the word you are typing. Accordingly they change the characters in the keypad. So you can type faster. You can send the text throughSMS and they even compress the text while sending. So you can send many characters in one SMS. The main disadvantage with this software is, the same software should present on other mobile to read.<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-19302879.post-2282759230921027492009-05-29T01:35:00.003+05:302009-05-29T01:57:41.314+05:30Market oriented programmingApart from <a title="CS" href="http://en.wikipedia.org/wiki/Computer_science" id="tf:-">CS</a> , the other subject I like the most is <a title="Economics" href="http://en.wikipedia.org/wiki/Economics" id="jyv1">Economics</a> . Why economics ? The interesting aspect of economics is, we convert each and every problem into problem of 2 variables namely <a title="supply and demand" href="http://en.wikipedia.org/wiki/Supply_and_demand" id="q78a">supply and demand</a> . Thus the complexity of analyzing more variables is reduced to that of 2. I liked the simplicity of this kind of analysis.<br /><br />Basic principles of economics can be applied to any subject that deals with analyzing the interaction between limited set of resources and players. Economics' analysis explains why certain behavior is happening and how it ought to have happened etc. If the behavior is not what it ought to have been then we change the rules to bring it back to intended one.<br /><br />Examples of where economics have been applied ( from <a title="Wiki" href="http://en.wikipedia.org/wiki/Economics" id="qdx9">Wiki</a> ), <i>Economic analysis is applied throughout society, in business, finance and government, but also in crime, education, the family, health, law, politics, religion, social institutions, war, and science.</i><br /><br /><div style="text-align: left;">When I was doing my masters I had given talk on Market Oriented Programming. I am sharing the slides. In this talk I had taken few examples where economic analysis had been applied to computer science problems. As I said earlier, economic analysis is best suited for analyzing <a title="Resource allocation problems" href="http://en.wikipedia.org/wiki/Resource_allocation" id="ck_o">Resource allocation problems</a>. We face this problem quite often in computer science. For example,<br /></div><br />1. How to allocate the storage space to users. (You can say fixed, but is it really good ?. There are many who are not using any allocated spaces and others who always wants more space. How to draw the line here ?)<br />2. Load balancing<br />3. Adsense. Perhaps this is the best example of how the theory of economics can be applied to a CS problem.<br />4. Facebook is planning a feature where you will buy some credits and give that credits to friends notifications and posts. More on it <a title="http://news.cnet.com/8301-17852_3-10212452-71.h" href="http://news.cnet.com/8301-17852_3-10212452-71.h" id="onli">http://news.cnet.com/8301-17852_3-10212452-71.h</a>tml<br /><br /><span style="font-size:130%;"><b>Adsense. </b></span><br /><br />I haven't explained about it in my slides. But I wanted to give overview of it. The problem for Google is ( Here we are taking Google as an example and its true with any other search engine), what kind of Ads it has to show on a page ?. What ever Google do should satisfy three entities, 1. User, 2. Advertiser and 3. Google themselves. So, it has to achieve the following objectives.<br /><ol><li>It should show relevant Ads to user. If it is not showing relevant ads then users find it less interesting and nobody look at them and it leads to <a title="Ad Blindness" href="http://en.wikipedia.org/wiki/Ad_blindness" id="l5-r">Ad Blindness</a>. Eventually users won't follow ads. </li><li>It should satisfy the advertiser. Advertiser should get as many users as possible to their site through the Ads. This is possible only when it's Ad is shown at right place and at right time. For this, each advertiser bids for certain ad terms (Its like describing what Ad they are going to show ) and pays amount to Google based on users visiting the advertisers page. (i.e how many users actually clicked the Ad) Potentially there will be many advertisers, to maximize their chance of showing the ad they have to bid more.</li><li>Google should maximize its revenue from above transactions. </li></ol><br />How Google achieved these objectives ?<br /><ul><li>1 and 2 are of related and assumed Google did its best to show relevant Ads. :)</li><li>3. Google should maximize its revenue from advertisers. This is done by introducing competition among advertisers. Google uses a variant of <a title="vickrey auction" href="http://en.wikipedia.org/wiki/Vickrey_auction" id="cl1b">vickrey auction</a> (In vickrey auction, highest bidder wins, but the price paid by him is the second-highest bid). Since there will be few Ad places Google should find a way to choose few from these advertisers. ( For example, if you search in google, in your right hand side at the most google shows 8 Ads. So here we have only 8 Ad places or slots )</li></ul><div id="ue7h" style="text-align: left;"><img src="http://docs.google.com/File?id=ajfh7vh2zdmr_2ggs45kcp_b" height="192" width="316" /></div><img src="http://www.blogger.com/post-create.g?blogID=19302879" alt="" /><br />Whatever mechanism Google chooses,it should not have any side effects. For example, lets assume that Google chooses the advertisers based on the bid amount. What is the problem with this approach ?. Lets see whether it achieves our objectives.<br /><ol><li>Users should get relevant Ads: This objective may or may not be achieved and it depends on honesty of advertisers. For example, when a user is searching for BMW cars, he should not get advertisements about Ferrari, Toyota cars. This is possible if Ferrari and Toyota bids for BMW keyword. So advertisers may lie and Google should consider it. Second reason why advertisers can lie is, remember they pay only on number of clicks, so advertisers may bid for many irrelevant terms for high price. They do this to increase the brand awareness. Since they are bidding high, their Ads will always show up and users will not click these Ads because these are irrelevant Ads and eventually advertisers will not pay money to Google. The Advantage advertisers get is they show their Ads on lot of pages by paying little money. If Google is not showing relevant Ads, as discussed, it will increase the Ad revenue. </li><li>Advertisers should get users to their page: Again this may or may not be achieved for the same above reasons. </li><li>Google should maximize its revenue: At the first glance it appears that google got maximum revenue but its not true. Since it may not be showing relevant Ads, it increases the <a title="Ad Blindness" href="http://en.wikipedia.org/wiki/Ad_blindness" id="l5-r">Ad Blindness</a> and looses its revenue. It may be good for short term and definitely not good for long term. Yahoo used the above approach for long time and eBay exploited it. (I got this info from Prabhakar Raghavan's Talk) </li></ol>Actually Google uses combination of Quality score and Bid amount. Quality score is again combination of CTR (Click through ratio and it is ratio of number of clicks of Ad to number of times they showed the ad), Relevance and Landing page quality. See below YouTube video to know more about Google Ad auction. By using Quality score google eliminates the above problems and still making lot of money :) .<br /><br />In economics <a title="Mechanism design" href="http://en.wikipedia.org/wiki/Mechanism_design" id="hjoi">Mechanism design</a> is the study of designing rules of a game or system to achieve a specific outcome, even though each agent may be self-interested. These systems are formally analyzed using <a title="Game theory" href="http://en.wikipedia.org/wiki/Game_theory" id="sx.q">Game theory</a>.<br /><br /><br /><span style="font-size:130%;"><b>References.</b></span><br /><br />Introduction to the Google Ad Auction ( <a href="http://www.youtube.com/watch?v=K7l0a2PVhPQ">http://www.youtube.com/watch?v=K7l0a2PVhPQ</a> )<br />http://adsense.blogspot.com/<br />Example of how bittorrent client uses mechanism design to improve file sharing. <a href="http://torrentfreak.com/bittorrent-to-be-pimped-by-nobel-prize-071019/">http://torrentfreak.com/bittorrent-to-be-pimped-by-nobel-prize-071019/ </a><br /><a href="http://en.wikipedia.org/wiki/Economics">http://en.wikipedia.org/wiki/Economics</a><br /><a href="http://en.wikipedia.org/wiki/Resource_Allocation">http://en.wikipedia.org/wiki/Resource_Allocation</a><br /><a href="http://en.wikipedia.org/wiki/Supply_%26_Demand">http://en.wikipedia.org/wiki/Supply_%26_Demand</a><br /><a href="http://en.wikipedia.org/wiki/Ad_blindness">http://en.wikipedia.org/wiki/Ad_blindness</a><br /><a href="http://en.wikipedia.org/wiki/Vickrey_auction">http://en.wikipedia.org/wiki/Vickrey_auction</a><br /><a href="http://en.wikipedia.org/wiki/Mechanism_design">http://en.wikipedia.org/wiki/Mechanism_design</a><br /><a href="http://en.wikipedia.org/wiki/Game_theory">http://en.wikipedia.org/wiki/Game_theory</a><br /><a href="http://plato.stanford.edu/entries/game-theory/">http://plato.stanford.edu/entries/game-theory/</a><br /><br /><span style="font-weight: bold;font-size:130%;" >Slides</span><br /><br /><iframe src="http://docs.google.com/EmbedSlideshow?id=ajfh7vh2zdmr_3cdgt7rhb" frameborder="0" height="342" width="410"></iframe><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-19302879.post-12132077508173844052009-04-07T01:26:00.004+05:302009-04-07T01:39:51.359+05:30Appsd<span style="font-family:georgia;"> As we know, one of the great innovations of IPhone is </span><a style="font-family: georgia;" title="Appstore" href="http://en.wikipedia.org/wiki/App_Store" id="sl_1">Appstore</a><span style="font-family:georgia;"> . It really made finding and installing apps easier. As of now there are more than 30,000 (Its 30444 while i am writing this article) iphone apps available in appstore. Installing an app is just a click away. Problem is finding apps. They solved this problem partially, by grouping the apps into categories or you can search for an app (IPhone search is getting improved greatly. It is definitely far better than couple of months back.) Both of these have some difficult. Lets say, some how you find an app and before buying the app you wanted to compare the similar apps. Now there is no straight forward way to do it. With appsd we tried to solve this problem. </span><br /><br /><span style="font-family:georgia;">The problem I faced frequently is, whenever I wanted to buy an app, I wanted to know the feedback and alternative applications to try out. Also whether there is any free version of that app available and other such information. I can read the comments for feedback but i find misleading many times.</span><br /><br /><span style="font-family:georgia;">Appsd tries to solve these problems. From last couple of months i have been working on the this project. (I work mostly an hour or two hours on this. That's the maximum time i can devote :) ) Appsd is a tool that lets you find related iphone applications and related articles. It achieves this by grouping all the similar applications together. The similarity between the apps is found by comparing the title and description. (designed as vector space model)</span><br /><br /><span style="font-family:georgia;">Related articles are found by using Yahoo boss API. We do normal search for that application and then we filter the results based on website. We maintain list of 45 websites and we show reveiws only from these websites. We do filter some of the results from these sites if we think they are not appropriate. </span><br /><br /><span style="font-family:georgia;">Site is hosted in Google Appengine. The main drawbacks is search. Appengine doesn't have sophisticated support for search. Now only games are present. I will upload rest of the apps in a week time. </span>The name appsd came from apps + <a href="http://en.wikipedia.org/wiki/Daemon_%28computer_software%29">deamon</a>.<br /><br /><br /><a href="http://www.appsd.com/" style="text-decoration: none;"><img alt="http://www.appsd.com/images/defaultpic.gif" src="http://www.appsd.com/images/defaultpic.gif" /></a><br /><a href="http://www.appsd.com/"></a><br /><br /><span style="font-weight: bold;font-family:georgia;" >References </span><br /><br /><span style="font-family:georgia;"><a href="http://www.amazon.com/Programming-Collective-Intelligence-Building-Applications/dp/0596529325">http://www.amazon.com/Programming-Collective-Intelligence-Building-Applications/dp/0596529325</a> (Excellent book)</span><br /><span style="font-family:georgia;"><a href="http://numpy.scipy.org/">http://numpy.scipy.org/</a> (It can easily increase python speed by 7x) </span><br /><a style="font-family: georgia;" href="http://code.google.com/p/scipy-cluster/">http://code.google.com/p/scipy-cluster/ </a><br /><a style="font-family: georgia;" href="http://jquery.com/">http://jquery.com/</a><br /><a style="font-family: georgia;" href="http://www.blueprintcss.org/">http://www.blueprintcss.org/</a><br /><a style="font-family: georgia;" href="http://plugins.jquery.com/project/corners">http://plugins.jquery.com/project/corners</a><br /><a style="font-family: georgia;" href="http://zooie.wordpress.com/2009/01/15/twitter-boss-real-time-search/">http://zooie.wordpress.com/2009/01/15/twitter-boss-real-time-search/</a><br /><a style="font-family: georgia;" href="http://developer.yahoo.com/search/boss/boss_guide/Web_Search.html">http://developer.yahoo.com/search/boss/boss_guide/Web_Search.html</a><br /><a style="font-family: georgia;" href="http://www.anujgakhar.com/2009/03/16/using-jquery-to-load-alternate-images">http://www.anujgakhar.com/2009/03/16/using-jquery-to-load-alternate-images</a><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-19302879.post-36045777929728571752009-02-13T10:54:00.001+05:302009-02-13T10:56:02.081+05:301234567890 .....Today unix epoch time is going to cross 1234567890 !!. Track it in <a href="http://www.coolepochcountdown.com/">http://www.coolepochcountdown.com/</a><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-19302879.post-45821970407060631932008-04-24T09:50:00.001+05:302008-04-24T10:32:23.492+05:30Facebook ChatToday <a href="http://www.facebook.com/">Facebook</a> released chat that looks similar to Gmail. I have written an article about <a title="how chat works in Gmail" href="http://blog.sairahul.com/2008/04/how-gmail-works.html" id="f59n">how chat works in Gmail</a>. Facebook chat is also based on HTTP but they are not using any <a title="hacks like Gmail chat" href="http://blog.sairahul.com/2008/04/how-gmail-works.html" id="ynz-">hacks like Gmail chat</a>. Here is how it works.<br /><br />Check it out my previous article on <a title="why chat in HTTP is challenging" href="http://blog.sairahul.com/2008/04/how-gmail-works.html" id="sm51">why chat in HTTP is challenging</a>. Facebook's approach for this straight forward. They always opens one connection to Facebook server and when ever you receive a chat message from your friend they show it in chat window or in case of timeout they open one more connection immediately and waits for response.<br /><br />Client A -----> Server -----> Client B<br /><br />Fig 1.<br /><br />For example, suppose A sends a message to B. Since A can't direct sent the message to B it has to post that message to Facebook Server and which inturn should send the same to B. Here Both clients A and B opens a connection (This is an Ajax request) to Server and waits for Server response. Server will respond only if it has any outstanding message pending to that client. (In our example message from A to B). Since there is already a connection B opens to server it will immediately get the message A had sent. For instance if there is no message, the opened connection will be timed out (this is 300sec for Firefox. You can change the default value by changing <a href="http://kb.mozillazine.org/Network.http.keep-alive.timeout">network.http.keep-alive.timeout</a> ) and Facebook again opens a new connection (Ajax request) and above process repeats.<br /><br />The URL that Facebook opens to Server will looks in follaowing format.<br /><br />http://0.channel10.facebook.com/x/<span id="uq.i" style="font-style: italic;"><randomno></randomno></span>/true/p_<span id="bh9j" style="font-style: italic;"><facebookid></facebookid></span>=803&<br /><br />Check it out my previous article. <a title="How Chat Works !" href="http://blog.sairahul.com/2008/04/how-gmail-works.html" id="axs5">How Gmail Works !</a>.<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-19302879.post-10129351842663957292008-04-21T09:41:00.000+05:302008-04-21T09:45:41.404+05:30World's Most Innovative CompaniesBusinessWeek released <a href="http://bwnt.businessweek.com/interactive_reports/innovative_companies/?chan=magazine+channel_special+report">World's Most Innovative Companies</a> list and interestingly two Indian companies Tata and Reliance Industries are there. Tata is in 6th position and Reliance Industries is in 19th position.<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-19302879.post-22707249682272969572008-04-20T20:53:00.004+05:302008-04-20T22:42:54.557+05:30How Gmail Works !<div id="djud">This article is not about how Gmail works exactly but i find some features of Gmail interesting and i tried to understand how they work.<br /><br /><h2 id="gdnw"><span style="font-size:130%;">Gmail Chat.</span></h2>Gmail nicely integrated the chat functionality in browser itself. Technically its challenging to implement it. At a first glance we will not understand why it is ?. Lets see why this is tricky.<br /><br />In <a href="http://en.wikipedia.org/wiki/HTTP">HTTP</a>, client initiates connection to the server and server sends the data client had requested. Its pull mechanism i.e client always initiates the connection and server responds with appropriate data. In case of chatting the communication is bidirectional. For example, lets assume Client A and Client B are chatting in Gmail. If Client A sends a message to Client B, Since Client A can't connect to Client B directly (because both are HTTP clients) it goes via intermediate Google servers. So the flow is,<br /><br />Client A -----> Server -----> Client B<br /><br />Fig 1.<br /><br />To happen above communication, Server have to initiate connection to B. Here is where the problem lies. How can server initiate a connection to client ?.<br /><br />HTTP 1.1 introduced <a href="http://en.wikipedia.org/wiki/Chunked_transfer_encoding">chunked tranfer encoding</a>. This is usually used to transfer a file of unknown length or more specifically stream data to client from server (Remember this is after the client initiates the connection). Gmail chat nicely exploits this feature. What they do is, they put a hidden iframe (Ex. Client B) and sets its source URL to Google server. Whenever data is available at the server end (In our example Client A had sent the data to server which it is supposed to transfer to B) it sends the data to client (Client B) . Since this connection will never end the server can send the updates (Whenever it receives a message from Client A ) to client (Client B).<br /><br />Following is the HTTP Request and Response captured using Wireshark that is part of the chat conversation.<br /><br /><span id="dwoi"><b id="p:-r">HTTP Request</b></span><br />GET /mail/channel/bind?at=xn3j322i8pev1stfx4irewnfnlbt1l&VER=6&it=141&RID=rpc&SID=14AEDGD25D064E14&CI=0&AID=60&TYPE=xmlhttp&zx=en6uu1u8grtt&t=1 HTTP/1.1<br />Host: mail.google.com<br />User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12<br />Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5<br />Accept-Language: en-us,en;q=0.5<br />Accept-Encoding: gzip,deflate<br />Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />Keep-Alive: 300<br />Connection: close<br />Referer: http://mail.google.com/mail/?ui=2&view=js&name=js&ids=vsemtnrembkr<br />Cookie: <cookie><br /><br /><span id="d4.2"><b id="f-st">HTTP Response</b></span><br />HTTP/1.1 200 OK<br />Cache-control: no-cache<br />Pragma: no-cache<br />Content-Type: text/plain; charset=utf-8<br />ETag:<br />Transfer-Encoding: chunked<br />Server: GFE/1.3<br />Date: Thu, 03 Apr 2008 03:39:58 GMT<br />Connection: Close<br /><br />15<br /><br />18<br />[[61,["noop"]<br />]<br />]<br /><br />There are several server push technologies available. Detail explanation about this can be found in the following articles.<br /><br /><a href="http://cometdaily.com/2007/12/11/the-future-of-comet-part-1-comet-today/">http://cometdaily.com/2007/12/11/the-future-of-comet-part-1-comet-today/</a><br /><a href="http://cometdaily.com/2008/02/22/comet-and-http-pipelining/">http://cometdaily.com/2008/02/22/comet-and-http-pipelining/</a><br /><a href="http://cometdaily.com/2007/12/18/latency-long-polling-vs-forever-frame/">http://cometdaily.com/2007/12/18/latency-long-polling-vs-forever-frame/</a><br /><a href="http://en.wikipedia.org/wiki/Chunked_transfer_encoding">http://en.wikipedia.org/wiki/Chunked_transfer_encoding</a><br /><a href="http://en.wikipedia.org/wiki/HTTP">http://en.wikipedia.org/wiki/HTTP</a><br /><br /></cookie><h2 id="u-ef"><span style="font-size:130%;">File upload. </span><br /></h2>They use again hidden iframe hack. <a href="http://www.sajithmr.com/upload-files-like-gmail/">Check this</a> blog for more information.<br /><br /><h2 id="f_lh"><span style="font-size:130%;">Mail Threading.</span></h2>I initially thought it is a bit complex algorithm. Why i thought was, when some one sends reply from different email server like yahoo how they say it is reply to my previous mail. Although it seems obvious if we see the SMTP headers you will not find any reference to previous mail. But it turns out to be very dumb algorithm. I mean it is mostly based on the subject of the mail. If you send a mail to A and if he replied with different subject Gmail will not show it as a part of the same conversation. If A sends a completely different mail (not to reply to your mail) and if he uses a subject that is similar to one you send to him earlier, gmail shows it as a part of the previous mail conversion.<br /><br />Apart from Gmail implementation. If you want to group the mail archive thread wise i.e like Gmail style conversation you can refer the <a title="Threading algorithm" href="http://www.jwz.org/doc/threading.html" id="opds">Threading algorithm</a> which was used in Netscape mail.<br /></div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com6tag:blogger.com,1999:blog-19302879.post-66094954888544503842008-03-04T21:58:00.002+05:302008-03-04T22:14:25.979+05:30The smartest unknown Indian Entrepreneur !It is great to known about <a href="http://www.adventnet.com/">this company</a>. You can find more about it in original <a href="http://www.forbes.com/technology/2008/02/22/mitra-zoho-india-tech-inter-cx_sm_0222mitra.html?feed=rss_popstories">forbes article.</a> Their product <a href="http://www.zoho.com/">zoho.com</a> is really wonderful. Found this article from <a href="http://indianeconomy.org/2008/03/03/the-smartest-unknown-indian-entrepreneur/">Indian Economy Blog</a>. The point i wanted to highlight from the article.<br /><br /><span style="font-style: italic;">Vembu has done something few Indian entrepreneurs have been able to achieve--build a true "<span style="font-weight: bold;">product</span>" company out of India. </span><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-19302879.post-6968533657448728402008-02-22T00:20:00.001+05:302008-02-22T00:41:47.339+05:30Making Phun WorkPhun is an amazing application. It is created by Emil Ernerfeldt.<br /><br /><span style="font-style: italic;"> Phun is meant to be a playground where people can be creative. It can also be used as an educational tool to learn about physics concepts such as restitution and friction.</span><br /><br />You can find more about this app from the following Youtube video. When i tried the app it was not worked for me. It throwed following Error.<br /><br /><span style="font-style: italic;">Caught exception: Couldn't set video mode, SDL-error: Couldn't find matching GLX visual, /home/c03/c03eet/Phun/Source/core/Main.cpp:228: int main(int, char**)</span><br /><span style="font-style: italic;">ERROR: Exception caught in main: Couldn't set video mode, SDL-error: Couldn't find matching GLX visual</span><br /><span style="font-style: italic;">ERROR: Exception caught: Couldn't set video mode, SDL-error: Couldn't find matching GLX visual</span><br /><br />I am using Ubuntu 7.10 and i have inbuilt graphics card that comes along with my laptop. After couple of hours i made it work and here are the things you have to do.<br /><br />1. By default the color depth is 16 bit. Change this to 24 bit. Open /etc/X11/xorg.conf search for <span style="font-style: italic;">DefaultDepth</span> and set the value to 24.<br />2. Open autoexec.cfg file in the Phun directory. uncomment the last line i.e <span style="font-style: italic;">Resources.shaders = false;</span><br />3. Go to the Phun directory (If you extract the files by default all files will be extracted here) and run phun. (You should do this by going inside the directory.)<br /><br />You can download Phun from <a href="http://www.acc.umu.se/%7Eemilk/downloads.html">http://www.acc.umu.se/~emilk/downloads.html</a><br /><br /><object height="355" width="425"><param name="movie" value="http://www.youtube.com/v/0H5g9VS0ENM&rel=1"><param name="wmode" value="transparent"><embed src="http://www.youtube.com/v/0H5g9VS0ENM&rel=1" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"></embed></object><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-19302879.post-46429490147442891452007-12-15T14:16:00.000+05:302007-12-15T15:02:49.211+05:30Google Reader Friend's Shared Items.Now Google reduced the effort of mailing shared items link !. It would be nice if it gets the friends from Orkut as well.<br /><br />http://googlereader.blogspot.com/2007/12/reader-and-talk-are-friends.html<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-19302879.post-43281917189997196082007-12-14T23:12:00.000+05:302007-12-14T23:54:13.806+05:30<div style="text-align: center;"><span style="font-weight: bold;font-size:130%;" >Google Knol</span><br /></div><br />It is quite a surprise <a href="http://googleblog.blogspot.com/2007/12/encouraging-people-to-contribute.html">news</a> from google. There are lot of articles discussing about the same. I find the following two articles interesting.<br /><br /><a href="http://www.bubblegeneration.com/2007/12/how-not-tospecial-knolgoogle-edition.cfm">http://www.bubblegeneration.com/2007/12/how-not-tospecial-knolgoogle-edition.cfm</a><br /><br /><a href="http://www.krishworld.com/blog/open-source/open-media/wikipedia-is-safe-from-google-knol/">http://www.krishworld.com/blog/open-source/open-media/wikipedia-is-safe-from-google-knol/</a><br /><br />The advantages of Knol over Wikipedia are, it clearly defines the owner of an article and it provides a proper monetization platform. The former clearly differentiates between these two approaches. The later problem can be fixed and it should be as the current way of monetization for Wikipedia can't sustain.<br /><br />It is an interesting move from Google. If you miss the recent blog post about assessment of Google-Yahoo results, you can read it <a href="http://aixtal.blogspot.com/2007/11/search-google-yahoo-comparison.html">here</a>. Another goal of the project might be to collect more interests of user. I mean, as rating system is present in Knol, Google can precisely know which articles, style of writing etc hence they can better serve the ads for users as well. Google may further extend it and provides social networking functionality.<br /><br />Yahoo tried to gather collective wisdom of crowd through Yahoo Answers and it replaced discussion forums, newsgroups etc and now Google have even bigger plans and trying to replace Wikipedia !!.<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-19302879.post-14330440373634419742007-11-27T00:47:00.000+05:302007-11-27T02:01:54.565+05:30<div style="text-align: center;"><span style="font-size:130%;"><span style="font-weight: bold;">CNaming my Blog ! </span></span><br /></div><br />I changed my blog name from <a href="http://sairahulreddy.blogspot.com/">http://sairahulreddy.blogspot.com</a> to <a href="http://blog.sairahul.com/">http://blog.sairahul.com</a>. It is very simple to do. You can find the instructions for doing it <a href="http://help.blogger.com/bin/answer.py?answer=55373">here</a>.<br /><br />step 1. Create a DNS entry for blog.sairahul.com as follows.<br /><span style="font-style: italic;">blog IN CNAME ghs.google.com.</span><br />step2. Go to your blog setting in blogger and then go to Settings->Publishing->Advanced Settings and enter your blog name here.<br /><br />Now if you go to your new address, you can observe that all your blog entries point to the new address instead of old one. If you go to old address it will get redirect to new one.<br /><br /><span style="font-weight: bold;">How it works ?.<br /><br /></span><span>When you enter http://blog.sairahul.com in browser. The following sequence of steps will happens.<br />1. Browser tries to resolve the domain name of blog.sairahul.com. Since we have given blog.sairahul.com as CNAME of ghs.google.com, it will get IP address of ghs.google.com.<br />2. Next, browser will contact ghs.google.com (i mean IP address of ghs.google.com) and set Host field to "blog.sairahul.com"<br />3. Since Google knows (In step2 we added this) the alias of your blog name it will return your blog correctly.<br /><br />Host name in step 2 is very important. Google differentiates domains using Host name (in other words it maintains multiple domains using same host name). You can test the above theory using nslookup and wget.<br />1. Get the IP using nslookup.<br /> <span style="font-style: italic;">nslookup ghs.google.com</span><br />2. Get the page using wget.<br /> <span style="font-style: italic;">wget --header "Host: blog.sairahul.com" http://<above-ip-addr><above-ip-address> -o out.html<br /></above-ip-address></above-ip-addr></span><span><above-ip-address><br />If you remove the header option in the above step it will return 404 or if you give different valid host name it will return that page !.<br /></above-ip-address></span></span><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-19302879.post-17345496792885497982007-11-21T01:33:00.000+05:302007-11-27T02:33:15.509+05:30<div align="center"><span style="font-weight: bold;font-size:130%;" >Firefox 3 Features in Pictures</span><br /><br /><div align="left"><span style="font-size:100%;">You can download the beta version of Firefox <a href="http://www.mozilla.com/en-US/firefox/all-beta.html">here</a>. You can find list of all changes in <a href="http://www.mozilla.com/en-US/firefox/3.0b1/releasenotes/#whatsnew">http://www.mozilla.com/en-US/firefox/3.0b1/releasenotes/#whatsnew</a>. Here i am showing some of the important features i find interesting.<br /><br />Zooming in Firefox is greatly improved. (All because of new rendering engine). Compare the yahoo home page in Firefox 2 and in Firefox 3 when the page zoomed out.<br /></span></div></div><br /><div align="center"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_udBna-s0ow8/R0NBXOYOxwI/AAAAAAAAAIw/i9TETAQtjUs/s1600-h/ff_2_yahoo.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_udBna-s0ow8/R0NBXOYOxwI/AAAAAAAAAIw/i9TETAQtjUs/s320/ff_2_yahoo.jpg" alt="" id="BLOGGER_PHOTO_ID_5135019867385022210" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_udBna-s0ow8/R0NBXuYOxxI/AAAAAAAAAI4/5U-UlIEWv5Y/s1600-h/ff_3_yahoo.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_udBna-s0ow8/R0NBXuYOxxI/AAAAAAAAAI4/5U-UlIEWv5Y/s320/ff_3_yahoo.jpg" alt="" id="BLOGGER_PHOTO_ID_5135019875974956818" border="0" /></a><br /></div><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Download manager is integrated. You can now resume the download even after restarting Firefox.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_udBna-s0ow8/R0NBYuYOxyI/AAAAAAAAAJA/2MT4S_ulTj0/s1600-h/ff_download_mgr.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_udBna-s0ow8/R0NBYuYOxyI/AAAAAAAAAJA/2MT4S_ulTj0/s320/ff_download_mgr.jpg" alt="" id="BLOGGER_PHOTO_ID_5135019893154826018" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Another great improvement is in typing the URL s. Now you can just type partial keyword even the title of the page. You can find similar incremental search feature in downloads as well (refer above image)<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_udBna-s0ow8/R0NBYuYOxzI/AAAAAAAAAJI/sSzy-sz0Uvc/s1600-h/ff_incremental_search.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_udBna-s0ow8/R0NBYuYOxzI/AAAAAAAAAJI/sSzy-sz0Uvc/s320/ff_incremental_search.jpg" alt="" id="BLOGGER_PHOTO_ID_5135019893154826034" border="0" /></a><br /><br /><br /><br /><br />Bookmarking now supports Google like star. You can even add tags to the bookmarks. Now the bookmarks will be well integrate with online services like del.icio.us.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_udBna-s0ow8/R0NBY-YOx0I/AAAAAAAAAJQ/-RCvet4Er0s/s1600-h/ff_bookmark_star.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_udBna-s0ow8/R0NBY-YOx0I/AAAAAAAAAJQ/-RCvet4Er0s/s320/ff_bookmark_star.jpg" alt="" id="BLOGGER_PHOTO_ID_5135019897449793346" border="0" /></a><br /><br /><br /><br /><br />You can find the summary of the bookmarks in Places.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_udBna-s0ow8/R0NB6OYOx1I/AAAAAAAAAJY/XpEX5pvW2uU/s1600-h/ff_bookmarks_places.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_udBna-s0ow8/R0NB6OYOx1I/AAAAAAAAAJY/XpEX5pvW2uU/s320/ff_bookmarks_places.jpg" alt="" id="BLOGGER_PHOTO_ID_5135020468680443730" border="0" /></a><br /><br /><br /><br /><br /><br /><br />Add-ons now shows installed plugins as well. No need of about:plugins.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_udBna-s0ow8/R0NB6eYOx2I/AAAAAAAAAJg/Izu-4eq3M4A/s1600-h/ff_addons.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_udBna-s0ow8/R0NB6eYOx2I/AAAAAAAAAJg/Izu-4eq3M4A/s320/ff_addons.jpg" alt="" id="BLOGGER_PHOTO_ID_5135020472975411042" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />You can customize the default behavior of the mime type handling.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_udBna-s0ow8/R0NB6eYOx3I/AAAAAAAAAJo/YzNsdDzydqQ/s1600-h/ff_mime_handlers.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_udBna-s0ow8/R0NB6eYOx3I/AAAAAAAAAJo/YzNsdDzydqQ/s320/ff_mime_handlers.jpg" alt="" id="BLOGGER_PHOTO_ID_5135020472975411058" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />I used to kill Firefox to save the session :) (I know there are extensions now also. I don't want to install any). Now my little hack is gone !.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_udBna-s0ow8/R0NB6eYOx4I/AAAAAAAAAJw/OmeqawD2OoE/s1600-h/ff_save_quit.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_udBna-s0ow8/R0NB6eYOx4I/AAAAAAAAAJw/OmeqawD2OoE/s320/ff_save_quit.jpg" alt="" id="BLOGGER_PHOTO_ID_5135020472975411074" border="0" /></a><br /><br /><br /><br /><br /><br /><br />Last but not least you can find this cute warning when you go to about:config<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_udBna-s0ow8/R0NB6uYOx5I/AAAAAAAAAJ4/l6q98iOitNw/s1600-h/ff_about_config_warning.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_udBna-s0ow8/R0NB6uYOx5I/AAAAAAAAAJ4/l6q98iOitNw/s320/ff_about_config_warning.jpg" alt="" id="BLOGGER_PHOTO_ID_5135020477270378386" border="0" /></a><br /><br /><br /><br /><br /><br /><br />Overall new Firefox features are great.<div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-19302879.post-14690902405867037922007-10-28T23:55:00.000+05:302007-10-29T00:30:31.043+05:30<div style="text-align: center;"><span style="font-size:130%;"><span style="font-weight: bold;">Yahoo Maps - Driving Directions</span></span><br /></div><br />Yahoo released driving directions in India. It is really cool. Try<br /><ol><li><a href="http://in.maps.yahoo.com/#?addr=bangalore%20to%20tirupati">Bangalore to Tirupati</a></li><li><a href="http://in.maps.yahoo.com/#?addr=bangalore%20to%20hyderabad">Bangalore to Hyderabad</a></li><li><a href="http://in.maps.yahoo.com/#?addr=vijayawada%20to%20badrachalam">Vijayawada to Badrachalam</a><br /></li></ol>The really cool thing is directions in the right hand side. It shows small small details like Take Slight 1st Left, go 9.7 km. Although there are some problems (for instance if i tried <a href="http://in.maps.yahoo.com/#?lat=16.217832&lon=80.419922&z=12&addr=chandragiri%20to%20thondawada">Chandragiri to Thondavada</a> it showed route from Chandragiri to Dantewada, Chhattisgarh though Thondavada is a nearby village to Chandragiri.) overall it is very good.<br /><br />found @ <a href="http://feeds.feedburner.com/%7Er/gopalarathnam/%7E3/175338807/where-do-you-want-to-go-driving-today.html">gopal</a><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-19302879.post-11973125397362476202007-05-19T00:23:00.000+05:302007-11-27T02:04:42.291+05:30<div style="text-align: center;"><span style="font-size:130%;"><span style="font-weight: bold;">About Google's New Interface</span></span><br /></div><br />Google's new interface is better than earlier versions. Especially the top bar. It would have been nice if Google would have made the following changes to its interface.<br /><br />The new interface makes the themed personalized home pages (aka iGoogle) looks very ugly. It looks horrible for certain themes. Instead of the white color for all themes they can blend the color with the theme.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_udBna-s0ow8/Rk3246cj_LI/AAAAAAAAAC8/IGhLthZ-X3Q/s1600-h/google-new-interface1.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_udBna-s0ow8/Rk3246cj_LI/AAAAAAAAAC8/IGhLthZ-X3Q/s320/google-new-interface1.JPG" alt="" id="BLOGGER_PHOTO_ID_5065976613483838642" border="0" /></a>It is good to see links to, images, video, news etc on the bar right above the results. On the first impression i thought they were tabs. Instead they are just links pointing to various Google services. It would have been nice if they could have provide tabs. Because of this, the new interface become useless. Why i think so is, earlier also we have an option by clicking the more. I did not find any major advantage by providing the links above. Because, now, if i click on any of these links it will take to corresponding web site. Users as such do not have major advantage by just providing links. I can not compare the results simultaneously across different services because of this.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_udBna-s0ow8/Rk3246cj_MI/AAAAAAAAADE/BYPwxyF0F8Q/s1600-h/google-new-interface2.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_udBna-s0ow8/Rk3246cj_MI/AAAAAAAAADE/BYPwxyF0F8Q/s320/google-new-interface2.JPG" alt="" id="BLOGGER_PHOTO_ID_5065976613483838658" border="0" /></a><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-19302879.post-1175888692227127432007-04-07T00:37:00.000+05:302007-04-07T02:46:24.520+05:30<div style="text-align: center;"><span style="font-size:130%;"><span style="font-weight: bold;">Update on Google Notebook's Infamous Delete Problem !</span></span><br /></div><br />Surprisingly Google rectified one of the problems i mentioned in my earlier post in just 2 days. The layout looks good in Firefox under Linux. The other problem, deleting the text when we past text from the Kate editor still remains. Here the problem is not with the Google notebook, in fact the problem is with Kate editor only. What happens when we copy some of the text from the Kate is, it adds <span style="font-style: italic;">meta</span> tag before the text as show below. (Please note here that, although we copy text only, Kate tries to preserve the formatting by putting the text within <span style="font-weight: bold;">pre </span>tag. Although it is a text, it is not actually plain text, its html code. This is the way formatting will be preserved across applications when copy paste it)<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/4767/685/1600/428591/source_code_of_quote.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/4767/685/320/395780/source_code_of_quote.jpg" alt="" border="0" /></a>( I generated the above html code by copy pasting some text from Kate to Thunderbird compose window and i saved it as html)<br /><br /><div style="text-align: left;">After observing the above, i viewed the source code using the Firebug after pasting some text from Kate editor. (We have to see the source code before clicking on any other note. If we click on other note the copied text will get deleted) The source code looks as shown below.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/4767/685/1600/646980/meta_info_firebug.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/4767/685/320/92403/meta_info_firebug.jpg" alt="" border="0" /></a><br />Now i got little bit idea about what might happening inside. When we create a new note in Notebook, it creates an iframe and puts whatever text we put in body of the document. When we copy some text from the Kate, as i said earlier, it is putting some <span style="font-style: italic;">meta</span> tag before the text. Because <span style="font-style: italic;">meta</span> can't come under body, the newly added html piece of code is wrong. After pasting the code, Google Notebook validating the copied text and deleting it as it is not valid html. That's why, after pasting the text from Kate, the box becomes empty and Google Notebook always deletes the empty notes when we click on the other note. So it ultimately getting deleting. To cross check it, i deleted the <span style="font-style: italic;">meta</span> notes from Firebug and it works beautifully after that. Because of the same reason, i guess, i can't able to paste the copied text from Kate to Microsoft's Wordpad editor (The default editor that comes with Windows !) . But i can copy it to Notepad, because it ignores the html tags. So Google Notebook have to remove the unnecessary <span style="font-style: italic;">meta</span> information. Anyway copying <span style="font-style: italic;">meta</span> information makes no sense. Thanks to <a href="http://www.getfirebug.com/">Firebug</a> for helping in figuring out this problem !<br /></div></div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-19302879.post-1175194589111054722007-03-30T01:14:00.000+05:302007-04-07T00:37:01.766+05:30<div style="text-align: center;"><span style="font-size:130%;"><span style="font-weight: bold;">Google Notebook is out Of Beta ... Not yet ready ???</span></span><br /></div><br />Today Google Notebook is out of Beta. It seems that has still some bugs. I Found couple of glitches. For instance the rendering is completely bad in Firefox in linux. See the attached image. The other problem is, it is magically deleting the items. I added new note and pasted plain text into the box. When i click on the other notebook and when i click again on the same note it is deleting the text. The interesting thing is, i observed the above in linux (FC4 with Firefox 2.0.0.3) but i did not observe the same in Windows under the same Firefox version.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/4767/685/1600/639517/google_notebook_eratic_behaviour1.png"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/4767/685/320/26566/google_notebook_eratic_behaviour1.png" alt="" border="0" /></a><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com7tag:blogger.com,1999:blog-19302879.post-1175193808262743052007-03-30T01:10:00.000+05:302007-03-30T01:13:28.576+05:30<div style="text-align: center;"><span style="font-size:130%;"><span style="font-weight: bold;">About Indian Cricket Team Peformance in Worldcup </span></span><br /><div style="text-align: left;"><br /><span>Dravid going out in Burkha, the main reason for India's failure is India Gandhi and mail forwards such as "What India Will Do After World Cup (<a rel="nofollow" target="_blank" href="http://www.xboard.us/bbb/showthread.php?t=132096">http://www.xboard.us/bbb/showthread.php?t=132096</a>), Jokes such as this are good to laugh but really think about the Indian Team Performance. People can argue that whats the big deal to us (i mean as an individual) if they are out of the tournament. You may think its advertisers who are loosing money not us, but finally we are one who are paying the money to those companies. Means, we are loosing money. The same is true in case of TV Channels as well (Sony). Last but not least is, Country pride. Think about a country who has 2% of our population and still plays in the World cup. Its shame to our entire nation. Again the same question, 100 crore population and we did not find damn 11 players ?. Compare the same with the Australias team. The total population of Australia is 2 crore and they have such a nice players. What is the reason for this ?. India do not have right talent ? or BCCI is not taking right people ?.</span><br /><br /><span>Burning effigies, going into streats and throwing stones and things like these won't work. These are not the right way to express the discontent. Doing so will not create any impact on BCCI because it is getting the profits irrespective of our Teams performance. Who will work if they get the Damn money without doing any work. The right way to create impact is, stop watching all the matches India plays both in TVs as well as going to stadiums. I am not saying not to watch Cricket but don't watch matches which India plays. What's the advantage with this ?. The viewing rate will go down. (More on measuring the TV ratings can be found at <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Nielsen_Ratings">http://en.wikipedia.org/wiki/Nielsen_Ratings</a>) and if you do not go to stadiums then their income will come down. Doing this for a period of time will definitely create a impact. Infact it will create a BIG IMPACT. </span><br /><br />The interesting thing is, no body (I mean BCCI or Chappel or Captain) is talking about the Indian team performance. Infact they are creating cock and bull stories to divert the problem. For instance recent allegation about leaking the Chappel SMS about the Indian team selection.<br /><br /><span>Sachin and Dravid are crying, Zaheer Khan broken a stool, Sreesanth couldn't control his emotions .... all these will console any body (<a rel="nofollow" target="_blank" href="http://www.dnaindia.com/report.asp?newsid=1087316">http://www.dnaindia.com/report.asp?newsid=1087316</a>) Who wants the emotions of 15 players, Who considers the emotions of 100 Crore people ??? Lets show our emotions in right way otherwise it's not going to useful anyone. </span><br /></div></div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-19302879.post-1147763493973474952006-05-16T12:21:00.000+05:302006-05-16T12:41:51.423+05:30<div style="text-align: center;"><span style="font-size:130%;"><span style="font-weight: bold;">Google Notebook is Out </span><span style="font-size:100%;"><br /><br /></span></span><div style="text-align: left;">Today google released <a href="http://www.google.com/notebook/">Google Notebook.</a> I liked this service much. Usually i save some important information as drafts in my email. Now i can use this online notebook service. Cool thing about google notebook is, select what ever you want in your browser right click and you can save directly. For this you have to download a plugin for your browser. For firefox you can download the plugin <a href="http://dl.google.com/firefox/google-notebook.xpi">here</a>. For internet explorer you can download it <a href="http://dl.google.com/notebook/GoogleNotebookSetup.exe">here</a>.<br /><br />Alternatively the same time of service is there from <a href="http://notepad.yahoo.com">yahoo</a> long back. But i find google notebook more useful because of its simplicity. More over in yahoo <a href="http://notepad.yahoo.com">notepad</a> you can not save html pages and images.<br /><br />Sony today released a beautiful pocket size personal computer called VAIO. You can find photos of it <a href="http://news.com.com/2300-1041_3-6072576-1.html?part=rss&tag=6072576&subj=news">here</a>.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://news.com.com//i/ne/p/2006/vaio1_550x385.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://news.com.com//i/ne/p/2006/vaio1_550x385.jpg" alt="" border="0" /></a><br /></div><span style="font-size:130%;"><span style="font-size:100%;"></span></span></div><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-19302879.post-1147600145880952192006-05-14T15:14:00.000+05:302006-05-14T15:19:06.196+05:30<div style="text-align: center;"><span style="font-size:130%;"><span style="font-weight: bold;">Create Your Own News Paper Snippets </span><span style="font-size:100%;"><br /></span></span><div style="text-align: left;"><br />Create your own news paper snippet like the following page with "<a href="http://tools.fodey.com/generators/newspaper/snippet.asp">a newspaper snippet generator</a>".<br /></div><span style="font-size:130%;"><span style="font-size:100%;"></span></span></div><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4767/685/1600/newspaper.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/4767/685/320/newspaper.jpg" alt="" border="0" /></a><div class="blogger-post-footer"><script type="text/javascript"><!--
google_ad_client = "pub-0162311501174955";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>Unknownnoreply@blogger.com0