tag:blogger.com,1999:blog-16980443379069713602024-02-07T13:35:06.336+05:30Beautiful is SimpleHomepage of Praveen Gopinathpraveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.comBlogger28125tag:blogger.com,1999:blog-1698044337906971360.post-78792719650676963912018-03-14T13:52:00.000+05:302018-05-14T09:54:54.260+05:30Batch Enhance and Resize images using GIMP<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhusHJzJCk3zMF3TNei19gIxF3ocyPcehE0nAaaM0bGuTw6zuGjxygEf-4WxsCBtSJqYA7dhQxjKjkgLNW3LlUv3fdsRXX1_zU_piQUvH08LKxlvMZengetTaQvCxNWF2ClY3NmN9qm0QQ/s1600/santu_half_enhanced.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="1198" data-original-width="800" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhusHJzJCk3zMF3TNei19gIxF3ocyPcehE0nAaaM0bGuTw6zuGjxygEf-4WxsCBtSJqYA7dhQxjKjkgLNW3LlUv3fdsRXX1_zU_piQUvH08LKxlvMZengetTaQvCxNWF2ClY3NmN9qm0QQ/s400/santu_half_enhanced.jpg" width="266" /></a></div>
<br />
GIMP is a free and open source replacement for Photoshop. A great tutorial for enhancing photos with GIMP is described <a href="https://www.youtube.com/watch?v=QbWghBFQ9Bo&t=138s" target="_blank">in this link</a>. It makes photos much brighter and vibrant.<br />
<br />
steps involved are:<br />
<br />
1. duplicate image layer twice<br />
2. Desaturate (Colors -> Desaturate) topmost layer selecting luminosity option.<br />
3. Invert the color of the layer from Colors -> Invert<br />
4. Do Gaussian Blur (Filters ->Blur ->Gaussian Blur), with setting radii as 20 and blur method as RLE.<br />
5. From the Layers panel set the opacity of top layer as 40.<br />
6. Merge down the top layer to the middle layer<br />
7. Change the blend mode of the middle layer (top layer now, after the merge) as 'Grain Merge'.<br />
8. You can test the changes by toggling the visibility of the top layer.<br />
9. Finally merge down the top layer.<br />
<br />
That's a lot of steps, to remember. That's where scripting comes to use. (Photoshop has batch mode). GIMP provides 2 scripting languages 'Script-Fu' and 'Python-Fu'. Scripting is also useful to process a folder of photos in a single click, in batch mode.<br />
<br />
Script-Fu is evolved from Scheme language, and is bit different in syntax from usual programming and scripting languages. Each statement is enclosed in parentheses, each statement begins with a function or an operator, functions are defined with <i>'define'</i>, variables assigned with <i>'set!'</i> and variables declared with <i>'let*'</i>. Edit the script using a text editor and store in <i>'.gimp-2.8/scripts'</i> folder in home folder (in Linux) as <i>*.scm</i> file. First I'll describe a script to resize individual photos and in batch mode from a folder.<br />
<br />
<div style="background-color: #f3f3f3; font-family: monospace; font-size: x-small; margin-left: 5%; width: 90%;">
(define (my_resize image drawable px)<br />
(let* ((cur-width (car (gimp-image-width image)))<br />
(cur-height (car (gimp-image-height image)))<br />
(height (/ (* cur-height px) cur-width))<br />
)<br />
(gimp-image-scale image px height)<br />
)<br />
)<br />
<br />
(define (batch_resize file-pattern new-width )<br />
(let* ( (file-glob-pattern (string-append file-pattern "/*.*"))<br />
<span style="white-space: pre;"> </span>(filelist (cadr (file-glob file-glob-pattern 1))))<br />
<span style="white-space: pre;"> </span> (while (not (null? filelist))<br />
(let* ( (cur-file (car filelist))<br />
(image (car (gimp-file-load RUN-NONINTERACTIVE cur-file "")))<br />
(drawable (car (gimp-image-active-drawable image)))<br />
)<br />
(my_resize image drawable new-width)<br />
(set! drawable (car (gimp-image-active-drawable image)))<br />
(gimp-file-save RUN-NONINTERACTIVE image drawable (string-append (car (strbreakup cur-file ".")) "_resized.jpg") "")<br />
(set! filelist (cdr filelist)))<br />
)<br />
)<br />
)<br />
<br />
(script-fu-register "my_resize"<br />
_"Resize Horizontal"<br />
_"Resizes horizontal images for photoblog."<br />
"PG"<br />
"PG"<br />
"2018"<br />
"*"<br />
SF-IMAGE "image" 0<br />
SF-DRAWABLE "drawable" 0<br />
SF-VALUE<span style="white-space: pre;"> </span>"horizontal pixels"<span style="white-space: pre;"> </span>"800"<br />
)<br />
<br />
(script-fu-menu-register "my_resize" "<Image>/Filters/Mine")<br />
<br />
(script-fu-register "batch_resize"<br />
"Batch Resize"<br />
"batch Resizes images."<br />
"PG"<br />
"PG"<br />
"2018"<br />
""<br />
SF-DIRNAME<span style="white-space: pre;"> </span>"select directory of images to resize"<span style="white-space: pre;"> </span>"~/Pictures"<br />
SF-VALUE<span style="white-space: pre;"> </span>"horizontal pixels"<span style="white-space: pre;"> </span>"800"<br />
)<br />
<br />
(script-fu-menu-register "batch_resize" "<Image>/Filters/Mine")<br />
<br /></div>
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpzOrlekf7omTspruj_ILDc1OKZWZ02lJPJsbEWgc_hGL_SAazEMbUmC6SE_p0ZPqdLjcgLSESKZXMF7cOKMfyNhMYL7JvVKFfr0eZ1CJJjCKWRoEWvfmT2eRFpc-231HiJ9n8enu91vw/s1600/Screenshot+at+2018-03-14+10-17-59.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="714" data-original-width="525" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpzOrlekf7omTspruj_ILDc1OKZWZ02lJPJsbEWgc_hGL_SAazEMbUmC6SE_p0ZPqdLjcgLSESKZXMF7cOKMfyNhMYL7JvVKFfr0eZ1CJJjCKWRoEWvfmT2eRFpc-231HiJ9n8enu91vw/s200/Screenshot+at+2018-03-14+10-17-59.jpg" width="146" /></a>In this I've defined two procedures <i>my-resize</i> and <i>batch-resize</i> and registered them using <i>script-fu-register</i> and <i>script-fu-menu-register</i> functions. To be able to use the batch procedure without opening an image, while registering , pass the 6th parameter as "" instead of any image format or as any format with "*" as we did with my-resize function. To work with currently opened image, pass an image parameter and drawable parameter as first 2 parameters with 0 as default value. 'car' and 'cdr' functions are used to access the list members.<br />
<br />
Save this script in the script folder and in Gimp select Filters->Script-Fu->Refresh Scripts. the script will appear in Filter->Mine menu.<br />
<br />
Next, I'll write another script to enhance the image using the method I described above. I'll write a script to batch automate, which will first resize the image, and then enhance it, because enhancing will work faster in a smaller size image file.<br />
<br />
<div style="background-color: #f3f3f3; margin-left: 5%; width: 90%;">
<span style="font-family: monospace; font-size: x-small;">(define (my_enhance image drawable)</span><br />
<span style="font-family: monospace; font-size: x-small;"><br /></span>
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span>(let* (</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span>(layer2 0)</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span>(layer3 0)</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span>)</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (gimp-undo-push-group-start image)</span><br />
<span style="font-family: monospace; font-size: x-small;"> (set! layer2 (car (gimp-layer-copy drawable 1)))</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (gimp-image-insert-layer image layer2 0 -1)</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (gimp-layer-set-name layer2 "layer2")</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (set! layer3 (car (gimp-layer-copy drawable 1)))</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (gimp-image-insert-layer image layer3 0 -1)</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (gimp-layer-set-name layer3 "top-layer")</span><br />
<span style="white-space: pre;"><span style="font-family: monospace; font-size: x-small;"> </span></span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (gimp-desaturate-full layer3 DESATURATE-LUMINOSITY)</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (gimp-invert layer3)</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (plug-in-gauss RUN-NONINTERACTIVE image layer3 20.0 20.0 1)</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (gimp-layer-set-opacity layer3 40.0)</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (set! layer2 (car(gimp-image-merge-down image layer3 0)))</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (gimp-layer-set-mode layer2 21)</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (gimp-image-merge-down image layer2 0) </span><br />
<span style="white-space: pre;"><span style="font-family: monospace; font-size: x-small;"> </span></span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (gimp-undo-push-group-end image)</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (gimp-displays-flush)</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span>) </span><br />
<span style="font-family: monospace; font-size: x-small;">)</span><br />
<span style="font-family: monospace; font-size: x-small;"><br /></span>
<span style="font-family: monospace; font-size: x-small;">(define (batch_enhance file-pattern )</span><br />
<span style="font-family: monospace; font-size: x-small;"> (let* ( (file-glob-pattern (string-append file-pattern "/*.*"))</span><br />
<span style="font-family: monospace; font-size: x-small;"> <span style="white-space: pre;"> </span>(filelist (cadr (file-glob file-glob-pattern 1))))</span><br />
<span style="font-family: monospace; font-size: x-small;"> <span style="white-space: pre;"> </span>(while (not (null? filelist))</span><br />
<span style="font-family: monospace; font-size: x-small;"> (let* ( (cur-file (car filelist)) </span><br />
<span style="font-family: monospace; font-size: x-small;"> <span style="white-space: pre;"> </span> (image (car (gimp-file-load RUN-NONINTERACTIVE cur-file "")))</span><br />
<span style="font-family: monospace; font-size: x-small;"> (drawable (car (gimp-image-active-drawable image)))</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> )</span><br />
<span style="font-family: monospace; font-size: x-small;"> (my_enhance image drawable)</span><br />
<span style="font-family: monospace; font-size: x-small;"> (set! drawable (car (gimp-image-active-drawable image)))</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span> (gimp-file-save RUN-NONINTERACTIVE image drawable (string-append (car (strbreakup cur-file ".")) "_enhanced.jpg") "")</span><br />
<span style="font-family: monospace; font-size: x-small;"> (set! filelist (cdr filelist))</span><br />
<span style="font-family: monospace; font-size: x-small;"> )</span><br />
<span style="font-family: monospace; font-size: x-small;"> )</span><br />
<span style="font-family: monospace; font-size: x-small;"> )</span><br />
<span style="font-family: monospace; font-size: x-small;">)</span><br />
<span style="font-family: monospace; font-size: x-small;"><br /></span>
<span style="font-family: monospace; font-size: x-small;">(define (batch_resize_enhance file-pattern new-width)</span><br />
<span style="font-family: monospace; font-size: x-small;"> (let* ( (file-glob-pattern (string-append file-pattern "/*.*"))</span><br />
<span style="font-family: monospace; font-size: x-small;"> <span style="white-space: pre;"> </span>(filelist (cadr (file-glob file-glob-pattern 1))))</span><br />
<span style="font-family: monospace; font-size: x-small;"> <span style="white-space: pre;"> </span>(while (not (null? filelist))</span><br />
<span style="font-family: monospace; font-size: x-small;"> (let* ( (cur-file (car filelist)) </span><br />
<span style="font-family: monospace; font-size: x-small;"> <span style="white-space: pre;"> </span> (image (car (gimp-file-load RUN-NONINTERACTIVE cur-file "")))</span><br />
<span style="font-family: monospace; font-size: x-small;"> <span style="white-space: pre;"> </span> (drawable (car (gimp-image-active-drawable image)))</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span>)</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span>(my_resize image drawable new-width) </span><br />
<span style="font-family: monospace; font-size: x-small;"> (my_enhance image drawable)</span><br />
<span style="font-family: monospace; font-size: x-small;"> (set! drawable (car (gimp-image-active-drawable image)))</span><br />
<span style="font-family: monospace; font-size: x-small;"><span style="white-space: pre;"> </span>(gimp-file-save RUN-NONINTERACTIVE image drawable (string-append (car (strbreakup cur-file ".")) "_enhanced.jpg") "")</span><br />
<span style="font-family: monospace; font-size: x-small;"> (set! filelist (cdr filelist))</span><br />
<span style="font-family: monospace; font-size: x-small;"> )</span><br />
<span style="font-family: monospace; font-size: x-small;"> )</span><br />
<span style="font-family: monospace; font-size: x-small;"> )</span><br />
<span style="font-family: monospace; font-size: x-small;">)</span><br />
<span style="font-family: monospace; font-size: x-small;"><br /></span>
<span style="font-family: monospace; font-size: x-small;">(script-fu-register "my_enhance"</span><br />
<span style="font-family: monospace; font-size: x-small;"> "My Enhance" </span><span style="font-family: monospace; font-size: x-small;">"One touch enhance image" </span><span style="font-family: monospace; font-size: x-small;">"PG" </span><span style="font-family: monospace; font-size: x-small;">"PG" </span><span style="font-family: monospace; font-size: x-small;">"2018"</span><span style="font-family: monospace; font-size: x-small;"> "*"</span><br />
<span style="font-family: monospace; font-size: x-small;"> SF-IMAGE "image" 0</span><br />
<span style="font-family: monospace; font-size: x-small;"> SF-DRAWABLE "drawable" 0</span><br />
<span style="font-family: monospace; font-size: x-small;">)</span><br />
<span style="font-family: monospace; font-size: x-small;"><br /></span>
<span style="font-family: monospace; font-size: x-small;">(script-fu-menu-register "my_enhance"</span><span style="font-family: monospace; font-size: x-small;"> "<Image>/Filters/Mine")</span><br />
<span style="font-family: monospace; font-size: x-small;"> </span><br />
<span style="font-family: monospace; font-size: x-small;">(script-fu-register "batch_enhance" </span><span style="font-family: monospace; font-size: x-small;">"Batch Enhance" </span><span style="font-family: monospace; font-size: x-small;">"batch enhances images." </span><span style="font-family: monospace; font-size: x-small;">"PG" </span><span style="font-family: monospace; font-size: x-small;">"PG" </span><span style="font-family: monospace; font-size: x-small;">"2018"</span><span style="font-family: monospace; font-size: x-small;"> ""</span><br />
<span style="font-family: monospace; font-size: x-small;"> SF-DIRNAME<span style="white-space: pre;"> </span>"select directory of images to resize"<span style="white-space: pre;"> </span>"~/Pictures"</span><br />
<span style="font-family: monospace; font-size: x-small;">)</span><br />
<span style="font-family: monospace; font-size: x-small;"><br /></span>
<span style="font-family: monospace; font-size: x-small;">(script-fu-menu-register "batch_enhance"</span><span style="font-family: monospace; font-size: x-small;"> "<Image>/Filters/Mine")</span><br />
<span style="font-family: monospace; font-size: x-small;"> </span><br />
<span style="font-family: monospace; font-size: x-small;">(script-fu-register "batch_resize_enhance" </span><span style="font-family: monospace; font-size: x-small;">"Batch Resize & Enhance"</span><br />
<span style="font-family: monospace; font-size: x-small;"> "batch resizes & enhances images."</span><span style="font-family: monospace; font-size: x-small;"> "PG" </span><span style="font-family: monospace; font-size: x-small;">"PG" </span><span style="font-family: monospace; font-size: x-small;">"2018"</span><span style="font-family: monospace; font-size: x-small;"> ""</span><br />
<span style="font-family: monospace; font-size: x-small;"> SF-DIRNAME<span style="white-space: pre;"> </span>"select directory of images to optimize" "~/Pictures"</span><br />
<span style="font-family: monospace; font-size: x-small;"> SF-VALUE<span style="white-space: pre;"> </span>"horizontal pixels"<span style="white-space: pre;"> </span>"800"</span><br />
<span style="font-family: monospace; font-size: x-small;">)</span><br />
<span style="font-family: monospace; font-size: x-small;"><br /></span>
<span style="font-family: monospace; font-size: x-small;">(script-fu-menu-register "batch_resize_enhance"</span><span style="font-family: monospace; font-size: x-small;"> "<Image>/Filters/Mine")</span></div>
<br />
As previous script, this adds 3 menu options with procedures to enhance a single open photo, to enhance a folder of photos and to do both resize and enhance a folder of photos in a single step. </div>
praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com3tag:blogger.com,1999:blog-1698044337906971360.post-37816818638332090632015-05-27T10:18:00.000+05:302015-05-27T10:18:03.376+05:30How to overcome low memory problems in Android one (Micromax Canvas A1) Phones<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div style="border: 1px solid black; padding: 3px;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzl8EbwdzW8L2KYOt-YCBvJr1vP72gYbtLSpIMb_yXI9pXLwswsR4GfcMc3fMJNVc-C7NTANNT4YoyhKlhvu4RiCHjH1jOwUr0bFfUPfrISTypERMndMcCqKBvGymNqnOkpzhRpndMWhY/s1600/Micromax-Canvas-A1_fonearena-002.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="136" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzl8EbwdzW8L2KYOt-YCBvJr1vP72gYbtLSpIMb_yXI9pXLwswsR4GfcMc3fMJNVc-C7NTANNT4YoyhKlhvu4RiCHjH1jOwUr0bFfUPfrISTypERMndMcCqKBvGymNqnOkpzhRpndMWhY/s200/Micromax-Canvas-A1_fonearena-002.jpg" width="200" /></a></div>
Micromax Canvas A1 is a beautiful Android one phone, compact, snappy and delightful. Having come from Samsung Galaxy S3, which I used for 2 years, this phone to my surprise surpassed S3 in performances, almost never hangs, never makes you wait for display to come up, responds almost instantaneously, display doesn't blackout, good battery performance, and good GPRS, GPS performance too.
<br />
<br />
My only gripe with the phone was low user memory (about 2.6GB) for installing apps. Soon after starting to use the phone, you start getting message "low memory warning: can't install any more apps", while trying to install new apps! Here's how I overcome it, and it's sure to work on any android phone, with suitable modifications. You need to root the phone, which is involved with it's own risks and voids warranty)</div>
<br />
<b>Step 1</b>: root your phone.<br />
<div style="font-style: italic; padding-left: 5px;">
Rooting involves risks of permanently damaging the phone (bricking) and also voids the warranty. So, unless you have prior experience (of damaging the devices and bearing the stress of unsuccessful attempts) don't try it.</div>
<br />
<ol style="text-align: left;">
<li>To root, first install ADB and fastboot in your desktop. a quick guide is <a href="http://lifehacker.com/the-easiest-way-to-install-androids-adb-and-fastboot-to-1586992378">here</a>. In linux, it's as easy as just as easy as issuing two commands: <div style="background-color: whitesmoke; color: #333333; font-family: Courier, monospace; font-size: 15px; line-height: 24px;">
sudo add-apt-repository ppa:phablet-team/tools && sudo apt-get update </div>
<div style="background-color: whitesmoke; color: #333333; font-family: Courier, monospace; font-size: 15px; line-height: 24px;">
sudo apt-get install android-tools-adb android-tools-fastboot</div>
</li>
<li>Follow this <a href="http://www.droidviews.com/root-micromax-canvas-a1-unlock-bootloader-and-install-twrp-cwm/">rooting guide</a>. the steps are: </li>
</ol>
<div>
<ul style="text-align: left;">
<li>Enable USB debugging from: settings->developer options</li>
<li>Download <a href="http://download.chainfire.eu/452/SuperSU/UPDATE-SuperSU-v2.02.zip">SuperSU</a> and <a href="https://www.androidfilehost.com/?fid=23681161096069959">Phils touch recovery</a></li>
<li>Connect to PC. If a popup appears, click 'always allow'</li>
<li>Now, in a terminal type:<div style="background-color: whitesmoke; color: #333333; font-family: Courier, monospace; font-size: 15px; line-height: 24px;">
adb reboot bootloader</div>
</li>
<li>when it reboots into bootloader mode type:<div style="background-color: whitesmoke; color: #333333; font-family: Courier, monospace; font-size: 15px; line-height: 24px;">
fastboot oem unlock and </div>
<div style="background-color: whitesmoke; color: #333333; font-family: Courier, monospace; font-size: 15px; line-height: 24px;">
fastboot format userdata </div>
(you will lose your data in the phone, so backup)</li>
<li>now go to the foder you downloaded recovery and type:<div style="background-color: whitesmoke; color: #333333; font-family: Courier, monospace; font-size: 15px; line-height: 24px;">
fastboot flash recovery recovery.img</div>
then :<div style="background-color: whitesmoke; color: #333333; font-family: Courier, monospace; font-size: 15px; line-height: 24px;">
fastboot reboot</div>
</li>
<li>phone reboots. Now copy the superSu Zip to your phone. and reboot into recovery by:</li>
<li>switch off the phone</li>
<li>restart simultaneously pressing volume up and power button, then select option recovery and select. </li>
<li>Now select install zip, select the superSu zip file. </li>
<li>Restart. </li>
</ul>
</div>
<div>
<b>Step 2</b>: For some reason, I had to install cyanogenmod ROM. the link2sd app didnt work from stock ROM.<br />
Download <a href="http://forum.xda-developers.com/crossdevice-dev/android-one-crossdevice-development-original-android-development/rom-development-cyanogenmod-12-1-beta-1-t3067930">cm12.1</a>, <a href="http://wiki.cyanogenmod.org/w/Google_Apps">GAPPS</a> reboot into recovery, wipe phone, install , first ROM then GAPPS.<br />
<br />
Now, reboot into the new ROM.<br />
<br />
<b>step 3</b>: partition sdcard<br />
You can do it using desktop. but as i didnt have microSD adaptor, i did it in phone itself! using <a href="https://play.google.com/store/apps/details?id=com.sylkat.AParted&hl=en">AParted</a> app.<br />
I had a 16GB SD card, which I partitioned as a 12+GB FAT32 first partition (which is recognised by phone to be used as normal SD card) and a 3+GB ext2 (dont make it ext3 or 4. they dont work with link2sd.) which is to be used exclusively by link2sd and not used by phone ROM at all.<br />
<br />
<b>step 4</b>:install link2sd and link all apps. <br />
install <a href="https://play.google.com/store/apps/details?id=com.buak.Link2SD&hl=en">Link2SD</a> app. As you open it, it lists apps in your phone, filter those on internal. from menu, select multi select, select all using menu button, then from menu select Link to SD card.<br />
Now go to settings, select Auto link. and in auto link settings, select all except internal data.<br />
<br />
Done! Now apps are actually stored in the second partition of SD card, the phone is made to think, it's in the internal memory itself by placing a simlink in the internal memory. so instead of 2.6GB memory for Apps, Now I have 2.6+3=5.6GB, and low memory warnings are gone for ever!<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheeywvzKJT_xcT3vzn-cux4MxZhLdUlSpt47vcVHqZ001wa0SiEZUVPrJ4tI3llPZk8S3Tm59VfHNkn1E2ffDXsfQitH7axpEOzz2BOlBZliED1ZqhBf16OgGafsKmLMsvLRjIoxsgGTU/s1600/Screenshot_2015-05-27-10-11-15.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheeywvzKJT_xcT3vzn-cux4MxZhLdUlSpt47vcVHqZ001wa0SiEZUVPrJ4tI3llPZk8S3Tm59VfHNkn1E2ffDXsfQitH7axpEOzz2BOlBZliED1ZqhBf16OgGafsKmLMsvLRjIoxsgGTU/s320/Screenshot_2015-05-27-10-11-15.png" width="179" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">from Link2SD storage info. </td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBehyphenhyphenY0CJ6xg-wX_47UO-ytu8dj-tkVU0KphOYy_T8G_Y0HKpOC5Hakipj7rTy1P-TiFM1tqitAqP28CzndlnLboiULbkd3wY4yXIeJRFBn5Aw_sNnfISJFPpjuPyF8z0EJ8Mngbe3u3I/s1600/Screenshot_2015-05-27-10-09-32.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-left: auto; margin-right: auto; text-align: center;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBehyphenhyphenY0CJ6xg-wX_47UO-ytu8dj-tkVU0KphOYy_T8G_Y0HKpOC5Hakipj7rTy1P-TiFM1tqitAqP28CzndlnLboiULbkd3wY4yXIeJRFBn5Aw_sNnfISJFPpjuPyF8z0EJ8Mngbe3u3I/s320/Screenshot_2015-05-27-10-09-32.png" width="179" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">from settings->storage.</td></tr>
</tbody></table>
<br />
<br /></div>
</div>
praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com0tag:blogger.com,1999:blog-1698044337906971360.post-39641324970697429662014-04-11T01:25:00.000+05:302014-04-11T01:25:42.657+05:30Prof BM Hegde's non-sense about medicine. <div dir="ltr" style="text-align: left;" trbidi="on">
Here's a Prof B M Hegde's lecture, in which he says modern medicine is redundant, full of contraditions, and he has found out and researching on wholistic way of healing.<br />
<br />
<div style="float:right;padding:15px"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/pcza-nbIJ2w?feature=player_embedded' frameborder='0'></iframe><br /></div>
For the start, there are many people out there, who use scientific jargon, scientists' names, theories etc, to sound scientific, and utter non-science. Science is not an absolute body of facts, but an enterprise to learn the objective truth. It need not be done by scientists, in dedicated set-ups. It is the way of shedding personal opinion, doing honest and non-biased enquiry, eagerness to learn, willingness to accept self deceipt, to change ones pre-concieved ideas, in all walks of life, about the world around us.<br />
<br />
In his lecture, Prof Hegde, confuses himself, and audience a lot about physics. Non linear mathematics was known since long time, and approximation of physical laws to linear mathematics was because of difficulties in solving non-linear equations, and this approximation of course caused failure of predictions of equations, and they were duely acknowledged. The failure of predictions of physical systems, can be either due to true uncertainity of the system, or deficiency of the theories or mathematics. Quantum physics and uncertainity principle, unlike non-linear equations, introduce true uncertainity, and the uncertainity is even observer-dependent. Things happen differently, when not viewed! Prof Hegde confuses non-linear equations and quantum physics.<br />
<br />
He also confuses relativity and quantum mechanics. Relativity theory doesnt bring in uncertainity, Einstein even said, he thinks 'God doesn't play dice'. and Quantum mechanics doesn't say about conversion of mass into energy. prof Hegde erred on both accounts. He has of course read a few popular science books on 'chaos theory' understood them partly, and forgot the connections and meaning of different theories.<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
He talks about medicine, that it sees body as a collection of organs, but that, it's a collection of cells, that 'love' each other cells etc. No one will doubt that these are known knowledge, and a doctor doesn't think in terms of organs, and knows, that all substances, drug, food, or other molecules in environment, affect all cells, and molecules of the body.<br />
<br />
The concept of bioenergy and biophotonics he talks about is outdated. That, a few people tried to photograph bio-energy, and they did it, and they seem to change with status body is well known. Any body, which is above absolute zero produces radiation, which depends on temperature of the body. This radiation can be photographed, using ultrasensitive sensors. But they are not much useful in diagnosis or treatment, and tell very little more than what can be known otherwise about the body, from sight, touch , temperature etc. The attempt at biophotonics started in 1970, and <a href="http://en.wikipedia.org/wiki/Biophoton">proven futile science</a>.<br />
<br />
Continuing with his holistic medicine, and bioenergy, he then proceeds on to his own technique of healing, using water, nano silver and ?bioenergy. it doesn't sound much logical, but as I have not seen or tested, I can't refute his claims too, and as a true scientist, is eager to see someone study these claims without any bias.<br />
<br />
The body has great power to heal itself, which is known, and utlised by modern medicine. The sentences such as whether a heart can be replaced on a dead body is non-sense. He can't do it either using his machine of bioenergy. The concept of dealth as a singular event of bio-energy leaving body is not logical. death is not a single event. different parts (or cells if you like to call it that way) die at different times, we even some times carry 'dead' cells (gangrene foot). We all know cornea can be taken out some time after a person is dead, for 'eye transplant'. Does that mean, the cornea retains it bioenergy?<br />
<br />
Repeating my sentence, Prof Hegde caught a few sentences and quotes from popular science books, and is misleading people on what's scientific medicine.<br />
<br />
<br /></div>
praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com10tag:blogger.com,1999:blog-1698044337906971360.post-86349140916787069732014-01-19T00:47:00.000+05:302014-01-19T00:47:28.362+05:30Why do we do Good?<div dir="ltr" style="text-align: left;" trbidi="on">
Biologically, what prompts us to consider some things as good and drive us to do those things? Like in other fields, science does answer the question of morality and ethics.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8l37T5JdN_4_qH6f4biDmeGzsT-ZPdGAyDW3T91imllIAyYK5Z4SUhyphenhyphenaSLcX4G4yV5xkMzrXKSg3EVpsxfAocDQSraRLekm5NK1jA9LMajOvBsorbQxURDY74enCw_kX-Zvyu24Kj7aw/s1600/mother_teresa-demonic.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8l37T5JdN_4_qH6f4biDmeGzsT-ZPdGAyDW3T91imllIAyYK5Z4SUhyphenhyphenaSLcX4G4yV5xkMzrXKSg3EVpsxfAocDQSraRLekm5NK1jA9LMajOvBsorbQxURDY74enCw_kX-Zvyu24Kj7aw/s1600/mother_teresa-demonic.jpg" height="130" width="200" /></a></div>
<br />
The biggest advance in biology since Darwin was the proposal of 'selfish gene theory' by Richard Dawkins. Even before Darwin, biology was searching how individual organisms evolved, and Darwin in his master stroke described how nature, though subconsciously, selected the most adapted organism to its surroundings, from a group of random variations in successive generations. Richard Dawkins showed that individual organism is only a temporary association between genes, in a constantly flowing digital river of genes, in which they mix and match and form temporarily associations, and that evolution works at genes' level.<br />
<br />
There's only a faint definition of organism. For example, many of the commensals, that's friendly organisms residing inside another organism, can be regarded as belonging within that organism itself, since they often dont have independent existance. There are many microbes residing inside our body also, and they simply propagate between people, and never exist outside them. The extreme form of this symbiosis is, within our individual cells, where there are organelles like mitochondria, which were independent organisms at the start of life, and then, became permanently to reside inside other cells, and now they are not considered as separate entity at all. We often refer to 'our' mitochondrial genes.<br />
<br />
Dawkins proposed that evolution works at the level of genes, and those that happen to possess qualities to adapt its owner/s to their surroundings survive. Genes adapt all kinds of strategies, they not only make their owners behave in their ways, but also form associations with those genes, which help them to propagate themselves more. The genes don't do it with a purpose as we see it, but those which happen to possess self serving abilities (to make more copies of self) survive and evolve.<br />
<br />
A species happens to be only a temporary association between a group of these genes, in the vast time line in the history of life, and the gene's strategy to survive extend beyond the physical limits of an organism (like the flu virus making us sneeze). A species share a common genome among itself, and only a fraction of this genome varies among the individual organisms of the species, which gives them individual identities, and these may be called variable genes. The purpose of the gene is served, if it either succeeds in making more copies of itself, or even help identical genes in the other individuals of the same species to propagate themselves. The individuals of species who are more closely related to one, is more likely to a common set of variable genes of the species. In fact, siblings share half of an individuals' variable genes, parents also share half, second degree relatives share only one fourth and third degree relatives share only one eighth. So, if an organism care for its closest relative, that's siblings or kids, and see that they survive, in a survival situation, they make sure that at least half of their genes survive.<br />
<br />
So, it's in the genes self interest, that it should see to it that, it makes survives, and makes more copies of itself. But then, why do we see sometimes organisms help each other, cooperate, even sacrifice? We see that, by helping those individuals that share it's genes' copies, they in fact help themselves, or to be more precise, their own genes. In a survival situation, sometimes it may be even beneficial than own survival, to help a related organism, who may be carrying only a portion of it's genes, but has more chances of survival and propagation. So that explains our being good to others. We are not uniformly good to all, but, we love our kith and kin more. We love our spouse, even though it is not related to us, and it's as align to us as any other individual of the species, since it helps our children, who carry half our genes, to survive.<br />
<br />
This not only explains why we are good, but also, the selectiveness in it. Another way to help own set of genes to survive, is by preventing alien set from doing so. That explains why we are bad towards others too. The ratio of goodness to badness in our attitude towards others is determined, hence by our degree of relation.<br />
<br />
Sea Lions are organisms that live in land and sea, and lay eggs. They tend to their eggs, and help them hatch. There's population of Sea Lions who live on rough rocks by the sea. When they sit to hatch their eggs, occasionally a few eggs roll out, and they immediately hold them and bring them back under themselves. There's also a population of Sea Lions, who live on smooth rocks, where eggs roll out more and also far. These individuals, when an egg is seen rolling, they break the egg, rather than bring them in to hatch. The difference in behaviour of the two sets of Sea Lion populations is because, in smoother rocks, more eggs roll, and also they roll farther, so, when one spots an egg near it, it's more likely to be egg of another Sea Lion than it's own, so, they break it, there by reducing the competition to it's children, when they come out!<br />
<br />
So, selfish gene theory explains us why we are good, why we are more good to our close relatives, those of our own cast, and nation, and also, why we can be as bad as it can, at certain times, towards others. Our genes feed us these instincts, to serve their own purpose! As with theory of evolution, this explains our goodness and evil, in a very simple and elegant manner, without resorting to convoluted stories of sky dwelling creatures and their evil counterparts. </div>
praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com0tag:blogger.com,1999:blog-1698044337906971360.post-88761319978317094882013-11-03T18:00:00.000+05:302013-11-03T18:00:14.998+05:30When Dreams took Wings<div dir="ltr" style="text-align: left;" trbidi="on">
<b>March 3rd, 2013</b> - the day I can't forget in my life.<br />
<br />
That day, I flew a paraglider solo first time, on the third day of my P1 course!!<br />
<br />
It all started when I visited Nepal with my family about 3 years back. We went Paragliding in Pokhara. (<a href="http://www.youtube.com/watch?v=GG8OCc6C7oM">video here</a>) A pilot carries you in his glider, called tandem flight. I learnt from him that he can navigate the glider to where he wants, soar higher than from where he took off, cover long distances on the glider, even do some acrobatics! That itself was very wonderful and I was talking about it all the time to my friends. Then I started looking if any tandem flights were available in India.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0M4AYcuvuSY68HdEFTH1sJNau1_A8wgCnqFloCiRyveoE8l39re5FPficjvs5KZYbebqUXkvo23Wozw935NG0xfuvkKXDwUmtBRHVn6yYjWb7BIpoSl5TAqESvAukRs1-_TqXcjqMnsI/s1600/574870_553298658036698_1112787392_n.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0M4AYcuvuSY68HdEFTH1sJNau1_A8wgCnqFloCiRyveoE8l39re5FPficjvs5KZYbebqUXkvo23Wozw935NG0xfuvkKXDwUmtBRHVn6yYjWb7BIpoSl5TAqESvAukRs1-_TqXcjqMnsI/s200/574870_553298658036698_1112787392_n.jpg" /></a></div>
And it turned out that there were a few people offering paragliding training in India, and that, it's actually quite easy! I narrowed in on one school <a href="http://templepilots.com/">Temple Pilots</a>, who looked good. I later learned that they are the best in the country. I still took one year to summon courage, convince family and get a mate (Lakshman) to join me to the course. Finally landed in Talegaon on March 1st this year, with Lakshman.<br />
<br />
I had already watched a few videos and read about paragliding, but on site, on the first day, it looked quite terrifying. We had to do some ground runs carrying the glider. The glider seemed to pull heavily on us, we couldn't control it, we'll fall to our side, the glider will drag us on ground, heads got banged on rocks (of course protected by helmet). To top it, one of the guys who was doing hopping flights had a fall and injured his knees. That night when we sat around, Lakshman said he'll never attempt to fly solo, and he told the Temple Pilots guys so, and that he wanted them to just carry him on a tandem flight to show to his friends back home.<br />
<br />
<div style="float: right; margin: 10px; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="169" src="//www.youtube.com/embed/KwD2irPe35M" width="300"></iframe><br />
my hopping flight</div>
Second day, again some ground runs, now we seemed to get the hook of controlling the glider, and we could run longer and rather than end up falling, could stop and deflate the glider. We started enjoying the runs, it was beautiful, glider will carry us over small dips on the ground, the legs won't go down into them. Our trainers will give us instructions over radio, to which we now got accustomed, which actually we couldn't listen and obey on the first day, due to the nervousness. Towards the end of the day, they made us fly hopping flights, from a small height, which itself was quite exhilarating. That night when we sat down, we were really happy, and were looking forward to our last day, when we'll be taken for solo flights, from the top of the hill!<br />
<br />
On the final day, I did 4 solo flights. It was beyond words. When I got to top of the hill first time, it was actually terrifying again, the top was just a narrow ridge, with strong winds. We knew from our theory classes that, on the other side of the hill, that's the leeward side of the hill, there are going to be rotors and eddies which is dangerous and no-go for paragliding. It was with heavily beating hearts that we inflated our gliders, assisted by Ankush, our trainer, and then took off. Once in the air, wow, it was amazing, I was flying by myself!!. Ganpath the trainer with radio on ground gave instructions, and I took my turns, reached landing site, did the final flare, and landed on my feet! The flight lasted about one and half minute. But it was wonderful. I had three more flights, and after each flight, was racing back to the top of the 200 feet hill, for a chance at it again.<br />
<br />
But the man who enjoyed the most on the day was Lakshman, who on first day said he'll never do solo flight. His first attempt at inflation failed and he fell down, which further scared him. He actually backed out of further attempts but Ankush didnt release him from the glider, quickly inflated it, and sent him off. After landing, he was laughing so much and jumping around, more than all others who did solo.<br />
<br />
So, now, we are P1 certified pilots. it doesn't actually mean much. There's so much more to learn, proper launch technics, soaring, thermalling etc. But it all looks exciting and we are determined to carry on ahead with P2, certification course and beyond. It's said that paragliding is initially 90% physical and 10% mental, but later, 10% physical and 90% mental. It already looks to be true, and we are least worried now and quite excited.<br />
<br />
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="304" src="//www.youtube.com/embed/43RZWUS-F2k" width="540"></iframe><br />
Laksman doing solo </div>
</div>
praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com1tag:blogger.com,1999:blog-1698044337906971360.post-46930104334017041372013-08-24T09:17:00.001+05:302013-08-24T09:17:11.125+05:30Upload contacts to google as CSV file<div dir="ltr" style="text-align: left;" trbidi="on">
You can save your contacts in a simple text file (created with notepad or alternately exported from Excel) and then import from Gmail.<br />
This link contains the directions from Google about how to do this: <a href="https://support.google.com/mail/answer/12119#">https://support.google.com/mail/answer/12119#</a><br />
<br />
A few points to note are:<br />
<br />
1. The individual fields need not be contained in an <b style="font-style: italic;">apostrophe, </b>which many spreadsheet programs insert. <br />
2. There should be a header line which names each field.<br />
3. 'Name' field (alternately it can be 'First Name', 'Last Name' etc) and 'E-mail Address' fields are required. It's E-mail no Email as given in google help page.<br />
<br />
A sample file may look like:<br />
<br />
<br />
Name,Mobile Phone,E-mail Address<br />
Mr xxx, 9439843 , xxx@yyy.com<br />
Mr abc, 23489348, abc@xyz.com<br />
<br />
In Google, goto Contacts, click on More button on top, select Import, and select CSVfile you saved, and then Import contacts.<br />
</div>
praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com0tag:blogger.com,1999:blog-1698044337906971360.post-47423884528741711442013-07-31T23:41:00.000+05:302013-07-31T23:41:45.174+05:30A great philosophical piece in a book on computer viruses!<div dir="ltr" style="text-align: left;" trbidi="on">
<i><b>The following is from Introduction chapter in 'The little black book on computer viruses' by Mark Ludwig</b></i><br />
<i><b><br /></b></i>
<br />
This is the first in a series of three books about computer<br />
viruses. In these volumes I want to challenge you to think in new<br />
ways about viruses, and break down false concepts and wrong ways<br />
of thinking, and go on from there to discuss the relevance of<br />
computer viruses in today’s world. These books are not a call to a<br />
witch hunt, or manuals for protecting yourself from viruses. On the<br />
contrary, they will teach you how to design viruses, deploy them,<br />
and make them better. All three volumes are full of source code for<br />
viruses, including both new and well known varieties.<br />
It is inevitable that these books will offend some people.<br />
<div>
<div>
In fact, I hope they do. They need to. I am convinced that computer</div>
<div>
viruses are not evil and that programmers have a right to create</div>
<div>
them, posses them and experiment with them. That kind of a stand</div>
<div>
is going to offend a lot of people, no matter how it is presented.</div>
<div>
Even a purely technical treatment of viruses which simply dis-</div>
<div>
cussed how to write them and provided some examples would be</div>
<div>
offensive. The mere thought of a million well armed hackers out</div>
<div>
there is enough to drive some bureaucrats mad. These books go</div>
<div>
beyond a technical treatment, though, to defend the idea that viruses</div>
<div>
can be useful, interesting, and just plain fun. That is bound to prove</div>
<div>
even more offensive. Still, the truth is the truth, and it needs to be</div>
<div>
spoken, even if it is offensive. Morals and ethics cannot be deter-</div>
<div>
mined by a majority vote, any more than they can be determined</div>
<div>
by the barrel of a gun or a loud mouth. Might does not make right.</div>
<div>
<br /></div>
</div>
<div>
<div>
If you turn out to be one of those people who gets offended</div>
<div>
or upset, or if you find yourself violently disagreeing with some-</div>
<div>
thing I say, just remember what an athletically minded friend of</div>
<div>
mine once told me: “No pain, no gain.” That was in reference to</div>
<div>
muscle building, but the principle applies intellectually as well as</div>
<div>
physically. If someone only listens to people he agrees with, he will</div>
<div>
never grow and he’ll never succeed beyond his little circle of</div>
<div>
yes-men. On the other hand, a person who listens to different ideas</div>
<div>
at the risk of offense, and who at least considers that he might be</div>
<div>
wrong, cannot but gain from it. So if you are offended by something</div>
<div>
in this book, please be critical—both of the book and of yourself—</div>
<div>
and don’t fall into a rut and let someone else tell you how to think.</div>
</div>
<div>
<br /></div>
<div>
<div>
From the start I want to stress that I do not advocate</div>
<div>
anyone’s going out and infecting an innocent party’s computer</div>
<div>
system with a malicious virus designed to destroy valuable data or</div>
<div>
bring their system to a halt. That is not only wrong, it is illegal. If</div>
<div>
you do that, you could wind up in jail or find yourself being sued</div>
<div>
for millions. However this does not mean that it is illegal to create</div>
<div>
a computer virus and experiment with it, even though I know some</div>
<div>
people wish it was. If you do create a virus, though, be careful with</div>
<div>
it. Make sure you know it is working properly or you may wipe out</div>
<div>
your own system by accident. And make sure you don’t inadver-</div>
<div>
tently release it into the world, or you may find yourself in a legal</div>
<div>
jam . . . even if it was just an accident. The guy who loses a year’s</div>
<div>
worth of work may not be so convinced that it was an accident. And</div>
<div>
soon it may be illegal to infect a computer system (even your own)</div>
<div>
with a benign virus which does no harm at all. The key word here</div>
<div>
is responsibility. Be responsible. If you do something destructive,</div>
<div>
be prepared to take responsibility. The programs included in this</div>
<div>
book could be dangerous if improperly used. Treat them with the</div>
<div>
respect you would have for a lethal weapon.</div>
</div>
<div>
<br /></div>
<div>
<div>
This first of three volumes is a technical introduction to the</div>
<div>
basics of writing computer viruses. It discusses what a virus is, and</div>
<div>
how it does its job, going into the major functional components of</div>
<div>
the virus, step by step. Several different types of viruses are</div>
<div>
developed from the ground up, giving the reader practical how-to</div>
<div>
information for writing viruses. That is also a prerequisite for</div>
<div>
decoding and understanding any viruses one may run across in his</div>
<div>
day to day computing. Many people think of viruses as sort of a</div>
<div>
black art. The purpose of this volume is to bring them out of the</div>
<div>
closet and look at them matter-of-factly, to see them for what they</div>
<div>
are, technically speaking: computer programs.</div>
</div>
<div>
<br /></div>
<div>
<div>
The second volume discusses the scientific applications of</div>
<div>
computer viruses. There is a whole new field of scientific study</div>
<div>
known as artificial life (AL) research which is opening up as a result</div>
<div>
of the invention of viruses and related entities. Since computer</div>
<div>
viruses are functionally similar to living organisms, biology can</div>
<div>
teach us a lot about them, both how they behave and how to make</div>
<div>
them better. However computer viruses also have the potential to</div>
<div>
teach us something about living organisms. We can create and</div>
<div>
control computer viruses in a way that we cannot yet control living</div>
<div>
organisms. This allows us to look at life abstractly to learn about</div>
<div>
what it really is. We may even reflect on such great questions as the</div>
<div>
beginning and subsequent evolution of life.</div>
<div>
The third volume of this series discusses military applica-</div>
<div>
tions for computer viruses. It is well known that computer viruses</div>
<div>
can be extremely destructive, and that they can be deployed with</div>
<div>
minimal risk. Military organizations throughout the world know</div>
<div>
that too, and consider the possibility of viral attack both a very real</div>
<div>
threat and a very real offensive option. Some high level officials in</div>
<div>
various countries already believe their computers have been at-</div>
<div>
tacked for political reasons. So the third volume will probe military</div>
<div>
strategies and real-life attacks, and dig into the development of viral</div>
<div>
weapon systems, defeating anti-viral defenses, etc.</div>
</div>
<div>
<div>
You might be wondering at this point why you should</div>
<div>
spend time studying these volumes. After all, computer viruses</div>
<div>
apparently have no commercial value apart from their military</div>
<div>
applications. Learning how to write them may not make you more</div>
<div>
employable, or give you new techniques to incorporate into pro-</div>
<div>
grams. So why waste time with them, unless you need them to sow</div>
<div>
chaos among your enemies? Let me try to answer that: Ever since</div>
<div>
computers were invented in the 1940’s, there has been a brother-</div>
<div>
hood of people dedicated to exploring the limitless possibilities of</div>
<div>
these magnificent machines. This brotherhood has included famous</div>
<div>
mathematicians and scientists, as well as thousands of unnamed</div>
<div>
hobbyists who built their own computers, and programmers who</div>
</div>
<div>
<div>
love to dig into the heart of their machines. As long as computers</div>
<div>
have been around, men have dreamed of intelligent machines which</div>
<div>
would reason, and act without being told step by step just what to</div>
<div>
do. For many years this was purely science fiction. However, the</div>
<div>
very thought of this possibility drove some to attempt to make it a</div>
<div>
reality. Thus “artificial intelligence” was born. Yet AI applications</div>
<div>
are often driven by commercial interests, and tend to be colored by</div>
<div>
that fact. Typical results are knowledge bases and the like—useful,</div>
<div>
sometimes exciting, but also geared toward putting the machine to</div>
<div>
use in a specific way, rather than to exploring it on its own terms.</div>
</div>
<div>
<br /></div>
<div>
<div>
The computer virus is a radical new approach to this idea</div>
<div>
of “living machines.” Rather than trying to design something which</div>
<div>
poorly mimics highly complex human behavior, one starts by trying</div>
<div>
to copy the simplest of living organisms. Simple one-celled organ-</div>
<div>
isms don’t do very much. The most primitive organisms draw</div>
<div>
nutrients from the sea in the form of inorganic chemicals, and take</div>
<div>
energy from the sun, and their only goal is apparently to survive</div>
<div>
and to reproduce. They aren’t very intelligent, and it would be tough</div>
<div>
to argue about their metaphysical aspects like “soul.” Yet they do</div>
<div>
what they were programmed to do, and they do it very effectively.</div>
<div>
If we were to try to mimic such organisms by building a machine—</div>
<div>
a little robot—which went around collecting raw materials and</div>
<div>
putting them together to make another little robot, we would have</div>
<div>
a very difficult task on our hands. On the other hand, think of a</div>
<div>
whole new universe—not this physical world, but an electronic one,</div>
<div>
which exists inside of a computer. Here is the virus’ world. Here it</div>
</div>
<div>
<div>
can “live” in a sense not too different from that of primitive</div>
<div>
biological life. The computer virus has the same goal as a living</div>
<div>
organism—to survive and to reproduce. It has environmental ob-</div>
<div>
stacles to overcome, which could “kill” it and render it inoperative.</div>
<div>
And once it is released, it seems to have a mind of its own. It runs</div>
<div>
off in its electronic world doing what it was programmed to do. In</div>
<div>
this sense it is very much alive.</div>
</div>
<div>
<br /></div>
<div>
<div>
There is no doubt that the beginning of life was an impor-</div>
<div>
tant milestone in the history of the earth. However, if one tries to</div>
<div>
consider it from the viewpoint of inanimate matter, it is difficult to</div>
<div>
imagine life as being much more than a nuisance. We usually</div>
<div>
assume that life is good and that it deserves to be protected.</div>
</div>
<div>
<div>
However, one cannot take a step further back and see life as</div>
<div>
somehow beneficial to the inanimate world. If we consider only the</div>
<div>
atoms of the universe, what difference does it make if the tempera-</div>
<div>
ture is seventy degrees farenheit or twenty million? What difference</div>
<div>
would it make if the earth were covered with radioactive materials?</div>
<div>
None at all. Whenever we talk about the environment and ecology,</div>
<div>
we always assume that life is good and that it should be nurtured</div>
<div>
and preserved. Living organisms universally use the inanimate</div>
<div>
world with little concern for it, from the smallest cell which freely</div>
<div>
gathers the nutrients it needs and pollutes the water it swims in,</div>
<div>
right up to the man who crushes up rocks to refine the metals out</div>
<div>
of them and build airplanes. Living organisms use the material</div>
<div>
world as they see fit. Even when people get upset about something</div>
<div>
like strip mining, or an oil spill, their point of reference is not that</div>
<div>
of inanimate nature. It is an entirely selfish concept (with respect</div>
<div>
to life) that motivates them. The mining mars the beauty of the</div>
<div>
landscape—a beauty which is in the eye of the (living) beholder—</div>
<div>
and it makes it uninhabitable. If one did not place a special</div>
<div>
emphasis on life, one could just as well promote strip mining as an</div>
<div>
attempt to return the earth to its pre-biotic state!</div>
</div>
<div>
<br /></div>
<div>
<div>
I say all of this not because I have a bone to pick with</div>
<div>
ecologists. Rather I want to apply the same reasoning to the world</div>
<div>
of computer viruses. As long as one uses only financial criteria to</div>
<div>
evaluate the worth of a computer program, viruses can only be seen</div>
<div>
as a menace. What do they do besides damage valuable programs</div>
<div>
and data? They are ruthless in attempting to gain access to the</div>
<div>
computer system resources, and often the more ruthless they are,</div>
<div>
the more successful. Yet how does that differ from biological life?</div>
<div>
If a clump of moss can attack a rock to get some sunshine and grow,</div>
<div>
it will do so ruthlessly. We call that beautiful. So how different is</div>
<div>
that from a computer virus attaching itself to a program? If all one</div>
<div>
is concerned about is the preservation of the inanimate objects</div>
<div>
(which are ordinary programs) in this electronic world, then of</div>
<div>
course viruses are a nuisance.</div>
</div>
<div>
<br /></div>
<div>
<div>
But maybe there is something deeper here. That all depends</div>
<div>
on what is most important to you, though. It seems that modern</div>
<div>
culture has degenerated to the point where most men have no higher</div>
<div>
goals in life than to seek their own personal peace and prosperity.</div>
</div>
<div>
<div>
By personal peace, I do not mean freedom from war, but a freedom</div>
<div>
to think and believe whatever you want without ever being chal-</div>
<div>
lenged in it. More bluntly, the freedom to live in a fantasy world of</div>
<div>
your own making. By prosperity, I mean simply an ever increasing</div>
<div>
abundance of material possessions. Karl Marx looked at all of</div>
<div>
mankind and said that the motivating force behind every man is his</div>
<div>
economic well being. The result, he said, is that all of history can</div>
<div>
be interpreted in terms of class struggles—people fighting for</div>
<div>
economic control. Even though many in our government decry</div>
<div>
Marx as the father of communism, our nation is trying to squeeze</div>
<div>
into the straight jacket he has laid for us. That is why two of George</div>
<div>
Bush’s most important campaign promises were “four more years</div>
<div>
of prosperity” and “no new taxes.” People vote their wallets, even</div>
<div>
when they know the politicians are lying through the teeth.</div>
</div>
<div>
<br /></div>
<div>
<div>
In a society with such values, the computer becomes</div>
<div>
merely a resource which people use to harness an abundance of</div>
<div>
information and manipulate it to their advantage. If that is all there</div>
<div>
is to computers, then computer viruses are a nuisance, and they</div>
<div>
should be eliminated. Surely there must be some nobler purpose</div>
<div>
for mankind than to make money, though, even though that may be</div>
<div>
necessary. Marx may not think so. The government may not think</div>
<div>
so. And a lot of loud-mouthed people may not think so. Yet great</div>
<div>
men from every age and every nation testify to the truth that man</div>
<div>
does have a higher purpose. Should we not be as Socrates, who</div>
<div>
considered himself ignorant, and who sought Truth and Wisdom,</div>
<div>
and valued them more highly than silver and gold? And if so, the</div>
<div>
question that really matters is not how computers can make us</div>
<div>
wealthy or give us power over others, but how they might make us</div>
<div>
wise. What can we learn about ourselves? about our world? and,</div>
<div>
yes, maybe even about God? Once we focus on that, computer</div>
<div>
viruses become very interesting. Might we not understand life a</div>
<div>
little better if we can create something similar, and study it, and try</div>
<div>
to understand it? And if we understand life better, will we not</div>
<div>
understand our lives, and our world better as well?</div>
</div>
<div>
<br /></div>
<div>
<div>
A word of caution first: Centuries ago, our nation was</div>
<div>
established on philosophical principles of good government, which</div>
<div>
were embodied in the Declaration of Independence and the Consti-</div>
<div>
tution. As personal peace and prosperity have become more impor-</div>
</div>
<div>
<div>
tant than principles of good government, the principles have been</div>
<div>
manipulated and redefined to suit the whims of those who are in</div>
<div>
power. Government has become less and less sensitive to civil</div>
<div>
rights, while it has become easy for various political and financial</div>
<div>
interests to manipulate our leaders to their advantage.</div>
</div>
<div>
<br /></div>
<div>
<div>
Since people have largely ceased to challenge each other</div>
<div>
in what they believe, accepting instead the idea that whatever you</div>
<div>
want to believe is OK, the government can no longer get people to</div>
<div>
obey the law because everyone believes in a certain set of principles</div>
<div>
upon which the law is founded. Thus, government must coerce</div>
<div>
people into obeying it with increasingly harsh penalties for disobe-</div>
<div>
dience—penalties which often fly in the face of long established</div>
<div>
civil rights. Furthermore, the government must restrict the average</div>
<div>
man’s ability to seek recourse. For example, it is very common for</div>
<div>
the government to trample all over long standing constitutional</div>
<div>
rights when enforcing the tax code. The IRS routinely forces</div>
<div>
hundreds of thousands of people to testify against themselves. It</div>
<div>
routinely puts the burden of proof on the accused, seizes his assets</div>
<div>
without trial, etc., etc. The bottom line is that it is not expedient for</div>
<div>
the government to collect money from its citizens if it has to prove</div>
<div>
their tax documents wrong. The whole system would break down</div>
<div>
in a massive overload. Economically speaking, it is just better to</div>
<div>
put the burden of proof on the citizen, Bill of Rights or no.</div>
</div>
<div>
<br /></div>
<div>
<div>
Likewise, to challenge the government on a question of</div>
<div>
rights is practically impossible, unless your case happens to serve</div>
<div>
the purposes of some powerful special interest group. In a standard</div>
<div>
courtroom, one often cannot even bring up the subject of constitu-</div>
<div>
tional rights. The only question to be argued is whether or not some</div>
<div>
particular law was broken. To appeal to the Supreme Court will cost</div>
<div>
millions, if the politically motivated justices will even condescend</div>
<div>
to hear the case. So the government becomes practically all-pow-</div>
<div>
erful, God walking on earth, to the common man. One man seems</div>
<div>
to have little recourse but to blindly obey those in power.</div>
</div>
<div>
<br /></div>
<div>
<div>
When we start talking about computer viruses, we’re tread-</div>
<div>
ing on some ground that certain people want to post a “No Tres-</div>
<div>
passing” sign on. The Congress of the United States has considered</div>
<div>
a “Computer Virus Eradication Act” which would make it a felony</div>
<div>
to write a virus, or for two willing parties to exchange one. Never</div>
</div>
<div>
<div>
mind that the Constitution guarantees freedom of speech and</div>
<div>
freedom of the press. Never mind that it guarantees the citizens the</div>
<div>
right to bear military arms (and viruses might be so classified).</div>
<div>
While that law has not passed as of this writing, it may by the time</div>
<div>
you read this book. If so, I will say without hesitation that it is a</div>
<div>
miserable tyranny, but one that we can do little about . . . for now.</div>
</div>
<div>
<br /></div>
<div>
<div>
Some of our leaders may argue that many people are not</div>
<div>
capable of handling the responsibility of power that comes with</div>
<div>
understanding computer viruses, just as they argue that people are</div>
<div>
not able to handle the power of owning assault rifles or machine</div>
<div>
guns. Perhaps some cannot. But I wonder, are our leaders any better</div>
<div>
able to handle the much more dangerous weapons of law and</div>
<div>
limitless might? Obviously they think so, since they are busy trying</div>
<div>
to centralize all power into their own hands. I disagree. If those in</div>
<div>
government can handle power, then so can the individual. If the</div>
<div>
individual cannot, then neither can his representatives, and our end</div>
<div>
is either tyranny or chaos anyhow. So there is no harm in attempting</div>
<div>
to restore some small power to the individual.</div>
<div>
But remember: truth seekers and wise men have been</div>
<div>
persecuted by powerful idiots in every age. Although computer</div>
<div>
viruses may be very interesting and worthwhile, those who take an</div>
<div>
interest in them may face some serious challenges from base men.</div>
<div>
So be careful.</div>
</div>
<div>
<br /></div>
<div>
<div>
Now join with me and take the attitude of early scientists.</div>
<div>
These explorers wanted to understand how the world worked—and</div>
<div>
whether it could be turned to a profit mattered little. They were</div>
<div>
trying to become wiser in what’s really important by understanding</div>
<div>
the world a little better. After all, what value could there be in</div>
<div>
building a telescope so you could see the moons around Jupiter?</div>
<div>
Galileo must have seen something in it, and it must have meant</div>
<div>
enough to him to stand up to the ruling authorities of his day and</div>
<div>
do it, and talk about it, and encourage others to do it. And to land</div>
<div>
in prison for it. Today some people are glad he did.</div>
<div>
So why not take the same attitude when it comes to creating</div>
<div>
life on a computer? One has to wonder where it might lead. Could</div>
<div>
there be a whole new world of electronic life forms possible, of</div>
<div>
which computer viruses are only the most rudimentary sort? Per-</div>
<div>
haps they are the electronic analog of the simplest one-celled</div>
</div>
<div>
<div>
creatures, which were only the tiny beginning of life on earth. What</div>
<div>
would be the electronic equivalent of a flower, or a dog? Where</div>
<div>
could it lead? The possibilities could be as exciting as the idea of a</div>
<div>
man actually standing on the moon would have been to Galileo. We</div>
<div>
just have no idea.</div>
<div>
There is something in certain men that simply drives them</div>
<div>
to explore the unknown. When standing at the edge of a vast ocean</div>
<div>
upon which no ship has ever sailed, it is difficult not to wonder what</div>
<div>
lies beyond the horizon just because the rulers of the day tell you</div>
<div>
you’re going to fall of the edge of the world (or they’re going to</div>
<div>
push you off) if you try to find out. Perhaps they are right. Perhaps</div>
<div>
there is nothing of value out there. Yet other great explorers down</div>
<div>
through the ages have explored other oceans and succeeded. And</div>
<div>
one thing is for sure: we’ll never know if someone doesn’t look. So</div>
<div>
I would like to invite you to climb aboard this little raft that I have</div>
<div>
built and go exploring. . . .</div>
</div>
<div>
<br /></div>
</div>
praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com2tag:blogger.com,1999:blog-1698044337906971360.post-33333687781571991902013-02-22T08:21:00.002+05:302013-02-22T08:21:29.317+05:30Gadaikal Trek<div dir="ltr" style="text-align: left;" trbidi="on">
Gadaikal is a good trekking spot near Mangalore. It's about 65 km from Mangalore, near the town of Belthangdi, on the way to famous Dharmasthala. There are lots of buses from Mangalore to Dharmasthala, you have to get down at Belhangdi, and take an auto to Gadaikal, which is about 8 km from there.<br />
<br />
Gadaikal is a vertical stone about 1700 feet high. Tippu Sulthan had built a small fort at the very top, may be because it's the tallest place in the vicinity, and affords an all round view over the area. He had constructed steps till the very top, which makes the climb possible, on a vertical stone. Apart from the steps and small constructions, there are no much man made objects. The sport is remarkably free from plastic throw aways too. The view from the top is amazing, magnificent Coorg hills can be seen at a distance.<br />
<br />
Do carry lots of water (2L per person) and small snacks. Nothing is available on the top. Those scared of heights beware, at places, it's so scary that you may find it difficult to come down.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgotsSNc1GE9HfB6KSaxeY8mU2t5QLjyRB4hKPSM_5V1TM5urrSWwp_BDtXPgPVY9Mw_13osom5DsPgFuMuwa3P6JmcXTv9UsHf8DE6cbuSXw30RVEZJG_zAw53QacDhKrFA5r48nV0l7s/s1600/20130221_121850.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgotsSNc1GE9HfB6KSaxeY8mU2t5QLjyRB4hKPSM_5V1TM5urrSWwp_BDtXPgPVY9Mw_13osom5DsPgFuMuwa3P6JmcXTv9UsHf8DE6cbuSXw30RVEZJG_zAw53QacDhKrFA5r48nV0l7s/s320/20130221_121850.jpg" width="240" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6q1VP0u_6_U7yPG2_jnK0h9t5MB6oUU6cdUncwFqrkwVtT2FV8oiUjJTwvgK5qtEdimbX6Kn6QmfYo2tM9j_bZA7JuCw7jRhpZWbTJakPl5vm39LUuVFl0aE-r1TGQkXKRZwLGd-hsu0/s1600/20130221_124058.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6q1VP0u_6_U7yPG2_jnK0h9t5MB6oUU6cdUncwFqrkwVtT2FV8oiUjJTwvgK5qtEdimbX6Kn6QmfYo2tM9j_bZA7JuCw7jRhpZWbTJakPl5vm39LUuVFl0aE-r1TGQkXKRZwLGd-hsu0/s320/20130221_124058.jpg" width="240" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoEkq5RbO7G0Wy_M7kyzbVA8ndNtXyZUi7KuawbAhLhd8n5_OS4TlgTOSqS5LDEqsYpJCVVPvaHuBzFdHuSIGAz5wrpXEYOZyVN-p2ohMUaE1UnHM9QolIfbZUABxBk3kcxCJ-bsr9okM/s1600/20130221_111040.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoEkq5RbO7G0Wy_M7kyzbVA8ndNtXyZUi7KuawbAhLhd8n5_OS4TlgTOSqS5LDEqsYpJCVVPvaHuBzFdHuSIGAz5wrpXEYOZyVN-p2ohMUaE1UnHM9QolIfbZUABxBk3kcxCJ-bsr9okM/s400/20130221_111040.jpg" width="300" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIcSyDJma_F63751z0JKv3aVnYA4Ool_6GGJJy4C-NoVidO0LEGA3sXrgCca_NffPlMZtpeNyBcBsAkDREH4ZlSinaHezW7VIuJvf_2EQXcgeUUzoiZQQESabEXtrs_Ajc5cP8ZXllyaA/s1600/20130221_124313.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIcSyDJma_F63751z0JKv3aVnYA4Ool_6GGJJy4C-NoVidO0LEGA3sXrgCca_NffPlMZtpeNyBcBsAkDREH4ZlSinaHezW7VIuJvf_2EQXcgeUUzoiZQQESabEXtrs_Ajc5cP8ZXllyaA/s320/20130221_124313.jpg" width="240" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirGJElI2CCIM4ocxnp_R7G1OQ2eK4KQGoakk1xxNMFsMDms5SbodDRslFTGCaZvAeCuifA5Fg0shlqrmgfit9iOhoLU-GQc1jJ759Uh3icbwKpkt5rPWUo2x1tWFa9CtZRffYiFsZCkqg/s1600/IMG_20130221_121437.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirGJElI2CCIM4ocxnp_R7G1OQ2eK4KQGoakk1xxNMFsMDms5SbodDRslFTGCaZvAeCuifA5Fg0shlqrmgfit9iOhoLU-GQc1jJ759Uh3icbwKpkt5rPWUo2x1tWFa9CtZRffYiFsZCkqg/s320/IMG_20130221_121437.jpg" width="240" /></a></div>
<br /></div>
praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com1tag:blogger.com,1999:blog-1698044337906971360.post-64888015755389820812011-11-27T22:19:00.002+05:302011-11-27T22:24:28.017+05:30Sanath starts crawling<div dir="ltr" style="text-align: left;" trbidi="on"><div><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/6oXa1k5D4E8?feature=player_embedded' frameborder='0'></iframe>Sanath has started crawling since a couple of days. Most kids go backward first, trying to go forward. Sanath directly started going forward</div></div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com0tag:blogger.com,1999:blog-1698044337906971360.post-12928471158770836432011-09-08T20:21:00.002+05:302011-11-27T22:26:21.495+05:30Sanath Babu turns over<div dir="ltr" style="text-align: left;" trbidi="on"><div style="float: right; margin-left: 10px;"><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/4hdPdIEGl-w?feature=player_embedded' frameborder='0'></iframe></div></div>We were lucky to catch the occasion sanath rolled over for the first time. Sanjay is in bangalore, for his onam vacation. Arya as usual is in our room at night, trying out the dresses of Sanath. He was making efforts to roll over for the past 2 days, and I was shooting with veena's mobile. suddenly, he was successful. </div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com0tag:blogger.com,1999:blog-1698044337906971360.post-58275721837095405472011-08-24T19:01:00.002+05:302011-12-21T00:30:27.091+05:30Account management script in Python for Android<div dir="ltr" style="text-align: left;" trbidi="on"><br />
<div class="separator" style="clear: both; text-align: center;"></div><span class="Apple-style-span" style="background-color: orange;">for this script, you need to download <a href="http://code.google.com/p/android-scripting/">sl4a</a>. and also install python for android from the download page in this site. </span><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYx-nJFWT3zoPAewOHGANtDl1PccWKt4nrtRHcwh_6GwETzA6_d5mzubCJf5V8p9ILhts-M8IyTovMgFn4T-Q7DDz-RS3HqaS86owkiF0OWKwYMKxyDm3feMprTXW8f8-EAQYZ5gzRM20/s1600/Screenshot_2011-12-17-08-32-50+%25281%2529.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYx-nJFWT3zoPAewOHGANtDl1PccWKt4nrtRHcwh_6GwETzA6_d5mzubCJf5V8p9ILhts-M8IyTovMgFn4T-Q7DDz-RS3HqaS86owkiF0OWKwYMKxyDm3feMprTXW8f8-EAQYZ5gzRM20/s320/Screenshot_2011-12-17-08-32-50+%25281%2529.png" width="192" /></a></div><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">import android, os , datetime</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">droid = android.Android()</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">docdir = "./"</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">loop = 1</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">file_name=""</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">def select_account ():</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> dirfile = os.listdir (docdir)</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> dirfiles =[]</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> for f in dirfile :</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> if f[-4:]==".acc":</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> dirfiles.append (f)</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> if len(dirfiles) == 0:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.makeToast('no accounts')</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> return</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> d=droid.dialogCreateAlert("select file")</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogSetSingleChoiceItems(dirfiles)</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogSetPositiveButtonText('ok')</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogSetNegativeButtonText('cancel')</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogShow()</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> r=droid.dialogGetResponse().result</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> if r['which']== "negative":</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> return (1)</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> result = droid.dialogGetSelectedItems().result[0]</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> global file_name</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> file_name = dirfiles [result] </span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> return (0)</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">def add_dialogue():</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> if select_account () != 0:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> return</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> f = open (docdir + file_name, "a")</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogCreateAlert(None, None)</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogSetSingleChoiceItems(["receipt", "payment"], 0)</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogSetPositiveButtonText('ok')</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogShow()</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> r = droid.dialogGetResponse().result</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> receipt = droid.dialogGetSelectedItems().result[0] </span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> amount= droid.dialogGetInput("amount", None, None).result</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> try:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> famount = float (amount)</span><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCqBg-fmZ-ev7CT9faPl_rH550DHp9J4FCb6Nx8wkZKNMcBuzwTSGiiUh1edHjT1EwDq5PAAdaVEHawwwEz65Vk3FTcCo_1adqWKroWUBx9g7NQMtUD24UGAmRqlUyO96GOX2iRwhs4Ww/s1600/Screenshot_2011-12-17-08-33-02+%25281%2529.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCqBg-fmZ-ev7CT9faPl_rH550DHp9J4FCb6Nx8wkZKNMcBuzwTSGiiUh1edHjT1EwDq5PAAdaVEHawwwEz65Vk3FTcCo_1adqWKroWUBx9g7NQMtUD24UGAmRqlUyO96GOX2iRwhs4Ww/s320/Screenshot_2011-12-17-08-33-02+%25281%2529.png" width="192" /></a><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> if receipt == 1:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> famount = -famount</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> except:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> return</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> head = droid.dialogGetInput("description", None, None).result </span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> out_string = str(datetime.date.today()) + " :: " + head + " :: " + str(famount)</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> f.write (out_string +"\n")</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.makeToast(out_string)</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">def show_dialogue():</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> if select_account () != 0:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> return </span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> f= open ( docdir+ file_name , "r")</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> lines = f.readlines ()</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> message = ""</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> total= 0</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> for line in lines:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> values = line.split (" :: ")</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> message = '%+6.0f : %-8s : %s\n' % ( float ( values[2]), values[1][:8], values[0][5:]) + message</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> total += float (values[2])</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> message = "Total = " + str(total) + "\n\n" + message</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogCreateAlert(None, message)</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogShow()</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogGetResponse()</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">def create_account ():</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> f = droid.dialogGetInput('Account name', None, None).result</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> if f == None:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> return</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> f = docdir + f +".acc"</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> file = open (f, "w")</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> file.close ()</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.makeToast('created file: ' + f)</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">while loop:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogCreateAlert(None, None)</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogSetSingleChoiceItems(["add transaction", "show accounts", "create account"], 0)</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogSetPositiveButtonText('ok')</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogSetNegativeButtonText('exit')</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> droid.dialogShow()</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> r=droid.dialogGetResponse().result</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> if r['which']== "negative":</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> os._exit (1)</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> result = droid.dialogGetSelectedItems().result[0] </span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> if result == 0 :</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> add_dialogue()</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> elif result == 1:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> show_dialogue()</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> else:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> create_account ()</span><br />
<div><br />
</div></div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com0tag:blogger.com,1999:blog-1698044337906971360.post-68818649271204945032011-07-05T15:10:00.000+05:302011-07-05T15:10:25.776+05:30Why do we sleep<div dir="ltr" style="text-align: left;" trbidi="on">People think we sleep to take rest. But we can rest without sleeping. Not all of us rest while we sleep. Not surely the heart or respiratory muscles. And if your brain rested, we won't have any dreams.<br />
<br />
The purpose of sleep always intrigued me. And I was not alone. At least a few other people were there too. I found these two sites (<a href="http://bigthink.com/ideas/23035">big think</a> and <a href="http://www.physorg.com/news/2011-02-why-do-we-sleep.html">physorg.com</a>) where the neuroscientists' opinion about the matter is discussed. Basically they think the reason for sleep is either :<br />
<ul style="text-align: left;"><li><span style="color: blue;">information processing theory</span> - to sort out the informations that have come in during the day (brain <a href="http://en.wikipedia.org/wiki/Defragmentation">defragmentation</a>?)</li>
<li><span style="color: blue;">damage reversal theory</span> - to remove free radicals and other noxious substances generated by 'heated thinking' during the day</li>
<li><span style="color: blue;">adaptive inactivity theory</span> - by UCLA neuroscientist Jerome Siegel, which says that sleep optimizes the timing of our activity.</li>
</ul>I prescribe to the last POV. Sleep is not a physiologically necessary process. Our body can rest, take care of free radicals and organize memory without sleeping, if it needed to.<br />
<br />
Evolutionarily it takes a lot to adapt to a particular environment. So all organisms, are adapted to one or the other kind of environment (called ecological niche). Then, at the same place, the environment changes vastly during the 24 hours a day. Animals behavior is expected to vary greatly during the day and night. For one animal, it may be difficult to be this versatile, so, nature makes it adapted to one of the time period in a day, and sleep during the other.<br />
Pretty neat? </div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com1tag:blogger.com,1999:blog-1698044337906971360.post-73543266904656493812011-07-03T06:53:00.000+05:302011-07-03T06:53:30.618+05:30android scripting using python<div dir="ltr" style="text-align: left;" trbidi="on">Android has a beautiful scripting platform '<a href="http://code.google.com/p/android-scripting/">sl4a</a>'. You can script using lot of languages perl, python, shell etc in it. It has a good API for system calls like sending sms, making calls etc.<br />
<br />
I've written a small script in python to send a group sms with individualised content.<br />
<br />
<br />
<div style="background-color: cyan; font-size: small;"><br />
import android, os, re<br />
<br />
droid = android.Android()<br />
docdir = "/mnt/sdcard/document"</div><br />
<br />
<br />
<br />
Android calls are in android module. other modules like sys, os, re are available. <br />
<br />
<br />
<div style="background-color: cyan; font-size: small;"><br />
message =droid.dialogGetInput('message', ' extras: 0 name,1 mail', None).result<br />
subject =droid.dialogGetInput('subject', '', None).result</div><br />
<br />
message windows can be created using API calls.<br />
<br />
<br />
<div style="background-color: cyan; font-size: small;"><br />
dirfile = os.listdir (docdir)<br />
dirfiles =[]<br />
for f in dirfile :<br />
if f[-4:]==".sms":<br />
dirfiles.append (f)<br />
d=droid.dialogCreateAlert("select file")<br />
droid.dialogSetSingleChoiceItems(dirfiles)<br />
droid.dialogSetPositiveButtonText('ok')<br />
droid.dialogSetNegativeButtonText('cancel')<br />
droid.dialogShow()<br />
r=droid.dialogGetResponse().result<br />
if r['which']== "negative":<br />
os._exit (1)<br />
result = droid.dialogGetSelectedItems().result[0]<br />
selfile = dirfiles [result]<br />
</div><br />
All files in a directory ending with .sms is presented and the user is asked to select one of the files. <br />
<br />
<br />
<div style="background-color: cyan; font-size: small;"><br />
<br />
file = open (docdir + os.sep+ selfile, "r")<br />
lines = file.readlines ()<br />
contacts = []<br />
numbers =[]<br />
extras =[]<br />
mail =""<br />
for line in lines:<br />
f = line.split (",")<br />
if len (f[0])>0 :<br />
numbers.append (f[0])<br />
contacts.append (f[1])<br />
extras.append (f[1:])<br />
if len (f[1])>0 :<br />
mail = mail + f[2].replace(" ","").replace ("\n","") + ","</div><br />
The .sms file is a comma seperated file whose first field is the contact number, second contact name, third his email, and any optional field which can be referred as $n in the message. <br />
<br />
<br />
<div style="background-color: cyan; font-size: small;"><br />
d=droid.dialogCreateAlert("select contacts")<br />
n = len (contacts)<br />
droid.dialogSetMultiChoiceItems(contacts, range (n))<br />
droid.dialogSetPositiveButtonText('ok')<br />
droid.dialogSetNegativeButtonText('cancel')<br />
droid.dialogShow()<br />
r=droid.dialogGetResponse().result<br />
if r['which']== "negative":<br />
os._exit (1)<br />
send_contacts= droid.dialogGetSelectedItems().result<br />
<br />
for s in send_contacts :<br />
m= message<br />
for d in range(len(extras [s])):<br />
m = m.replace ("$"+str(d), extras[s][d])<br />
m=re.sub('\$\d','',m)<br />
droid.smsSend(numbers [s], m)<br />
print contacts[s] , m<br />
droid.sendEmail(mail, subject, message, None)<br />
</div><br />
The user is presented a list of contacts to select from, to whom to send the message. The script also sends an email with the same message (without personalisation)</div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com1tag:blogger.com,1999:blog-1698044337906971360.post-28740501503408482802011-06-03T19:40:00.000+05:302011-06-03T19:40:24.219+05:30Evolution of Sexes<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB77r41kRMBUiBDMYEvCmjKp1NFhO4w3DQfnzv9f6bj9xlWBw-2k2H4W1em07TrDPAPKb1zNAp_GHieE-W9F497OR4PZpCRU-dREv3hmFFntbzMgCA-9Rez7SuSHx2AMNJlcvMoYDPtBc/s1600/images.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB77r41kRMBUiBDMYEvCmjKp1NFhO4w3DQfnzv9f6bj9xlWBw-2k2H4W1em07TrDPAPKb1zNAp_GHieE-W9F497OR4PZpCRU-dREv3hmFFntbzMgCA-9Rez7SuSHx2AMNJlcvMoYDPtBc/s1600/images.jpeg" /></a></div><i> Want to know why there are sexes at all? </i><br />
<i>Or Why there are two sexes?</i><br />
<i>Or why the sexes are different?</i><br />
<i>Read on </i><br />
<br />
As you know, evolution shapes it all. We can refer to this non-existent ethereal concept as a person or object, because it works out things mathematically, and often we can 'predict' in biology with evolutionary theory. We can do some armchair theorizing also, with the help of TOE (Theory of evolution).<br />
<br />
<br />
<h3> How sexes evolved </h3><br />
As you already know, at first there were asexual organisms and asexual reproduction. The progeny just resembled the parent, and the evolution and adaption to the environment was slow. When the gametes of two organisms exchange their genetic material, the offspring carries different combination of the species' genes, and thus, the population comprised individuals with different characters, which let the evolutionary force select the fitter ones. Thus when sexual reproduction appeared in the scene, it had advantage over the asexually reproducing ones, and they out-populated them soon. The advantage was worth the pain of evolving the complex mechanisms for this purpose, but as seen repeatedly, nature (or evolution) can go to any length, for a survival advantage.<br />
<br />
<br />
<h3> Why sexes are different </h3><br />
The sexual reproduction only requires that the offsprings are produced by exchange of genetic material between different individuals. Not between two sexes.<br />
Then why there are two sexes? Because there are different sex chromosomes? The sex chromosomes are different because, they are needed to produce the differences in male and female, not the other way.<br />
In the beginning, indeed there was no different sexes. Any individual could exchange the genetic material with any other of the same species. (You can call all individuals were unisex or that all were true hermaphrodites. All chromosomes were same in all individuals. There were no sex chromosomes.<br />
The advantage of different sexes was in the sea, where life was thriving then. The organisms used to move in the sea, either carried by the current or by swimming with own power. The chance of meeting another individual of same species, and then mating and passing one's genes to next generation before one's death was a big thing then. The organisms adopted all possible strategies to achieve this. One organism could increase it's chance mainly by two strategies. Either moving fast and far, or by becoming big and easily seen. So, different individuals of same species adopted these strategies, and both were mutually exclusive. To move fast, one has to be small, and to be easy target, one has to be big. There cant be intermediate organisms. So all species evolved their members into two distinct sets, one big and one small. They had to have distinct genetics, distinct genetic control mechanisms (steroid hormones control the expression of genes) etc. So, sexes evolved to evolve members of different characters, especially sizes. As the species evolved, and required different characters in different enviornments, the difference between sexes also kept varying, and adopting.<br />
<br />
<br />
<h3>Why the sexes have different characters? </h3><br />
Our steroids make us different not only in sexual organs, but all over physically, on our muscles, shape, psyche etc. These differences are required for the differing needs of the different strategies of two sexes.<br />
To this date, we have retained some of the original characters of sex differences, male gametes are small and fast and female ova are big and non-motile. Only that the original character has moved from the individual to it's gamete!<br />
The individual itself also retains these original characters. The females are stationary, like to attract males, be the target. Males run around, eying any female at sight, and are involved in temporary relationships! We still carry the characters of those small insignificant creates in the sea!</div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com1tag:blogger.com,1999:blog-1698044337906971360.post-72392843534845292972011-04-30T21:03:00.002+05:302011-04-30T22:52:13.336+05:30Does drinking cold water cause soar throat?<div dir="ltr" style="text-align: left;" trbidi="on">People got this wrong idea. Soar throat is an infection, and is not caused by a physical insult (that too just bit cold water). There are few references available. see the link below:<br />
<br />
<a href="http://answers.google.com/answers/threadview?id=455447">Read these references</a><br />
<br />
<br />
<br />
Published with Blogger-droid v1.6.8</div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com0tag:blogger.com,1999:blog-1698044337906971360.post-23098320942335496372011-04-22T14:46:00.002+05:302011-11-27T22:27:12.071+05:30New member in our family<div dir="ltr" style="text-align: left;" trbidi="on"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/dCtmB4V4mdA?feature=player_embedded' frameborder='0'></iframe>Veena had her second cesarean yesterday (May 22nd.) Dr Jayakrishnan was the anesthetist. Dr Vinod was Pediatrician. Everything went on smooth, baby cried immediately, Veena was fine afterwards. (Though she was quite apprehensive in the begining)<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-UQeiIrxrFWXOtCS4tcjQQdv3zn6_oG-0ZMZXdGRsQa81iGLTQib-ZwZLs0B7TQNSnJzfFchPbhrSsiOm7MEayYOAp2EgS4_Nlow9tyzLqRuvXHme9EIydkjAEC1puQ9Sm5uobhypNDY/s1600/2011-04-22+09.17.44_edit0.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-UQeiIrxrFWXOtCS4tcjQQdv3zn6_oG-0ZMZXdGRsQa81iGLTQib-ZwZLs0B7TQNSnJzfFchPbhrSsiOm7MEayYOAp2EgS4_Nlow9tyzLqRuvXHme9EIydkjAEC1puQ9Sm5uobhypNDY/s320/2011-04-22+09.17.44_edit0.jpg" width="203" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkFgItzCawTF5ksvOFO4Yhyh38OT-1KbXnT7m45cwc3gsGcfzLD7njLUUhH66L44hQ64n9fyA_Lk3cQpR9YszS5CHxbd1Lh_m6zje-JLv6aCy_gkhh4RlZsvd8MxeNjhUCcKQNILym4Js/s1600/2011-04-22+12.27.59_edit0.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkFgItzCawTF5ksvOFO4Yhyh38OT-1KbXnT7m45cwc3gsGcfzLD7njLUUhH66L44hQ64n9fyA_Lk3cQpR9YszS5CHxbd1Lh_m6zje-JLv6aCy_gkhh4RlZsvd8MxeNjhUCcKQNILym4Js/s320/2011-04-22+12.27.59_edit0.jpg" width="240" /></a></div></div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com0tag:blogger.com,1999:blog-1698044337906971360.post-13422723079094031482011-04-20T15:53:00.000+05:302011-04-20T15:53:30.570+05:30An Introductory guide to Android phones<div dir="ltr" style="text-align: left;" trbidi="on">I was quite skeptical about smartphones, and believed mobile phones are best used as only phones. In the past I had tried windows mobile phones (about which I was quite impressed) and moto rokr linux phone, but still, I thought they will never take over the functions of a computer.<br />
<br />
Then iPhone (by Apple computers) came along, which was quite expensive, and then <a href="http://www.thegooglestory.com/">Google Inc</a>- the company that does everything right- ventured into making smartphone operating system, Android, about two years ago. The company started with its search engine, Google, which became synonymous with data search on the internet, for which computers are primarily used by most of the people. Android phones too, were quite expensive, but recently many mid and lower end androids have come to market, and become quite affordable, which offer almost the same functionalities of an expensive phone.<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuK3zbVv1Rg3ce9BhHPAnHFQWpUhbWcf560T9FI5BjBSv-NWjsnRIN2Mydb9DPsP5-8Yw97Qlaqd9zntSTMCIZBX9PKqOhY_RYN7373hT103PT_VestTTsBEayetE2sPtUjPKEI_zCEbU/s1600/galaxy.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuK3zbVv1Rg3ce9BhHPAnHFQWpUhbWcf560T9FI5BjBSv-NWjsnRIN2Mydb9DPsP5-8Yw97Qlaqd9zntSTMCIZBX9PKqOhY_RYN7373hT103PT_VestTTsBEayetE2sPtUjPKEI_zCEbU/s320/galaxy.jpg" width="218" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Samsung Galaxy Android phone</td></tr>
</tbody></table><br />
<b>Android or iPhone:</b><br />
Both phones are quite impressive, and fans argue vehemently on either side. A comment on Youtube best summed up the comparison of two phones as: iPhone is sturdy, impressive in style, and easy to use, but limited in customisation and the user is confined to what Steve Jobs (Apple founder and CEO. Please see his great speech <a href="http://www.youtube.com/watch?v=D1R-jKKp3NA">here</a>) gives him. Android is endless power to end user, runs on sturdy lnux platform, but not so user friendly and easy as iPhone. So, if you want to have a nice cute easy phone, go for iPhone, but if you want endless power of a mini unix computer in your hand, go for Android.<br />
<b><br />
</b><br />
<b>Android Operating system:</b><br />
Android runs on the famous Linux operating system, which is a Unix derivative. Unix operating system long preceded any other operating system known today, including windows, and still a major operating system, that's amazingly scalable, used from small embedded systems to super computers and satellites. It's underlying idea is so simple and beautiful, that, unix enthusiasts refer to it as <a href="http://en.wikipedia.org/wiki/Unix_philosophy">Unix Philosophy</a>. Google created a layer on Linux operating system, to make it easy for programmers to write programs in Java, a popular programming language.<br />
<b><br />
</b><br />
<b>Endless Options:</b><br />
When you install a third party application in android phone, it gets the same privileges of the stock programs (if you grant it). That means, you can replace the dialer interphase, sms application, everything. You can make the phone look and behave like a windows 7 phone or iPhone! Android applications are created as diffferent components, which can be invoked by a particular message (Intent). If you write a particular application to send sms, and you want to use it's second screen (activity, in android lingo) in some other application, it's possible. Android is true multi-tasking environment (which, surprisingly, is not the case with iPhone), and user simply switches the apps. The apps remain open in memory, and android closes them, when memory is to be recovered, user doesn't have to close a program. In iPhone, if you switch apps the first app is immediately closed; and if the first app is to be opened again, it has to be loaded again to memory. <br />
<br />
<b>More than a Computer:</b><br />
Beyond the normal use to browse, email, chat and social networking, androids can be used to make phone calls! LOL.<br />
<b></b>And beyond these normal functions, the phone has sensors, which sense orientation, acceleration, temperature, pressure, proximity etc. The Google sky is an application that uses sensors in a great way, and when you turn the phone to any direction, the apps shows you the stars in the sky in that direction. Layar is an application that superimposes the location details (such as coffeshops, ATM machines) on the phone camera view. If you just point your phone to a building, you can know what it is, what all interesting places it contains etc! Sensors are used in gaming too, like in car races, where steering done by tilting the phone to either side.<br />
<br />
to conclude, I love my Android. </div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com1tag:blogger.com,1999:blog-1698044337906971360.post-63776226263968798502011-02-28T22:52:00.000+05:302011-02-28T22:52:19.076+05:30javascript image slideshow<div dir="ltr" style="text-align: left;" trbidi="on">php used to open a directory, select image files in it (even if it contains only images, this check is necessary, otherwise, we'll get '.' and '..' files too. php 'echos' a script which initialises an array of images of these images. the browser just gets the script text from the server, which makes it set the array. <br />
<br />
<div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"><?php</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;">if (!$dir=opendir("activities")) echo "could not open dir" ;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;">$javastr = "<script language=\"javascript\">";</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;">$javastr .= "var d = new Array();";</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;">$num=0;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;">while ( ($file = readdir($dir)) != false ) </span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;">{</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> if (preg_match ("/.jpg$/i",$file)) {</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> $name = preg_replace("/.jpg$/","",$file);</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> $javastr .= "d[$num] = new Image();";</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> $javastr .= "d[$num].src = 'activities/$file';";</span></div><div style="background-color: #cfe2f3; text-align: left;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> $javastr .= "d[$num].name = \"$name\"; ";</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> $num++;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> }</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;">}</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;">$javastr .= "</script>";</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;">echo $javastr;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;">?></span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"><span style="background-color: white;"></span></span> </div><div style="background-color: white;"><br />
</div><div style="background-color: white;">a placeholder 'div' defined.</div><div style="background-color: white;"><br />
</div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"><div id="para"></span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"><div id="activity_div" ></span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> <div id="slide_caption" ></div></span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> <div id="slider"><img name="slide" /></div></span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"></div> </span></div><br />
<br />
In the javascript, a function is iterated to change the slides, passing it the serial number of the slide to be put up. It calls another function which calls itself, till it has finished fading out the current slide, change the image source of the slide, then fading in the slide. The loop is within the nested function. In javascript, nested function cannot be called within a loop, so, it can't be in the first function.<br />
<br />
<div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"><script language="javascript" ></span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> var num=0;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> document.images.slide.src=d[num].src;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> document.getElementById("slide_caption").innerHTML = d[num].name;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> function slideit() {</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> var alfa = 0;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> num++;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> if (num==d.length) num=0;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> setalpha(num,alfa);</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> setTimeout("slideit()",2500);</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> }</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> function setalpha(numm, alpha) {</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> if (alpha>2) return;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> if (alpha<1) {</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> document.getElementById("slider").style.opacity = 0.9-alpha;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> }</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> else if (alpha>1.1) {</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> document.getElementById("slider").style.opacity = alpha-1;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> }</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> else {</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> document.images.slide.src=d[numm].src;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> document.getElementById("slide_caption").innerHTML = d[numm].name;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> }</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> alpha += 0.1;</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> setTimeout(function() {setalpha(numm,alpha);},50);</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> }</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"> slideit();</span></div><div style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3; font-family: "Courier New",Courier,monospace;"></script></span></div><br />
the sample site:<br />
<a href="http://midtownpayyanur.orgfree.com/activities.php">http://midtownpayyanur.orgfree.com/activities.php</a></div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com2tag:blogger.com,1999:blog-1698044337906971360.post-78276552370777664972011-02-26T14:31:00.005+05:302011-02-26T14:56:44.229+05:30Javascript multiple image fadein<div dir="ltr" style="text-align: left;" trbidi="on">I just got multiple images to fade-in on page load using javascript. I thought, i 'll put down how to do it, since all online helps were bit confusing, at the least.<br />
<br />
at first, there's an<span style="font-family: "Courier New",Courier,monospace;"> <span style="background-color: #d0e0e3; color: black;">onLoad</span></span> event handler for<span style="background-color: white;"> </span><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;">img</span> tag. All tutorials just teach you<span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;"><span style="background-color: white;"> </span>body</span> tags <span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;">onLoad</span><span style="background-color: #d0e0e3;"> </span>event handler. <br />
<br />
Then, since we are handling multiple images, you have to pass in the image reference to repeat calls of function to change the alpha of the image. here<br />
<div style="background-color: #d0e0e3;"><span style="font-family: "Courier New",Courier,monospace;">setTimeout("function_to_change_alpha("+img+")",interval);</span> </div>doesnt work. (for reasons beyond my comprehension about javascript quirks.)<br />
the rightway to do it is, by using closure:<br />
<div style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;">setTimeout(function() {function_to_change_alpha(img);}, interval);</div><br />
For unknown reasons, i couldn't read the opacity property of the object (image) thus passed.<br />
<span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #d0e0e3;">mOpacity = obj.style.opacity;</span> </span>didn't work.<br />
I had to pass in the current opacity value also, to the function and increment it in the function.<br />
<br />
Thus, the final version of the function was:<br />
<div style="background-color: #d0e0e3;"><br />
</div><div style="background-color: #d0e0e3;"><span style="font-family: "Courier New",Courier,monospace;">fadeimage = function (obj, opc) {</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> if (opc==undefined) opc=0;</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> opc += 0.1;</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> obj.style.opacity = opc ;</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> if (opc<1){</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> setTimeout(function() {fadeimage(obj,opc);},300);</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> }</span><br />
<span style="font-family: "Courier New",Courier,monospace;">}</span></div><div style="background-color: white;"><br />
</div>I used a php script to dynamically load images in a directory, and assign it's filenames as captions to the images, and assign the above fade-in function to images' onload event. <br />
<br />
<div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;">if (!$dir=opendir("photos")) echo "could not open dir" ;</span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;">while ( ($file = readdir($dir)) != false ) {</span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;"> if (preg_match ("/.jpg$/i",$file)) {</span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;"> $name = $file;</span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;"> $name = preg_replace("/.jpg/","",$name);</span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;"> $name = preg_replace('/\b(\w)/e', 'strtoupper("$1")', $name); </span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;"> </span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;"> if ($row ==0) echo "<tr>";</span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;"> echo '<td> <img src="photos/'.$file.'" class="fadinimage" onLoad="fadeimage(this);"><br><center>'.$name.'</center></td>';</span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;"> $row ++;</span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;"> if ($row==2 ) {</span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;"> echo "</tr>";</span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;"> $row =0;</span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;"> }</span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;"> }</span></div><div style="background-color: #d0e0e3;"><span style="background-color: #d0e0e3; font-family: "Courier New",Courier,monospace;">}</span></div><br />
and finally set the alpha of the <span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: #d0e0e3;">.fadeimage</span> </span>class to 0 in the css file. <br />
<br />
here's the final site:<br />
<a href="http://www.blogger.com/goog_1884262858"><br />
</a><br />
<a href="http://midtownpayyanur.orgfree.com/photos.php">http://midtownpayyanur.orgfree.com/photos.php</a></div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com1tag:blogger.com,1999:blog-1698044337906971360.post-3027255344727291862011-02-24T02:27:00.000+05:302011-02-24T02:27:47.611+05:30Paithalmala trip<div dir="ltr" style="text-align: left;" trbidi="on"><h6 class="uiStreamMessage" data-ft="{"type":"msg"}" style="font-weight: normal;"><span style="font-size: small;"><span class="messageBody"><br />
we had a marvelous trip to Paithalmala, along with Taliparamba Lions club on Feb 19,20. our stay was arranged at Vaithalmala resorts. had a camp fire there on 19th eve. </span></span></h6><h6 class="uiStreamMessage" data-ft="{"type":"msg"}" style="font-weight: normal; text-align: left;"><span style="font-size: small;"><span class="messageBody">on 20th we set out to the peak. It was not as tedious, and all members made it easily. we had tapioka biriyani (arranged by the resort) at the pea<span class="text_exposed_hide">...</span><span class="text_exposed_show">k. we were back at resort for lunch, which was a sumptuous kerala meal.</span></span></span></h6><h6 class="uiStreamMessage" data-ft="{"type":"msg"}" style="font-weight: normal; text-align: left;"><span style="font-size: small;"><span class="messageBody"><span class="text_exposed_show"> </span></span></span></h6><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLj-4D4GU2YM4dYbhYv-oAzW51ooEq9wdYRt6cGtZrkCGHaalmy2uOWKbGIKYXi5C5WjRzUz2zJl7zIp1AW4Hm8NlINa2rIxWBHdgmwXVfWBv1gRTQQl41K0J6XJhuXtye5rOHsNLy-8k/s1600/sm037.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLj-4D4GU2YM4dYbhYv-oAzW51ooEq9wdYRt6cGtZrkCGHaalmy2uOWKbGIKYXi5C5WjRzUz2zJl7zIp1AW4Hm8NlINa2rIxWBHdgmwXVfWBv1gRTQQl41K0J6XJhuXtye5rOHsNLy-8k/s320/sm037.jpg" width="320" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQXmuITLZ672WhKUWODHUv_DnpRj04dpmVs_TtrpWCeyKRcTM4GUpPM5pwKm5dLlQn36Kk1YoYziNenNtlf0B4Q_WC-Xb-mdWkCILvpu8hSdJRK0FGwM69QEqdZU2VQyrtusFzYXS_F2E/s1600/sm038.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQXmuITLZ672WhKUWODHUv_DnpRj04dpmVs_TtrpWCeyKRcTM4GUpPM5pwKm5dLlQn36Kk1YoYziNenNtlf0B4Q_WC-Xb-mdWkCILvpu8hSdJRK0FGwM69QEqdZU2VQyrtusFzYXS_F2E/s320/sm038.jpg" width="213" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCjjMscIMF1Ijf2xUNa6WoSXF7Lx7v_Xsw77h7Jn__dp57AgCLmg8_H4W6RPdgo7IGPO73RFIgtVPR_60OqT1oaqu7PSEva4i9HwTNRzfvFwdQYERwgui8Jxr0eKjm1k1W38RAK7flhiA/s1600/sm043.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCjjMscIMF1Ijf2xUNa6WoSXF7Lx7v_Xsw77h7Jn__dp57AgCLmg8_H4W6RPdgo7IGPO73RFIgtVPR_60OqT1oaqu7PSEva4i9HwTNRzfvFwdQYERwgui8Jxr0eKjm1k1W38RAK7flhiA/s320/sm043.jpg" width="320" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-bHS6wbObasY/TWV0qYPIerI/AAAAAAAAAVM/s1600/sm047.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br />
</a></div></div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com4tag:blogger.com,1999:blog-1698044337906971360.post-50577214328371844732011-02-08T19:48:00.001+05:302011-02-08T19:58:19.801+05:30How to print an online marriage/death/birth certificate in KERALA<div dir="ltr" style="text-align: left;" trbidi="on">The govt of Kerala has made it easy to register the birth/death/marriage events (it takes only few minutes !!) and then obtain a hard copy of the certificate at the convenience, sitting at your home. Its 'information Kerala Mission' makes this possible.<br />
<br />
<br />
to obtain the cirtificate:<br />
<br />
1. visit <a href="http://www.cr.lsgkerala.gov.in/">www.cr.lsgkerala.gov.in</a><br />
2. click on 'registration search'<br />
3. select the municipality <br />
4. select Birth/Death/Marriage from left side Menu<br />
5. Fill the right side form with details<br />
6. click on 'Search'<br />
7. click on 'View' button<br />
8. click on 'Print'</div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com20tag:blogger.com,1999:blog-1698044337906971360.post-51787803827190360482011-02-02T02:48:00.001+05:302011-02-02T02:51:16.633+05:30BSNL GPRS settings<div dir="ltr" style="text-align: left;" trbidi="on">had lot of trouble setting up bsnl gprs settings on my android. there are confusing settings given in bsnl and other websites. but in the end, it turned out to be very simple. <br />
<br />
<span style="color: black;"><b> Connection Name = bnslnet(or anything)</b></span><br />
<b><span style="color: black;"> Data Bearer = GPRS</span></b><br />
<b><span style="color: black;"> Access point name = <span style="color: red;">bsnlnet </span></span></b><br />
<b><span style="color: black;"> User Name = none</span></b><br />
<b><span style="color: black;"> Password = No</span></b><br />
<br />
<span style="color: black;">dont enter anything in user name field, but in the password field, enter "No". </span><br />
<span style="color: black;"> </span><br />
<span style="color: black;">I also installed APNdroid, which lets me switch gprs on and off. </span><b><span style="color: black;"></span></b><br />
<b><span style="color: black;"><br />
</span></b><br />
<b><span style="color: black;"><br />
</span></b><br />
<b><span style="color: black;"><a href="http://nxwiki.blogspot.com/2010/04/bsnl-gprs-settings-for-nokia.html">http://nxwiki.blogspot.com/2010/04/bsnl-gprs-settings-for-nokia.html</a><br />
</span></b></div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com1tag:blogger.com,1999:blog-1698044337906971360.post-83444575236329308362010-11-24T13:41:00.001+05:302012-11-30T10:17:57.295+05:30How insurance gonna raise health care cost<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<br />
The insurance in health sector is on the rise in India. It is indeed beneficial to the patients, when a disease strikes and huge expenses are incurred in the treatment. Treatment cost is usually not considered in a family's budget and they are often caught unaware and left devastated by a sudden disease. <br />
<br />
But, there are problems we are gonna have with insurance. People pay premium and think it's their duty to utilise the insurance to the maximum. People seek unnecessary treatment, do investigations without proper indications, and seek expensive treatments. This would raise the total per-capita treatment cost. All expenses are inturn recovered by the insurance companies from the people, by raising the premium. <br />
<br />
<br />
As the time goes by health care costs will rise. People will hardly question the value for money of the treatment, as it looks free to them. Insurance will become must or an unexpected disease will be totally devastating, more than it's now. The insurance will only be available at high premium, that's a big proportion of family's monthly income. <br />
<br />
The only people who gain from this will be large corporate hospitals.<br />
<div style="clear: both; font-size: xx-small; text-align: center;">
Published with Blogger-droid v1.6.5</div>
</div>
praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com0tag:blogger.com,1999:blog-1698044337906971360.post-48069326223684310682010-11-08T14:39:00.000+05:302010-11-08T14:39:16.355+05:30Trip to Ranipuram (7/11/10)<a href="http://1.bp.blogspot.com/_MFlhoNfJZ5E/TNe7ukUUcuI/AAAAAAAAAO4/uGy5f5X1s94/s1600/nov10+006_sm.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="320" src="http://1.bp.blogspot.com/_MFlhoNfJZ5E/TNe7ukUUcuI/AAAAAAAAAO4/uGy5f5X1s94/s320/nov10+006_sm.jpg" width="213" /></a>Ranipuram is a small hill on Kanhangad - Madikeri road bordering Coorg. We set off to Ranipuram without much preparation on a Sunday morning. <br />
We were told that the road goes right to the top, so I had taken my wife and 5 yr old boy also along.<br />
One has to take Kanhangad-Panathur road, and drive for about an hour. Just before reaching Panathur, a road deviates westward, which right away starts the ascent, which goes on for about 10km. It ends at a small T shop, from where have to climb. <br />
My family stopped there and I climbed alone. Soon I started getting scared and hesitating to go.The path was through the forest, with steep climb, slightly wet, a few stone steps here and there, full of leeches. But then two youngsters came, and I joined them. The path is a walk way, single unbroken one right to the top. Its very tedious, steep. We didn't stop, for fear of leeches. After about half hour, the trees end, then it's grass land. The path is still obvious, winding up between the tall grass. It was about 2pm, but there was strong winds and it was pretty cool. It was great view from the top, worth all the efforts. we took some time to ward off the leeches, rested for 10 minutes, and descended down. the descent is tedious too, puts lots of strain on leg muscles, to control the descent. As descent is faster, less leeches hooked on this time.<br />
<a href="http://3.bp.blogspot.com/_MFlhoNfJZ5E/TNe7vApDM7I/AAAAAAAAAPI/57HSPWc9H60/s1600/nov10+026_sm+copy.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/_MFlhoNfJZ5E/TNe7vApDM7I/AAAAAAAAAPI/57HSPWc9H60/s320/nov10+026_sm+copy.jpg" width="213" /></a>The trip was worth it. <br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_MFlhoNfJZ5E/TNe8kfl356I/AAAAAAAAAPQ/_DyYKJ3dAl0/s1600/nov10+020_sm.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="213" src="http://3.bp.blogspot.com/_MFlhoNfJZ5E/TNe8kfl356I/AAAAAAAAAPQ/_DyYKJ3dAl0/s320/nov10+020_sm.jpg" width="320" /></a></div>praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com1tag:blogger.com,1999:blog-1698044337906971360.post-60582743698634020522010-02-19T07:07:00.000+05:302012-10-01T23:37:11.006+05:30gandhigiri and peace.<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgx1C7hN4YGD1gVFraDqnaxyvJQw-_ld9ryvvz-ADcRv1q68-w7LJGEXEzQlD9ZXaFVqdPREAJYWObhP__aHfRX19uCxEgBxiGcL-Dse3ypTVR-vcWAgn2gsqCAQ5D5BIVYCHc2iBQAYBo/s1600/Jinnah_Gandhi.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgx1C7hN4YGD1gVFraDqnaxyvJQw-_ld9ryvvz-ADcRv1q68-w7LJGEXEzQlD9ZXaFVqdPREAJYWObhP__aHfRX19uCxEgBxiGcL-Dse3ypTVR-vcWAgn2gsqCAQ5D5BIVYCHc2iBQAYBo/s320/Jinnah_Gandhi.jpg" width="320" /></a></div>
Gandhi's apporoach has often been criticised as impractical, even within india. There has been even a conscious campaign to malign gandhi and principles, cheifly by right wing parties. These efforts often sideline the facts that violent struggles have achieved little in the past, and there have been any number of non-violent struggles which have yielded results, and most of them inspired by Gandhi.<br />
<br />
A recent popular bollywood movie, Lage Raho Munna Bhai, has showed in surprising vivid detail, how practical Gandhi is. The hero of a movie is one of the common men, a local Goon. People resort to violence under the circumstancial forces, and any people can become extremely violent, as evidenced by the otherwise peaceful Japanese during wwII and Gujaratis during the recent violence. It's the violence, the sin, that we try to wipe out, not the people who commit it, under their unfortunate conditions.<br />
<br />
The hero, Munna Bhai, feigns as Gandhian to win the heart of a girl, but later had to study Gandhi thouroughly, to as to sustain his claim of being a gandhian. Only true knowledge can lead to gandhi, not blind belief or chanting. Gandhi himself tried to seek truth in his life, by hard experimentation, hence, the title of his autobiography. He applied scientific principles to the life. There are no shortcuts to truth, and life has to be lived in the hardway. The recent surge in the interest in pseudo-scienctific things like astrology, alternative medicines etc, show the current trend of seeking out quick pleasure and easy life. Science has only one path, and it's not an easy one.<br />
<br />
Munna Bhai reaps success initially, using violence, in bringing the son of an old man, Athmaram, to his dad's birthday party. We are often misled by the temporary and easy success that violence yields, and then continue to use violence in our lives. Munna Bhai, though he had used violence, learns that he had to tell others that he had used none.<br />
<br />
Munna Bhai faces a real problem in his life, that of revealing his actual identity to his girlfriend. The illusionary Gandhi in his brain advices him to reveal the truth to her. We face difficulties in our lives, while trying to conceal the truth, and trying to run away from the truth. We then live under the burden of our lies. When we err, we fail to acknowledge our failure, and lie to ourselves even though subconciously. Acknowledging our failures, at first to ourselves, and the to others brings out the man in us, and gives us the courage to carry on. Munna Bhai acknowledges his mistake in quarreling with his pal, Sarkeet, and apologises to him. Science differes from others in that it acknowledges it's pitfalls, corrects its mistakes, and then advances itself forward. A scientist must be a Sathyagrahi. He should anounce his failures to the world, so that another person doesnt persue the wrong path that he tried, and the collective effort of all men help in scientific advancement. Edison has said that he tries to prove at least one of his theories wrong each day. Freeman Dyson said that he'll be a happy man the day his son proves his theories wrong.<br />
<br />
We face injustice, exploitation and brutality in our lives. In these extreme conditions, it's often easy to fall prey to the violent means. Only a courageous man can remain steady and be non-violent under these conditions. To be courageous, we need to be encouraged by the daily success we get by adhering to the truth. Non violence is not the path of the cowards, but of the extremely courageous men. Munna Bhai not only had physical prowesses, but also the mental courage that his truthfulness had given him. A builder tries to threaten Munna Bhai, but he adhers to non-violence. This changes the builder's mind, make him accept his mistake, and concede the case to Munna Bhai, and also be his friend again. By using non-violence and love, we not only win our case, but spread the peace and love in our society. If we use the violence, we may get success in our case, but we only increase the total violence in the society, rather than make it a better place to live.<br />
<br />
Thus Munna Bhai has shown us that Gandhi is not just a man to be adorned but to be adhered and enacted.</div>
praveen gopinathhttp://www.blogger.com/profile/11224339003314748060noreply@blogger.com0