<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5313465032461562592</id><updated>2011-08-05T14:26:41.279-05:00</updated><category term='sine'/><category term='linux'/><category term='mail'/><category term='distributed'/><category term='emacs'/><category term='engineering'/><category term='security'/><category term='blah blah'/><category term='perl'/><category term='malware'/><category term='graphics'/><category term='Austin'/><category term='security tool'/><category term='communication'/><category term='signal'/><category term='philosophy'/><category term='sendmail'/><category term='computers'/><category term='networks'/><category term='futuristic'/><category term='physical'/><category term='disks'/><category term='sensors'/><category term='wireless'/><category term='internet'/><category term='virus'/><category term='script'/><category term='fourier'/><category term='automate'/><category term='gimp'/><category term='editing'/><category term='email'/><category term='ubuntu'/><category term='cron'/><category term='correlation'/><category term='xp'/><category term='phy layer'/><category term='hardware'/><category term='bitmap'/><category term='faith?'/><title type='text'>My Signal and Noise</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-2138906967280184326</id><published>2009-11-16T19:56:00.012-06:00</published><updated>2009-11-16T22:52:58.247-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virus'/><category scheme='http://www.blogger.com/atom/ns#' term='malware'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='security tool'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Getting rid of the "Security Tool" Virus from Windows XP  or how Ubuntu saved the day</title><content type='html'>I recently had my first Windows Virus experience: A friend caught on to the &lt;a href="http://www.google.com/search?q=security+tool+virus"&gt;"Security Tool" virus&lt;/a&gt; from the Internet while downloading free mp3 songs. This post is about how to remove the virus files, but basically, its a case-in-point about removing any stubborn or harmful Windows files or copying them out. &lt;br /&gt;&lt;br /&gt;This software is a really nasty piece of code, it resembles a genuine anti-virus/anti-spyware tool, tempting users to click on it. It makes the system really sluggish, even worse, it changes the &lt;a href="http://en.wikipedia.org/wiki/Windows_Registry"&gt;registry files&lt;/a&gt;. I also found that it had corrupted the &lt;a href="http://en.wikipedia.org/wiki/Master_boot_record"&gt;Master Boot Record &lt;/a&gt;(though this may have been because of multiple hard resets). &lt;br /&gt;&lt;br /&gt;The virus files basically sit in a folder with the following path:&lt;br /&gt;&lt;br /&gt;C:\Documents and Settings\All Users\Application Data\[random numbers]\&lt;br /&gt;&lt;br /&gt;So this is the folder that needs to be removed.&lt;br /&gt;&lt;br /&gt;There are available programs that will remove Security Tool, but this presumes that the system is responsive enough to allow you to download the anti-malware, and that it boots up fine in the safe mode. These programs are a easier way to go forward if these two conditions are met. &lt;br /&gt;&lt;br /&gt;However, the computer I worked on, was beyond that point, getting the blue screen of death on every boot. It was more important to get all the useful data out to some external storage, since the data was not backed up.&lt;br /&gt;&lt;br /&gt;So, we had, &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; to the rescue. The idea is to create a bootable CD of Ubuntu, which is one of the best Linux distributions, and then boot from the CD. (This requires your BIOS setting to have CD as a preferred boot device to the Hard disk, but that's normally the case in most computers - In case its not, this can be changed. Here's &lt;a href="http://www.tomshardware.com/reviews/windows-pocket,1113-3.html"&gt;how&lt;/a&gt;) &lt;br /&gt;&lt;br /&gt;Once Ubuntu has booted from CD, next step is to mount the Windows Hard disk drive. This can be done using the terminal(Here's &lt;a href="http://www.techonthenet.com/linux/mount.php"&gt;how&lt;/a&gt;) for those more comfortable with it, or with the Disk Manager Utility in System Administration(Here's &lt;a href="http://ubuntuguide.org/wiki/Ubuntu:Karmic"&gt; Ubuntu Manual&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Once mounted, copying data out to an external disk, or deleting files will look familiar to most of the us used to pretty GUIs.&lt;br /&gt;&lt;br /&gt;So why not Windows recovery console? I tried, it did not seem to work well for me.&lt;br /&gt;&lt;br /&gt;Does this work when Windows has an administrative password? I don't know for sure, but it should. I had a dual boot system that had admin password for Windows, but that never stopped the Linux distro from reading/writing files there. &lt;br /&gt;&lt;br /&gt;Lessons to learn? Stay safe on the Internet, and backup data frequently.&lt;br /&gt;&lt;br /&gt;Thoughts? Makes me uneasy about how easy it may be to steal files from random unattended computers,I wonder what can be done about it (Have the hard disk password protected?).. Also, May be Windows Vista or Windows 7 is safer, with stricter control on what gets installed..&lt;br /&gt;&lt;br /&gt;Acknowledgments? a gifted collaborator, my liege lord, and my close friend, who gave me my learning platform.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-2138906967280184326?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/2138906967280184326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=2138906967280184326' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/2138906967280184326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/2138906967280184326'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2009/11/getting-rid-of-security-tool-virus-from.html' title='Getting rid of the &quot;Security Tool&quot; Virus from Windows XP  or how Ubuntu saved the day'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-8007305647288758331</id><published>2009-11-11T19:43:00.012-06:00</published><updated>2009-11-11T20:23:21.318-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='physical'/><category scheme='http://www.blogger.com/atom/ns#' term='sine'/><category scheme='http://www.blogger.com/atom/ns#' term='correlation'/><category scheme='http://www.blogger.com/atom/ns#' term='signal'/><category scheme='http://www.blogger.com/atom/ns#' term='phy layer'/><category scheme='http://www.blogger.com/atom/ns#' term='fourier'/><title type='text'>On Confirming Sine Waves</title><content type='html'>I was recently asked what was the best way of confirming that a given measured waveform was a sine wave. It was a simple question, but that got me thinking...Its easy enough to eyeball a waveform and give a quick judgment, but when one really has to be sure, how to go about this?&lt;br /&gt;&lt;br /&gt;If the frequency of the expected sine waveform is known, One method would be, to take the &lt;a href="http://en.wikipedia.org/wiki/Cross-correlation"&gt;cross-correlation&lt;/a&gt; between the measured signal and the ideally expected one.&lt;br /&gt;&lt;br /&gt;But the most foolproof way, is to take the &lt;a href="http://en.wikipedia.org/wiki/Fourier_transform"&gt;fourier transform&lt;/a&gt; of the waveform. This gives a lot more information than the correlation, it actually tells you what all frequencies make up your wave. &lt;a href="www.mathworks.com/ "&gt;Matlab&lt;/a&gt; has an implementation of the &lt;a href="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/fft.html"&gt;fast fourier transform&lt;/a&gt; (called fft for short).&lt;br /&gt;&lt;br /&gt;The fourier transform of a sine wave of a frequency f, is two &lt;a href="http://en.wikipedia.org/wiki/Dirac_delta_function"&gt;dirac delta&lt;/a&gt; functions of half the amplitude of the original wave. When plotted on a frequency vs. amplitude plot, they show up as two lines at f, -f with half the amplitude of the original wave. &lt;br /&gt;&lt;br /&gt;The Fourier Transform method, however, also has to caveats. The fourier transform function expects an infinite waveform as an input. The measured signal would be anything but that (because of equipment limitations/practicality). Hence, a &lt;a href="http://en.wikipedia.org/wiki/Window_function"&gt;windowing function&lt;/a&gt; is needed to attenuate the edges. The other gotcha is, that sometimes, Harmonics of a single frequency will show up on the fourier transform, i.e. spectral lines at 1f, 2f etc if f was your expected frequency. In such cases, the amplitude of the main f frequency spectral line to the other harmonics' amplitude serves as a good indicator of how good the signal is.&lt;br /&gt;&lt;br /&gt;This post diverts from my other more systems-like posts, but I just realised that this is hands-on stuff, that probably doesn't get published anywhere, and hence noteworthy.&lt;br /&gt;&lt;br /&gt;p.s. There's also a C implementation of the Fast fourier transform from MIT. Cheekily, its called the &lt;a href="http://www.fftw.org/"&gt;fastest fourier transform in the west(FFTW)&lt;/a&gt; :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-8007305647288758331?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/8007305647288758331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=8007305647288758331' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/8007305647288758331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/8007305647288758331'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2009/11/on-confirminng-sine-waves.html' title='On Confirming Sine Waves'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-1961357148585098347</id><published>2009-10-24T10:07:00.004-05:00</published><updated>2009-10-24T10:15:26.175-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='physical'/><category scheme='http://www.blogger.com/atom/ns#' term='networks'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless'/><category scheme='http://www.blogger.com/atom/ns#' term='communication'/><category scheme='http://www.blogger.com/atom/ns#' term='phy layer'/><title type='text'>Tutorial on Communication Principles</title><content type='html'>Being a software person in Computer Networks, sometimes the physical layer details of communication (for example, &lt;a href="http://en.wikipedia.org/wiki/Orthogonal_frequency-division_multiplexing"&gt;OFDM&lt;/a&gt;) look really hairy and not to be messed around with.&lt;br /&gt;&lt;br /&gt;I found a good set of tutorials, that explains, intuitively - a lot of physical layer concepts of what all needs to go on when we send messages between computers, here:&lt;br /&gt;&lt;a href="http://www.complextoreal.com/tutorial.htm"&gt;&lt;br /&gt;http://www.complextoreal.com/tutorial.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Take a look, the analogies they have with real life make it easy for concepts to penetrate in and stay there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-1961357148585098347?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/1961357148585098347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=1961357148585098347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/1961357148585098347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/1961357148585098347'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2009/10/tutorial-on-communication-principles.html' title='Tutorial on Communication Principles'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-8779385528466880240</id><published>2009-10-06T11:28:00.010-05:00</published><updated>2009-10-09T20:56:35.849-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='sendmail'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='cron'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><category scheme='http://www.blogger.com/atom/ns#' term='automate'/><title type='text'>On sending automated emails</title><content type='html'>For some time now, I have come across a trivial but annoying problem: I have to send out some periodic emails to admins, to inform them that I'd be utilizing certain resources. But writing the same email every time is painful to say the least.&lt;br /&gt;&lt;br /&gt;So here's a little trick to automate the sending task on Linux, provided that the sendmail program has been installed (it mostly is). One way to test that is to send a fake email to yourself, by checking if you received it. On a terminal, type:&lt;br /&gt;&lt;br /&gt;echo "did I get this?"| mail -s "test" yourName@yourDomain.com&lt;br /&gt;&lt;br /&gt;If you do get the email message with subject "test" and content "did I get this", then the first step towards automated emails is to type out the email content  and save it in to a file (which we call emailContent here). The rest is easy: the command to send it is the following:&lt;br /&gt;&lt;br /&gt;mail -s "SubjectOfTheEmail" recipient1@someDomain.com recipient2@someDomain.com &lt; emailContent&lt;br /&gt; &lt;br /&gt;The line above can be added to &lt;a href="http://en.wikipedia.org/wiki/Shell_script"&gt;shell script&lt;/a&gt;, which can then be executed whenever necessary.   What is even cooler, is that now email can be sent from a program written in a scripting language (like &lt;a href="http://en.wikipedia.org/wiki/Perl"&gt;Perl&lt;/a&gt;) by simply calling the script.&lt;br /&gt;&lt;br /&gt;For the extremely lazy sorts, even the execution of the shell script can be automated, using the &lt;a href="http://en.wikipedia.org/wiki/Cron"&gt;cron job scheduler&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;More information on mail, cron can be obtained from the man pages (type 'man mail' or 'man cron' on a terminal) or google for them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-8779385528466880240?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/8779385528466880240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=8779385528466880240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/8779385528466880240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/8779385528466880240'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2009/10/on-sending-automated-emails.html' title='On sending automated emails'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-864133270086501</id><published>2008-11-26T09:58:00.004-06:00</published><updated>2008-11-26T10:09:29.081-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='disks'/><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>1 TB quirks</title><content type='html'>I have started using one terabyte disks for storing some of  my data. And, only lately have I started realizing the size it represents.&lt;br /&gt;&lt;br /&gt;One of my machines started behaving funny (would not let you create files) even though the disk was only 63% full. Further investigation by wiser heads than mine revealed that the ext3 filesystem I was using ran out of inodes, just when the disk was about half full...&lt;br /&gt;&lt;br /&gt;There are few things that can be done now, given that there is substantial data in the disk, and cannot be formatted anytime soon.. note to me: 1 Terabyte disks run out of inodes way before they run out of disk space on ext3. Next time, they should be split into two partitions of 500GB each to manage the filesystem info..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-864133270086501?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/864133270086501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=864133270086501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/864133270086501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/864133270086501'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2008/11/1-tb-quirks.html' title='1 TB quirks'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-670157913851776395</id><published>2008-10-23T09:14:00.001-05:00</published><updated>2008-10-23T09:15:45.272-05:00</updated><title type='text'>Chill is back :)</title><content type='html'>Temperatures dip below 10 degrees for the first time this fall.&lt;br /&gt;I like it :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-670157913851776395?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/670157913851776395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=670157913851776395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/670157913851776395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/670157913851776395'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2008/10/chill-is-back.html' title='Chill is back :)'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-7494328638131323068</id><published>2008-09-04T10:54:00.005-05:00</published><updated>2008-10-08T22:18:49.361-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><title type='text'>Distributed 101: How to write large distributed programs</title><content type='html'>Lately, I have been involved in writing some huge distributed programs, that run on hundreds of machines. Its a known fact that writing such programs is non-trivial, but just how non-trivial is something that is not understood till one actually attempts to do so. Here are some of the lessons that I learned (the hard way), which make life a bit easier, lest I forget again (Not likely to ;-), its been a lot of pain).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Log everything:&lt;/span&gt; The first thing that everyone knows about computers is  that they act weird sometimes, and the more computers you have, more likely it is that things go wrong. Logging what goes on is the one and only way that you can actually get to know what went wrong where, specially when dealing with a huge number of machines, since it is impossible to be monitoring all machines at once by hand.  &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;2. Making code restartable and idempotent:&lt;/span&gt; Closely tied to the point above, it makes life a lot easier if the code is restartable and idempotent; This becomes important when machines die off in the middle of a lengthy process; Having the ability to restart processes again makes it relatively painless to manage machines. Log serves as a useful way of knowing exactly where the process was when it died off; reading log serves as a useful feedback mechanism.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;3. Keeping synchronization to a minimum:&lt;/span&gt; &lt;span&gt;When multiple unreliable machines have to co-ordinate with each other, life becomes hard. That's when you understand that animal-trainers have a tough job ;-) . If it is possible, it is much better to divide a complex job such that each computer works on an independent chunk of the whole, rather than working on parts that need to be passed around.  &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;4. Taking Advantage of Memory: &lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Disks are slow - really, really slow, when compared to memory. While you'd think that you can take it or leave it for small programs, for large programs, the amount of disk you touch has a significant impact on performance. It is always a good idea to take advantage of the large amounts of memory available to most computers today.&lt;br /&gt;&lt;br /&gt;So, touching one disk file instead of many small ones is better (because the &lt;a href="http://www.faqs.org/docs/linux_admin/buffer-cache.html"&gt;buffer cache&lt;/a&gt; of the operating system kicks in, to read ahead from disk to memory in anticipation)&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;, &lt;/span&gt;&lt;span&gt;but best would be to gobble the entire file in memory explicitly before processing.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;The tricky part is writing:if you process too much without committing to the disk, you run the risk of losing all your computation if the computer fails. On the other hand, very frequent writing is bound to cost in terms of performance. This is a very delicate balance to achieve, but with the CPU speeds we have, my own rule of thumb is to  favour repeating computation rather than frequent writes.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;5. Reducing communication costs: &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Communication setup costs sometime dominate the cost of actual connection. For example, setting up an ssh or an scp session is quite expensive(~1 sec to establish connection?). Considering this, it is better to optimize the amount of data transferred per communication setup.&lt;br /&gt;&lt;br /&gt;So&lt;a href="http://en.wikipedia.org/wiki/Secure_copy"&gt; secure copying&lt;/a&gt; a &lt;a href="http://en.wikipedia.org/wiki/Tar_%28file_format%29"&gt;tarred&lt;/a&gt; directory is better than transferring the contents of the directory one by one..&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6. Algorithms Matter:&lt;/span&gt; The lesson is, that the easiest way to code a problem may not be most efficient, and efficiency counts for long running jobs.&lt;br /&gt;&lt;br /&gt;As a very vivid example, I came across some code that a friend had written that inserted entries into a database table. For those not in the know, a database table has a primary key (a number) to identify each row (just like the row numbers that MS Excel has).&lt;br /&gt;&lt;br /&gt;However, the code to insert a row (or tuple as a purist would put it) was written such that, it read through all previous rows to find the last row number, and insert the new row with the largest row number+1.  So each time one needs to insert the nth row, all n-1 rows have to be read. One can quickly see how this would ruin the performance of inserts. With this algorithm, it would take the code 2.5 hours to insert 10,000 entries into the table.&lt;br /&gt;&lt;br /&gt;After changing the algorithm, so that the last primary key was stored in another table, the algorithm improved substantially - just how substantially? It inserted 10,000 entries in under 30 seconds!&lt;br /&gt;&lt;br /&gt;So its much better to go for something slightly more painful, if its algorithmically better. Specially considering that you'd probably deploy the code in multiple machines, and its hard to change code again and again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-7494328638131323068?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/7494328638131323068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=7494328638131323068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/7494328638131323068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/7494328638131323068'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2008/09/distributed-101-how-to-write-large.html' title='Distributed 101: How to write large distributed programs'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-8454327605134581512</id><published>2008-07-07T01:45:00.007-05:00</published><updated>2008-07-16T23:17:08.364-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless'/><title type='text'>Wireless (In)Security</title><content type='html'>I had a verry interesting experience when I was setting up wireless network for a close friend.  It goes on to show how lightly people take their wireless networks, and that we are still very far from the ideal secure networks..&lt;br /&gt;&lt;br /&gt;Soooo the story starts this way: I lend my linksys WRT54G router to this friend for her house, since my new house already has a router. I don't have the driver cd, but thats not an unsurmountable problem, since most routers allow you to log in to them using wirelessly, by using a web browser and directing it to the router's IP address. So far so good: only, I forget the router's password that I had set up a long while back.&lt;br /&gt;&lt;br /&gt;Even this is something that must be fairly common, since almost all routers come with a reset switch,  that completely brainwashes the router and resets it to the default value. The user name and password are standard for manufactures:for example, linksys uses a blank user name and "admin" as the password (This is not a secret :) ).&lt;br /&gt;&lt;br /&gt;Well, armed and comforted by this, I go ahead and reset the router. It reboots again, to bring up the default wireless network called "Linksys" on wireless channel 6. So far, so good. Next step, to log in to the router and set up the network. The Default router address is 192.168.1.1. So I hit "http://192.168.1.1" in firefox to have the log in dialog come up..  I enter the default user name and password, and I wait for the management page to come up: It sure does, but it takes time.. fishy, Since I am sitting right next to the router, so there shouldn't be any packet losses ( Delay is normally because of the packet losses; packet losses occur normally because the signal is attenuated a great deal before it comes to the laptop and laptop can't understand what is being whispered)&lt;br /&gt;&lt;br /&gt;Hmm.. I think, may be my router is rusted..then again, being a software person (and having more faith in hardware people than us software folks), I think that I should check the Signal-to-noise ratio to see if the signal to the laptop is really that low or if its something wrong with the laptop, or just if its a momentary jitter in signals (Such jitters happen all the time, since many devices operate in the same frequency band). Soo I fire up the old reliable Network Stumbler, to see the networks that my machine can hear, and their summary (&lt;span style="font-weight: bold;"&gt;See screenshot below&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_IAUMayFkSW4/SH7Hizu46TI/AAAAAAAACj4/zbJGGzAnYoE/s1600-h/scrnshot_processed.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_IAUMayFkSW4/SH7Hizu46TI/AAAAAAAACj4/zbJGGzAnYoE/s200/scrnshot_processed.jpg" alt="" id="BLOGGER_PHOTO_ID_5223832018612709682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And here comes the punch line: to my horror, I see two Linksys networks!! aah... there is some person who is running a Linksys network in the neighbourhood. This sets my pulse beating: Did I get into the other person's router by mistake? Only one sure way to check it: I bring up the MAC address of the router on the management page, and check it against the one that is labelled on the back side of my router. (For those not in the know, A MAC address is an address that each network device has, that uniquely identifies the device in the whole wide world). They don't match: I am into someone else's router; I wouldn't imagine in my dreams that it would be so easy to hack into a router..I  cautiously back out -- making sure that I disturb none of his/her settings..&lt;br /&gt;&lt;br /&gt;I speculated on what must have happened:&lt;br /&gt;&lt;br /&gt;&gt;I asked my laptop to connect to Linksys just before my finished booting and the network came up, it connected to the other linksys in the meanwhile.&lt;br /&gt;&lt;br /&gt;&gt;The other networks' router had the default router address 192.168.1.1&lt;br /&gt;&lt;br /&gt;&gt;The other networks' router was lying wide open, with the default user name and password, and hence I got into it..&lt;br /&gt;&lt;br /&gt;Hmm: someone kept a password that you knew: whats the big deal? its just a router right? It is, and thats whats so scary: Here's what I could have done if I wanted to do mischief.. I could have completely hijacked the person's network if I was malicious:&lt;br /&gt;&lt;br /&gt;- I could have changed the network name to something else and the channel on which it works, so that that person wouldn't have a clue about where his network disappeared. A lay person would think that his router died, while someone else would be happily using it. The only way to detect a hijacked router would be to use network stumbler and see if MAC addresses of any of the broadcasting networks match the one on the backof his router.&lt;br /&gt;&lt;br /&gt;- I could change the default IP address of the router and then that person would have to figure out what was the routers address amongst thousands, to be able to do any changes..without resetting it.&lt;br /&gt;&lt;br /&gt;- I could change the router password: this would make it impossible for the person owning the network to log in to the router, except by resetting it.&lt;br /&gt;&lt;br /&gt;- I could make the network secure by turning on encryption, which would make it very hard for that person to connect to it&lt;br /&gt;&lt;br /&gt;- I could leave the network open for the person to use, but could use the logging mechanism to get details on what any other user on the network is seeing.&lt;br /&gt;&lt;br /&gt;All of these are scary possibilities. And its easily avoidable: stay away from the defaults.&lt;br /&gt;More to come on this :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-8454327605134581512?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/8454327605134581512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=8454327605134581512' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/8454327605134581512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/8454327605134581512'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2008/07/wireless-insecurity.html' title='Wireless (In)Security'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_IAUMayFkSW4/SH7Hizu46TI/AAAAAAAACj4/zbJGGzAnYoE/s72-c/scrnshot_processed.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-3473675457052952246</id><published>2008-05-12T08:30:00.000-05:00</published><updated>2008-05-12T23:14:48.289-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='futuristic'/><category scheme='http://www.blogger.com/atom/ns#' term='faith?'/><category scheme='http://www.blogger.com/atom/ns#' term='sensors'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless'/><title type='text'>of tiny mirrors and bits</title><content type='html'>Recently I read about a technology being worked upon in UC Berkeley that combines digital circuitary, wireless communication and Micro-electronics for mechanical devices. This project is called "smart dust" - which is pretty much that, thousands of really tiny sensors that can just be thrown in any area of interest, to measure and collect data.&lt;br /&gt;&lt;br /&gt;The really cool part of smart dust is that these dust particles can transmit information passively. They have a mirror like component whose angle can be changed by tiny motors in response to external stimulus. Then to "transmit" information, you just need to throw light at them. Sounded like sci-fi to me -- How do you make such electromechanical devices that work to such precision?&lt;br /&gt;&lt;br /&gt;Then I came across another bit of technology that does something very similar with mirrors. This is the proprietary &lt;a href="http://en.wikipedia.org/wiki/DLP"&gt;DLP technology&lt;/a&gt; owned by Texas Instruments and used in Projectors. It basically consists of a matrix of really tiny mirrors, each mirror representing a pixel. Different angles of mirror positions give different colours, controlled electromechanically with very high precision.&lt;br /&gt;&lt;br /&gt;So while we may not soon be seeing a huge room full of tiny smart dust particles, tracking one's movements as we walk, changing the wall colours after measuring the facial expression and mood (??) , it certainly looks like a possibility for the future..A lesson to me that things are not sometimes as bleak as they seem :-/.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-3473675457052952246?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/3473675457052952246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=3473675457052952246' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/3473675457052952246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/3473675457052952246'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2008/04/of-tiny-mirrors-and-bits.html' title='of tiny mirrors and bits'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-5828919305829399345</id><published>2008-04-04T08:12:00.002-05:00</published><updated>2008-04-04T08:16:03.439-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Austin'/><title type='text'>Hailstorm in Austin!</title><content type='html'>As I have my breakfast,  an early morning show to go with that. I see the second hailstorm that I have ever seen in my life; cars start sounding burglar alarms as hailstones hit them. What fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-5828919305829399345?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/5828919305829399345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=5828919305829399345' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/5828919305829399345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/5828919305829399345'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2008/04/hailstorm-in-austin.html' title='Hailstorm in Austin!'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-3095962462810186773</id><published>2008-03-28T12:57:00.016-05:00</published><updated>2008-03-30T06:41:35.483-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless'/><title type='text'>On managing home wireless networks</title><content type='html'>My roommates were complaining that the wireless network at our place was finicky these days. So I decided to do some wireless network troubleshooting. There were two distinct possibilities: either the wireless router was causing the mischief or the network was seeing a lot of interference from other neighbouring networks (I live in an apartment, and my card senses around 13-14 networks all the time). I have more faith in hardware than in networks, so I decide to investigate  the network health first. I write this entry as a summary of my experiences in setting up and maintaining wireless networks.&lt;br /&gt;&lt;br /&gt;First a very brief intro about the wireless networks: the protocol that our wireless networks use is called 802.11 and comes in various flavours, which roughly decides (if we think of wireless communication as speaking) at what pitch we talk to our routers. The most common ones are 802.11b/g which work around 2.4GHz frequency band and 802.11a which runs at 5 GHz band. 802.11 b/g are more prone to noise because many other devices (microwave being the most significant of them) run in the same frequency band and create interference (shouts so that router can't hear what laptops are saying). 802.11a has its own faults, noticeably the fact that it has a smaller range than 802.11b/g. My own router is a b/g router.&lt;br /&gt;&lt;br /&gt;In each "band" there are many frequency channels: think of them as languages in which you can speak. The router and your  laptop should agree on which language they are going to talk apriori. In the 2.4 GHz band, there are 11 channels. Some channels overlap: this is bad, if two languages sound the same sometimes, it may be hard to figure out what is being said. Channel 1,6 and 11 are the only non-overlapping channels in 802.11b/g, so most routers pick one of these channels as default when setting up the network for the first time. If a neighbouring network runs on a different (and non-overlapping) channel, it does not cause interference; if however, it does run on the same channel, thats bad: this means some other machines are speaking in the same language that you understand (and you need to shut up while they speak to their routers.)&lt;br /&gt;&lt;br /&gt;Phew! with all that physics out of the way, lets get our hands dirty: first thing to do, figuring out which networks are the closest (most heard) in the apartment apart from my own, and what channel they use: I stumbled upon (not literally :) ) a nifty little piece of software that gives me that information: its called &lt;a href="http://www.netstumbler.com/"&gt;network stumbler&lt;/a&gt;. It tells me the Signal strength, Signal to noise ratio and channel for each network SSID (name) that my laptop can hear. (&lt;b&gt; Click on the screenshot below to get an enlarged view &lt;/b&gt;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_IAUMayFkSW4/R-06wpk9ugI/AAAAAAAABpA/LJjfn2bBJuU/s1600-h/networkscreenshot.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_IAUMayFkSW4/R-06wpk9ugI/AAAAAAAABpA/LJjfn2bBJuU/s320/networkscreenshot.JPG" alt="" id="BLOGGER_PHOTO_ID_5182863353642334722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The fields of interest are : address of router, SSID(name) of network, channel number, data rate, encryption technique, Signal to noise ratio (SNR), Signal strength in that order.&lt;br /&gt;&lt;br /&gt;First field to look at is signal strength: I have arranged it in an increasing order of signal strength:so the last network is mine( which now runs on channel 1: earlier it ran on channel 6 before I troubleshooted) The closest interferers(previous two entries) run in channel 9 and 6, in that order. (this screenshot was taken from my room where the router is, all our wireless problems were in the other bedroom) When my network was on channel 6, in the other bedroom, the other channel 6 network (3rd from bottom) was having a high signal strength and was degrading the SNR for my network. Another point that this screenshot illustrates: there are so many networks that run on channels 11 and 6, so likelyhood of running into noise there is more.&lt;br /&gt;&lt;br /&gt;My network is much faster(I got a 30Kbps jump in downloads) and more reliable now, though it has to stand the test of time: here are some of the points that I have extracted out which may be of help when configuring wireless networks:&lt;br /&gt;&lt;br /&gt;- Have some sort of encryption: Wireless security is mocked at by many, but having an encrypted network prevents squatters from just hooking on to your network and slowing things down for legitimate users.&lt;br /&gt;&lt;br /&gt;- Avoid the overlapping channels(all except 1,6,11) if possible (however, go for them if all non-overlapping ones are heavily used in the neighbouring networks)&lt;br /&gt;&lt;br /&gt;- Avoid channels 7-10 in general and 9 in particular: channel 9 operates at 2.452 GHz - very close to the natural resonant frequency of water. While microwaves are supposed to contain the radiation, its enough to cause packet drops (I tried :) -- I configured to channel 9 and had milk -- the SNR just collapsed!!) Channels 7-10 all experience some noise as microwave frequency is not always steady.&lt;br /&gt;&lt;br /&gt;- Try&lt;a href="http://en.wikipedia.org/wiki/Frame-bursting"&gt; frame bursting&lt;/a&gt; to see if that helps, in uploads. It reduces the overhead, and most routers have it built in. This might require some networking skills; it would be one of the advanced settings, and may not have a nice GUI interface, and require manual turning on by logging into the router.&lt;br /&gt;&lt;br /&gt;- Check channels when there's sudden degradation in performance. This is quite tedious, having to do this manually (unless you're crazy about networks, like me: then its a welcome distraction :) ).  It would be quite nice if the routers were smart enough to figure out the right channel to talk on. I think this is now a draft (802.11h? -- not sure) standard, so in future we might see smarter routers and wireless cards that know what language to speak!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-3095962462810186773?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/3095962462810186773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=3095962462810186773' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/3095962462810186773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/3095962462810186773'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2008/03/on-managing-home-wireless-networks.html' title='On managing home wireless networks'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_IAUMayFkSW4/R-06wpk9ugI/AAAAAAAABpA/LJjfn2bBJuU/s72-c/networkscreenshot.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-7977900511537878965</id><published>2008-03-23T12:20:00.004-05:00</published><updated>2008-03-23T23:07:04.634-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless'/><category scheme='http://www.blogger.com/atom/ns#' term='blah blah'/><title type='text'>Managing Complexity in (ahm) Complex Systems..</title><content type='html'>As I think about wireless networks, my mind goes into philosophical overdrive :) .  Most systems are complex because we want some level of performance (performance in a very very broad sense -- performance for a building may mean how long it can withstand certain winds), and Its much simpler to make stuff that doesn't work so well than the one which does. Yet at the same time, we'd like to keep things simple enough for designers/maintainers.&lt;br /&gt;&lt;br /&gt;I do speak in a computers context to begin with, and I am limited to my myopic world view -- I'll be grateful if my smarter friends in more diverse fields speak their mind; after all anything that does a good job is complex: good buildings/circuit systems/biological systems/economy..&lt;br /&gt;&lt;br /&gt;I guess the only way to manage complexity is to break a complex system into more manageable chunks. There are really two ways of breaking up a system: vertically, with each "piece" performing some task and interacting with other pieces, or go for a layering paradigm -- starting from a 10,000 foot view and delving deeper slowly and considering the "view" at that level.&lt;br /&gt;&lt;br /&gt;From a Biology point of view (with my very limited high school knowledge), breaking up vertically would have to mean the way we attribute "functions" to organs (or even cell components like whatsitsname.. um Mitochondria) and then talk about each organ as an "entity" and its interactions with other entities. This makes it easy to categorize stuff into neat compartment = (function,interaction) pairs. Another example would be the &lt;a href="http://en.wikipedia.org/wiki/Von_Neumann_architecture"&gt;Von Neumann Architecture for computers  .&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When thinking of layering (the most obvious example that would come to me would be the network stack but we'll save that for later :P ), one good example would be the memory hierarchy in computers, where you worry about interactions only between adjacent layers while designing.&lt;br /&gt;&lt;br /&gt;When data travels from disk to CPU, it goes through the following path (in most cases)&lt;br /&gt;&lt;br /&gt;Hard disk --&gt; main memory --&gt; cache --&gt; on chip cache --&gt; registers&lt;br /&gt;&lt;br /&gt;and the same way back when data is to be stored into hard disk..&lt;br /&gt;&lt;br /&gt;I have thought hard about this, but I can't think of a "natural" (occurring in nature, like evolutionary, biological) example of this kind of layering, and I'll be obliged to anyone who points one out for me, but I think I have a clue as to why this kind of layering is not visible in nature.&lt;br /&gt;&lt;br /&gt;Now for the whole crux of my point -- I think, designing with vertical partitioning gives us performance, while going for a layering paradigm sacrifices performance for ease of manageability in design and maintenance.&lt;br /&gt;&lt;br /&gt;If you break up functionality into vertical components, each component can be rigged up to give the best possible performance internally, only the interface with other components need be maintained. For example, If CPU and memory are two independent units, each can be rigged up internally to give the best possible performance, as long as they can "talk" to each other(maintain the interface). The only catch is, since you can rig it up as much as you'd like, these components themselves tend to be very complicated (think CPU)&lt;br /&gt;&lt;br /&gt;Imagine a computer where cache coherency algorithm depends on hard disk drive head position. One can envisage that it may lead to improvement in performance, (For example, off top of my head, An optimization (assuming all data in cache goes from cpu to disk): Evict data from cache in order of disk head position, to reduce disk latency), but writing the disk driver and the cache coherency algorithm would be (ahm.. to put it mildly) crazy. Also imagine, then we would have problems like a particular disk drive not working with a certain chipset. This may sound vague, but isn't as remote as all that: think cameras and non AA battery sizes: Non AA batteries are smaller/lighter in weight but then the camera has to be charged &lt;span style="font-style: italic;"&gt;in situ&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I speculate that we don't see this layering in nature is because, nature doesn't care about ease of design -- it has infinite chances of getting it right (by trying our random combinations by way of mutations and evolution) , or maintenance-- after all what price one creature?Perhaps thats why medicine is so hard..&lt;br /&gt;&lt;br /&gt;Its a known fact that for various reasons our Wireless networks don't perform as well as the wired networks - they are generally slower, more error prone than the ones which we wire down. Some of this is because the "channel" we transmit in isn't as reliable (bit error rates are much higher in air than in a co-axial cable),  but thats not all -- We are dragging the dead weight of our engineering decisions of wired networks (Our design for wired networks had assumptions that don't hold for wireless networks).&lt;br /&gt;&lt;br /&gt;Networks have followed a Layered architecture(TCP/IP) all this while, to manage the crazy complexity of making any two (possibly radically) different machines communicate over versatile links (dial up, broadband, submarine cables,satellite links and even pigeon post I hear) across huge distances in the world. Because of the wireless performance problems that we have, more and more people are saying that layering should be sacrificed for  more tightly coupled cross layer solutions. . I have even come across work where people do power aware(at physical layer) encryption (at application layer) to squeeze every bit of performance out!&lt;br /&gt;&lt;br /&gt;The open question is, where is the sweetspot between performance and manageability for wireless networks? Are we at a cornerstone right now? The same kind of tipping point came for operating systems sometime in the 70s, when clean, layered but slow operating systems were abandoned for the better performing ugly ones.&lt;br /&gt;&lt;br /&gt;Maybe this post is too vague, the ideas are wrong/trivial/uninteresting or plain gibberish and unfit for human consumption -- but what the heck! :) If you've got some enlightening thoughts, I'd love to hear them, (even if all you've got to say is that I'm insane and should quit inflicting blog posts on innocent people)... :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-7977900511537878965?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/7977900511537878965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=7977900511537878965' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/7977900511537878965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/7977900511537878965'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2008/03/managing-complexity-in-ahm-complex.html' title='Managing Complexity in (ahm) Complex Systems..'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-7319507499801108616</id><published>2008-03-17T16:37:00.001-05:00</published><updated>2008-03-21T08:57:14.009-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='bitmap'/><title type='text'>Justifying the  GIMPressionist</title><content type='html'>A close friend complained after looking at the previous GIMPressionist work that it looks like I just blurred the image/added jaggies :). A very valid criticism. So here I try to better that and justify my GIMP skills :) .. Note that a painting would never be as sharp as a photo, so some blurring is expected.&lt;br /&gt;&lt;br /&gt;So here's another shot at it( &lt;b&gt; click on images to enlarge &lt;/b&gt;):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_IAUMayFkSW4/R97n3GQD6XI/AAAAAAAABm0/TPG89F-sOvs/s1600-h/flower_compressed.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_IAUMayFkSW4/R97n3GQD6XI/AAAAAAAABm0/TPG89F-sOvs/s320/flower_compressed.JPG" alt="" id="BLOGGER_PHOTO_ID_5178831555279448434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And the GIMPressionist ones follow:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_IAUMayFkSW4/R97pbGQD6aI/AAAAAAAABnM/SNl60Tb0m2g/s1600-h/flower_bubblles.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_IAUMayFkSW4/R97pbGQD6aI/AAAAAAAABnM/SNl60Tb0m2g/s320/flower_bubblles.JPG" alt="" id="BLOGGER_PHOTO_ID_5178833273266366882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_IAUMayFkSW4/R97oyGQD6YI/AAAAAAAABm8/qTwbpUKbkmI/s1600-h/flower_painting.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_IAUMayFkSW4/R97oyGQD6YI/AAAAAAAABm8/qTwbpUKbkmI/s320/flower_painting.JPG" alt="" id="BLOGGER_PHOTO_ID_5178832568891730306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_IAUMayFkSW4/R97pJGQD6ZI/AAAAAAAABnE/YHpqqlRcuYk/s1600-h/flower_wavy.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_IAUMayFkSW4/R97pJGQD6ZI/AAAAAAAABnE/YHpqqlRcuYk/s320/flower_wavy.JPG" alt="" id="BLOGGER_PHOTO_ID_5178832964028721554" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-7319507499801108616?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/7319507499801108616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=7319507499801108616' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/7319507499801108616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/7319507499801108616'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2008/03/justifying-gimpressionist.html' title='Justifying the  GIMPressionist'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_IAUMayFkSW4/R97n3GQD6XI/AAAAAAAABm0/TPG89F-sOvs/s72-c/flower_compressed.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-4633029120893372917</id><published>2008-03-15T16:27:00.001-05:00</published><updated>2008-03-17T07:25:47.627-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='bitmap'/><title type='text'>Being the Imprssionist with GIMP..</title><content type='html'>Here  is some of promised GIMP magic at work. The idea is to make a photo look like painting. The way to do it is to sample the colour underneath and then create a brush stroke of the same colour. Varying the brush orientation, shape, size and opacity gives different effects.&lt;br /&gt;&lt;br /&gt;I am at best a GIMP novice, and the effects I apply are  mostly hacks that I think would look good :) . So the images should be judged considering that in mind, a more deft hand would be able to get much more out of the pictures.&lt;br /&gt;&lt;br /&gt;Here is a picture of Sun Temple at Motera in India that I captured using my Canon A75 on my India trip this December.  Our aim -- to make it resemble a painting as much as possible..(&lt;b&gt;Click on images to enlarge..&lt;/b&gt; )&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_IAUMayFkSW4/R9w_2WQD6RI/AAAAAAAABmE/jaHbx7sO4RQ/s1600-h/patan_compressed.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_IAUMayFkSW4/R9w_2WQD6RI/AAAAAAAABmE/jaHbx7sO4RQ/s320/patan_compressed.JPG" alt="" id="BLOGGER_PHOTO_ID_5178083874487658770" border="0" /&gt;&lt;/a&gt;And here's the GIMP artifact..&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_IAUMayFkSW4/R9xCJGQD6TI/AAAAAAAABmU/EB9RWwIdfJI/s1600-h/patan_painting.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_IAUMayFkSW4/R9xCJGQD6TI/AAAAAAAABmU/EB9RWwIdfJI/s320/patan_painting.JPG" alt="" id="BLOGGER_PHOTO_ID_5178086395633461554" border="0" /&gt;&lt;/a&gt;I have applied the Canvas filter and then used the GIMPressionist tool to get the desired effect, with the "paintbrush" brush type using 12 different brush sizes between 2 and 14 pixels, and orientation of upto 45 degrees . The darkening of the image is because I played with the brightness and contrast a bit, and liked the result of my fiddling around..&lt;br /&gt;&lt;br /&gt;To underline the whole point, Here is one photograph:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_IAUMayFkSW4/R9xDS2QD6UI/AAAAAAAABmc/SfRS_KuWbOM/s1600-h/painter.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_IAUMayFkSW4/R9xDS2QD6UI/AAAAAAAABmc/SfRS_KuWbOM/s320/painter.jpg" alt="" id="BLOGGER_PHOTO_ID_5178087662648813890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here is what I could get using my own impressionist software (the one I wrote as part of my graduate computer graphics class)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_IAUMayFkSW4/R9xDzmQD6VI/AAAAAAAABmk/PycIOW09A-4/s1600-h/artifact.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_IAUMayFkSW4/R9xDzmQD6VI/AAAAAAAABmk/PycIOW09A-4/s320/artifact.jpg" alt="" id="BLOGGER_PHOTO_ID_5178088225289529682" border="0" /&gt;&lt;/a&gt;And Here's what GIMP gives you using its GIMPressionist tool:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_IAUMayFkSW4/R9xENmQD6WI/AAAAAAAABms/zfRTtr1qOOQ/s1600-h/gimp_painter.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_IAUMayFkSW4/R9xENmQD6WI/AAAAAAAABms/zfRTtr1qOOQ/s320/gimp_painter.jpg" alt="" id="BLOGGER_PHOTO_ID_5178088671966128482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Of course, the tool that I wrote required me to do all the 'artwork' by hand: select the brushes, the "alpha" (or transparency factor) and the inclination of the brushes. The artifact required about 4 hours to create, (though, of course extending the software to "repaint" the whole picture with same settings would have been an easy and worthwhile extension of the existing program). The time it took GIMP, umm -- a bit under 30 seconds, since its completely automated :)... go GIMP!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-4633029120893372917?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/4633029120893372917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=4633029120893372917' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/4633029120893372917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/4633029120893372917'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2008/03/being-imprssionist-with-gimp.html' title='Being the Imprssionist with GIMP..'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_IAUMayFkSW4/R9w_2WQD6RI/AAAAAAAABmE/jaHbx7sO4RQ/s72-c/patan_compressed.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-6134357647202532555</id><published>2008-03-14T14:17:00.000-05:00</published><updated>2008-03-15T00:06:18.256-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless'/><title type='text'>A wireless Analogy to Speaking/Hearing</title><content type='html'>In recent months, I have been delving deeper into Wireless Networks. And only now,have I started to have a good intuitive understanding to the whole business. I do not claim that all the thoughts expressed here are original, but I think they are interesting enough to find a mention in the blog. It also shows that most things in Computer Science are Common Sense...unlike transistors (whose working amazes me every time I read about how it works :) )&lt;br /&gt;&lt;br /&gt;The way Wireless Networks (at least the kind we come in contact with, after all satellite communications is wireless too, but then how many of us set that up in our home? ) work is like the action of speaking/hearing for people. Just like air is a broadcast medium for sound, so it is for radio frequency as well.&lt;br /&gt;&lt;br /&gt;If one person in a group speaks, any other (polite) person should shut up to allow the first person's voice to be heard. Of course, if the second person is far enough from the first person, they can speak concurrently without affecting each other. One of the most interesting problems in wireless is to figure out how far is far enough for nodes to be able to talk concurrently.&lt;br /&gt;&lt;br /&gt;Clearly, how far is far enough depends a lot on how loud the speakers are. Ditto in wireless: it depends on the transmit power of nodes.  Also, imagine a person speaking near heavy machinery:  He'll have to be much louder than a person who is speaking in a quiet room, to be heard. So noise and interference also affect how far far enough is..In wireless, unfortunately, because many instruments apart from wireless talk at the same frequency ranges (because they are the ones that are freely available), and interference is a major problem. Microwave Ovens slow down the Internet in many a homes :).&lt;br /&gt;&lt;br /&gt;Thats about the similarities, but there are some aspects of wireless which make it harder than hearing/speaking.. Imagine being in a noisy room and listening to a person. After every sentence being uttered, the speaker has some clue about whether the listener has heard what he said; these are because of the out-of-band signals that you get in form of change of expression of the listener, nodding etc. Imagine how annoying it would be for the listener and the speaker if the listener was forced to acknowledge that he heard the speaker right after every sentence..but thats precisely state-of-the-art in wireless these days. One good intuition looks to be that if we can exploit other out-of-band ways of acknowledging what we hear, we'll communicate better. This is difficult given the rigid capabilities of what our nodes can or cannot do, but I would have to think that when designing specific networks where you know the effect of what you communicate should be,significant gains can be made by looking out for such out of band actions..&lt;br /&gt;&lt;br /&gt;Also, it would help a lot, if we all know what volume to talk at rather than shouting at the top of our voices or in a constant monotone (which is precisely what wireless does now, though they are moving towards changing that..). We're still primordial as far as this evolution is concerned -- its an exciting time for an interesting field!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-6134357647202532555?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/6134357647202532555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=6134357647202532555' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/6134357647202532555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/6134357647202532555'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2008/03/wireless-analogy-to-speakinghearing.html' title='A wireless Analogy to Speaking/Hearing'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-1264365533924575103</id><published>2007-10-22T07:51:00.000-05:00</published><updated>2007-10-22T07:52:50.550-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Austin'/><title type='text'>Cold Weather in Austin..</title><content type='html'>The temperature dips below 10 degrees for the first time this fall..yey!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-1264365533924575103?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/1264365533924575103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=1264365533924575103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/1264365533924575103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/1264365533924575103'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2007/10/cold-weather-in-austin.html' title='Cold Weather in Austin..'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-5771250429826408251</id><published>2007-10-02T22:25:00.001-05:00</published><updated>2008-03-12T09:16:08.943-05:00</updated><title type='text'>TCP/IP on 8051</title><content type='html'>I have been interested in programming with micro-controllers since my early days in college...I enjoy the really clean view that  programming a micro-controller gives compared to programming for more complex stuff, which is marred by layers of high level languages and compilers.&lt;br /&gt;&lt;br /&gt;I have recently acquired an ethernet card to interface with my 8051 micro-controller board, I intend to implement the TCP/IP stack on that. (I guess I would end up implementing UDP before TCP). Tag along as I have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-5771250429826408251?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/5771250429826408251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=5771250429826408251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/5771250429826408251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/5771250429826408251'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2007/10/tcpip-on-8051.html' title='TCP/IP on 8051'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-1013222508481228683</id><published>2007-09-29T22:07:00.000-05:00</published><updated>2008-03-15T00:08:50.713-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='bitmap'/><title type='text'>Imping with Gimp..</title><content type='html'>At the risk of making my blog look like a product review site, I talk about yet another piece of software that I came across during my wanderings and found pretty useful.&lt;br /&gt;&lt;br /&gt;This cool software is called &lt;a href="http://www.gimp.org/"&gt;Gimp&lt;/a&gt;,  (GNU Imp I guess), It is a Graphics Bitmap Editor. Like most of GNU stuff, it is free. There's one catch, though: it needs &lt;a href="http://www.gtk.org/"&gt;GTK&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Like most Bitmap graphics editors, it allows multiple layers which can be cascaded to create the final image. I really like it for its ease of use. In spite of the fairly large number of transformations that it provides, it is very intuitive to use. And did I mention that it can convert to and from &lt;a href="http://www.gzip.org/#intro"&gt;gzip&lt;/a&gt; on the fly?&lt;br /&gt;&lt;br /&gt;The primary reason I ran into it was because I wanted to create some interesting GIF and JPEG images to test the Web server that students in the Computer Networks Class I TA for are writing. But its a bit more than that, I have always been interested in Computer Graphics. In fact, as part of the grad graphics course that I took, I have written a software which implements some of the image transformations and brushes..&lt;br /&gt;&lt;br /&gt;Images coming soon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-1013222508481228683?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/1013222508481228683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=1013222508481228683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/1013222508481228683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/1013222508481228683'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2007/09/imping-with-gimp.html' title='Imping with Gimp..'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-1635241613401017794</id><published>2007-09-07T19:27:00.000-05:00</published><updated>2008-03-14T12:36:07.451-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='editing'/><title type='text'>Emacs!</title><content type='html'>So after a lot of dilly-dallying I move on from vim to Emacs. I was afraid that it would take some doing, but I found the Emacs tutorial to be very user-friendly and effective in serving as a launch pad.  And already I like Emacs a lot :-) .&lt;br /&gt;&lt;br /&gt;For those not in the know, &lt;a href="http://www.gnu.org/software/emacs/"&gt;Emacs&lt;/a&gt; stands for Editor Macros, so its an editor (Surprise..surprise!) used on most unix-like platforms. Now, Of course there is a Windows port too.&lt;br /&gt;&lt;br /&gt;The editor has a lot of cool features, the most attractive of which seems to be that it can be split into arbitrary number of windows, each of which can display some different file.&lt;br /&gt;&lt;br /&gt;Another fantastic feature that comes with Emacs 22 and beyond is that it supports ( transparent) remote file editing, using some thing called &lt;a href="http://www.gnu.org/software/tramp/"&gt;TRAMP&lt;/a&gt;. So goodbye to all the (rather annoying) copying back and forth, which needs to be done when neither NFS, nor X11 tunneling can be used when working on some remote file. TRAMP handles the fetching and the saving of the file seamlessly. All that needs to be done is to(have Tramp ;-)  and) open the file with path that includes the server name. So, the way to open a file in Emacs is&lt;br /&gt;&lt;br /&gt;C-x C-f /filename   (that is, Ctl -x Ctl-f /filename)&lt;br /&gt;&lt;br /&gt;To open a remote file,&lt;br /&gt;&lt;br /&gt;C-x C-f /username@hostwherefileis: path/to/file/filename&lt;br /&gt;&lt;br /&gt;Underneath, TRAMP can be configured to use any of the  plethora of methods to transfer the file, by editing the .Emacs file of Emacs:&lt;br /&gt;&lt;br /&gt;&lt;pre class="lisp"&gt;(require 'tramp)&lt;/pre&gt;&lt;pre class="lisp"&gt;(setq tramp-default-method "ssh")&lt;span style="font-family:Georgia,serif;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;So Happy Editing!&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Georgia,serif;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-1635241613401017794?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/1635241613401017794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=1635241613401017794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/1635241613401017794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/1635241613401017794'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2007/09/emacs.html' title='Emacs!'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-5472001276884293493</id><published>2007-08-25T18:23:00.000-05:00</published><updated>2008-03-14T12:36:40.044-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><title type='text'>BOINC and the world of distributed computing</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_IAUMayFkSW4/RuIkQqhf7ZI/AAAAAAAAAcc/8I6aRYHgbY4/s1600-h/stamp-rosetta.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_IAUMayFkSW4/RuIkQqhf7ZI/AAAAAAAAAcc/8I6aRYHgbY4/s320/stamp-rosetta.png" alt="" id="BLOGGER_PHOTO_ID_5107684796102864274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;BOINC runs on my laptop. For those not familiar with it, &lt;a href="http://boinc.berkeley.edu/"&gt;BOINC &lt;/a&gt;stands for Berkeley Open Infrastructure for Network Computing. It utilizes idle cycles on the machines to perform  computation for various scientific projects like &lt;a href="http://setiathome.berkeley.edu/"&gt;SETI&lt;/a&gt; and &lt;a href="http://climateprediction.net/"&gt;Climate Prediction&lt;/a&gt;.   The tasks are fetched over the network and sent back through RPC.&lt;br /&gt;&lt;br /&gt;The computations are great and most projects come with pretty graphics too - apart from the fact that BOINC makes my laptop really really hot,( the average cpu temprature when BOINC is running is about 85 degree celsius, which drops down to 42 degrees when it is not running, according to &lt;a href="http://www.pbus-167.com/"&gt;NHC&lt;/a&gt; . For a comparison, the CPU is set to shut down at 95 degree celsius). The hard disk is kept pretty busy too.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_IAUMayFkSW4/RuIkW6hf7aI/AAAAAAAAAck/SoPkR8oY8BI/s1600-h/stamp-climate.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_IAUMayFkSW4/RuIkW6hf7aI/AAAAAAAAAck/SoPkR8oY8BI/s320/stamp-climate.png" alt="" id="BLOGGER_PHOTO_ID_5107684903477046690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So how useful are the computations? It is true that the collective processing power of machines all around the world is much more than what most research projects can afford. And there are  thousands of believers in BOINC. But while some projects are very upfront and self-explanatory about what exactly are they calculating: Climate Prediction, for instance, other projects can be  very cryptic about what they are up to.&lt;br /&gt;&lt;br /&gt;So give it a shot! try it and decide for yourself! Its fairly easy to set up and run...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-5472001276884293493?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/5472001276884293493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=5472001276884293493' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/5472001276884293493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/5472001276884293493'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2007/08/boinc-and-world-of-distributed.html' title='BOINC and the world of distributed computing'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_IAUMayFkSW4/RuIkQqhf7ZI/AAAAAAAAAcc/8I6aRYHgbY4/s72-c/stamp-rosetta.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5313465032461562592.post-4512117434819745404</id><published>2007-08-25T15:18:00.000-05:00</published><updated>2007-08-25T15:37:12.248-05:00</updated><title type='text'>And the blogging begins</title><content type='html'>Whoa! so after a lot of  "should I- shouldn't I", I decide to take a  plunge in the exotic world of blogging. Expect all kind of stuff here, mostly related to  Computers/Technology and some occasional stuff about my school, University of Texas, Austin...&lt;br /&gt;&lt;br /&gt;I hope you'll enjoy reading the posts, and that I keep writing them ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5313465032461562592-4512117434819745404?l=vachadave.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vachadave.blogspot.com/feeds/4512117434819745404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5313465032461562592&amp;postID=4512117434819745404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/4512117434819745404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5313465032461562592/posts/default/4512117434819745404'/><link rel='alternate' type='text/html' href='http://vachadave.blogspot.com/2007/08/and-blogging-begins.html' title='And the blogging begins'/><author><name>Vacha</name><uri>http://www.blogger.com/profile/04538851182943120180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
