<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Art, Science &amp; Technology</title>
    <link>http://blog.vigneshwaran.in</link>
    <description>Stuffs I find interesting and Stuffs I create</description>
    <generator>posterous.com</generator>
    <link xmlns="http://www.w3.org/2005/Atom" type="application/json" href="http://posterous.com/api/sup_update#f59eb2ccc" rel="http://api.friendfeed.com/2008/03#sup" />
    
    
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/VigneshwaranPosterous" /><feedburner:info uri="vigneshwaranposterous" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://posterous.superfeedr.com/" /><item>
      <pubDate>Sun, 26 Feb 2012 08:52:00 -0800</pubDate>
      <title>Java program using Apache Tika to extract text from various formats into a String object</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/v6OTsatDgG8/java-program-using-apache-tika-to-extract-tex</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/java-program-using-apache-tika-to-extract-tex</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;a href="http://tika.apache.org/1.0/gettingstarted.html"&gt;Apache Tika&lt;/a&gt;&amp;nbsp;can get the plain text from&amp;nbsp;&lt;a href="http://tika.apache.org/1.0/formats.html"&gt;so many formats&lt;/a&gt;&amp;nbsp;like Microsoft's Office files and PDF etc.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://tika.apache.org/download.html"&gt;tika app jar file&lt;/a&gt;&amp;nbsp;can output plain text from those files and print them into a file or console.&lt;/p&gt;
&lt;p&gt;This is a sample java program that uses this tika jar file as library and uses the Parser Api to get the text into a String object.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TextExtractor.java&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;import java.io.ByteArrayOutputStream;&lt;/p&gt;
&lt;p&gt;import java.io.File;&lt;/p&gt;
&lt;p&gt;import java.io.InputStream;&lt;/p&gt;
&lt;p&gt;import java.io.OutputStream;&lt;/p&gt;
&lt;p&gt;import java.io.OutputStreamWriter;&lt;/p&gt;
&lt;p&gt;import java.net.URL;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;import org.apache.tika.detect.DefaultDetector;&lt;/p&gt;
&lt;p&gt;import org.apache.tika.detect.Detector;&lt;/p&gt;
&lt;p&gt;import org.apache.tika.io.TikaInputStream;&lt;/p&gt;
&lt;p&gt;import org.apache.tika.metadata.Metadata;&lt;/p&gt;
&lt;p&gt;import org.apache.tika.parser.AutoDetectParser;&lt;/p&gt;
&lt;p&gt;import org.apache.tika.parser.ParseContext;&lt;/p&gt;
&lt;p&gt;import org.apache.tika.parser.Parser;&lt;/p&gt;
&lt;p&gt;import org.apache.tika.sax.BodyContentHandler;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;import org.xml.sax.ContentHandler;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;class TextExtractor {&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; private OutputStream outputstream;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; private ParseContext context;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; private Detector detector;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; private Parser parser;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; private Metadata metadata;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; private String extractedText;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; public TextExtractor() {&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; context = new ParseContext();&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; detector = new DefaultDetector();&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; parser = new AutoDetectParser(detector);&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; context.set(Parser.class, parser);&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outputstream = new ByteArrayOutputStream();&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; metadata = new Metadata();&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; public void process(String filename) throws Exception {&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL url;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; File file = new File(filename);&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (file.isFile()) {&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; url = file.toURI().toURL();&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; url = new URL(filename);&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; InputStream input = TikaInputStream.get(url, metadata);&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ContentHandler handler = new BodyContentHandler(outputstream);&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; parser.parse(input, handler, metadata, context);&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; input.close();&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; public void getString() {&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Get the text into a String object&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; extractedText = outputstream.toString();&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Do whatever you want with this String object.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(extractedText);&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; public static void main(String args[]) throws Exception {&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (args.length == 1) {&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TextExtractor textExtractor = new TextExtractor();&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; textExtractor.process(args[0]);&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; textExtractor.getString();&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw new Exception();&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compile&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;javac -cp ".:tika-app-1.0.jar" TextExtractor.java&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Run&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;java -cp ".:tika-app-1.0.jar" TextExtractor SomeWordDocument.doc&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Note: Replace ":" with ";" if you are in Windows&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/java-program-using-apache-tika-to-extract-tex"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/java-program-using-apache-tika-to-extract-tex#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/v6OTsatDgG8" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://blog.vigneshwaran.in/java-program-using-apache-tika-to-extract-tex</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 26 Feb 2012 08:39:00 -0800</pubDate>
      <title>Python script to create files/folders from a template</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/Ozub5ZG1eE0/python-script-to-create-filesfolders-from-a-t</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/python-script-to-create-filesfolders-from-a-t</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt; &lt;span style="font-size: small;"&gt;I was following this jenkins plugin tutorial today&amp;nbsp;&lt;a href="http://javaadventure.blogspot.in/2008/01/writing-hudson-plug-in-part-1.html"&gt;http://javaadventure.blogspot.in/2008/01/writing-hudson-plug-in-part-1.html&lt;/a&gt; which required me to create several directory structures. I found it  vexing to do them manually. So I got this idea to make a python program  that creates directory structures by reading a template file.&lt;/span&gt;&lt;p /&gt; &lt;span style="font-size: small;"&gt; We will have to pass it a template file that specifies the directory  structure which will be created. The template file should look something  like this:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;foldername/&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; filename.ext&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; subfoldername/&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subsubfoldername/&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; anotherfile.txt&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; someotherfile.xml&lt;p /&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;It can be anything like that. There are only two syntax requirements.&lt;br /&gt; 1.Indentation must be uniform (like in a python program)&lt;br /&gt; 2.folder names must end with a '/' otherwise the program can't know which is folder and which is file.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Screenshot:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Pydir3" height="480" src="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2012-02-26/urAxBIJJggtwatlovJvsoBiIFypdsiGErmxgJDvEiiwgfggwuzzbGakfnzqu/pydir3.jpeg.scaled696.jpg" width="509" /&gt;
&lt;/div&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Code:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#!/usr/bin/python&lt;/p&gt;
&lt;p&gt;import sys,os&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#I'll be using this as a stack pushing and popping indent levels&lt;/p&gt;
&lt;p&gt;indentlevels = [0]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#Opening the file specified in argument&lt;/p&gt;
&lt;p&gt;f=open(sys.argv[1])&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#If the argument is /hello/structure.txt PARENTPATH should be /hello/&lt;/p&gt;
&lt;p&gt;PARENTPATH=os.path.abspath(f.name)&lt;/p&gt;
&lt;p&gt;PARENTPATH=PARENTPATH[:PARENTPATH.rindex('/')+1]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#We'll be reading line by line. This variable is used to store previous line.&lt;/p&gt;
&lt;p&gt;previous = ""&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#Count no. of leading spaces in a line.&lt;/p&gt;
&lt;p&gt;#Empty lines give a length of 1 considering '\n' so will return -1 to ignore later&lt;/p&gt;
&lt;p&gt;def countSpaces(data):&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; return len(data)-len(data.lstrip()) if (len(data)&amp;gt;1) else -1&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#This function creates the files or folders&lt;/p&gt;
&lt;p&gt;def touch(data):&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; global PARENTPATH&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; if (data.endswith('/')):&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; os.mkdir(PARENTPATH+data)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; else:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; f=open(PARENTPATH+data,"w")&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; f.close()&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#Main program starts.. Iterate through lines&lt;/p&gt;
&lt;p&gt;line=f.readline()&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;while line:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; #Get the indent level&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; indentlevel = countSpaces(line)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; #Remove leading and trailing spaces and get only the string&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; line=line.strip()&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; #Ignore empty lines and continue the loop&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; if (indentlevel == -1):&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; line = f.readline()&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; #If indent is increased,&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; if(indentlevel &amp;gt; indentlevels[-1]):&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #Check whether the previous line ended with '/'.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #Because we can put files and folders within a folder. Not possible within &amp;nbsp;a file&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if not previous.endswith('/'):&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print "SYNTAX ERROR.. You can indent a line further only if the above line specifies a folder (ends with /)"&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.exit()&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #add the new indentlevel to indentlevels&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; indentlevels.append(indentlevel)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #and append the above string as a folder level to the PARENTPATH&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PARENTPATH=PARENTPATH+previous&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; #If indent level is reduced,&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; elif(indentlevel &amp;lt; indentlevels[-1]):&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #pop the last element from the indentlevels&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; indentlevels.pop() #ref1&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #If indent is reduced more than one step (eg. dirstruct4),&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #then pop the indentlevels until it's equal to indentlevel&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #and do the same for parent path&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while indentlevels[-1]&amp;gt;indentlevel:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; indentlevels.pop()&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PARENTPATH=PARENTPATH[:PARENTPATH[:-1].rindex('/')+1] &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Because I want /hai/bai/ to become /hai/&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #If this condition fails, then it means the file is not indented uniformly&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if not (indentlevel == indentlevels[-1]):&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print "SYNTAX ERROR.. INDENTATION MUST BE UNIFORM"&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.exit()&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #required for line '#ref1'&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PARENTPATH=PARENTPATH[:PARENTPATH[:-1].rindex('/')+1] &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; #else: #indentlevel == indentlevels[-1]&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; touch(line)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; previous=line&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; line=f.readline()&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Try this sample dir structure:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;/p&gt;&lt;p&gt;project/&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp;SimpleM2Project/&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pom.xml&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src/&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;main/&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;java/&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;com/&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;onedash/&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hello/&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Hello.java&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test/&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;java/&lt;/p&gt;

&lt;/blockquote&gt;

	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/python-script-to-create-filesfolders-from-a-t"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/python-script-to-create-filesfolders-from-a-t#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/Ozub5ZG1eE0" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
      <media:content type="image/jpeg" height="480" width="509" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2012-02-26/urAxBIJJggtwatlovJvsoBiIFypdsiGErmxgJDvEiiwgfggwuzzbGakfnzqu/pydir3.jpeg">
        <media:thumbnail height="472" width="500" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2012-02-26/urAxBIJJggtwatlovJvsoBiIFypdsiGErmxgJDvEiiwgfggwuzzbGakfnzqu/pydir3.jpeg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://blog.vigneshwaran.in/python-script-to-create-filesfolders-from-a-t</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 15 Jan 2012 06:33:00 -0800</pubDate>
      <title>Inspiring Quotes from the author of "Learn Python the Hard Way"</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/s-AcXhLHlIc/inspiring-quotes-from-the-author-of-learn-pyt</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/inspiring-quotes-from-the-author-of-learn-pyt</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I read this book "Learn Python the Hard Way" some time ago. Actually the book was very basic as it was intended for people new to programming so it's not my type of book. What I liked was at the end of the book, there was an epilogue called "Advice From An Old Programmer."&lt;/p&gt;
&lt;p&gt;Link to that:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://learnpythonthehardway.org/book/advice.html"&gt;http://learnpythonthehardway.org/book/advice.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I really really loved it. Following are my favorites:&lt;/p&gt;
&lt;p&gt;My Manager used to tell this frequently:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Lucida Grande, Lucida Sans Unicode, Geneva, Verdana, sans-serif; font-size: 14px; line-height: 21px;"&gt;Which programming language you learn and use doesn't matter. Do&amp;nbsp;&lt;em&gt;not&lt;/em&gt;&amp;nbsp;get sucked into the religion surrounding programming languages as that will only blind you to their true purpose of being your tool for doing interesting things.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Lucida Grande, Lucida Sans Unicode, Geneva, Verdana, sans-serif;"&gt;&lt;span style="font-size: 14px; line-height: 21px;"&gt;Programming is an art form. This is how I used to think always:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Lucida Grande, Lucida Sans Unicode, Geneva, Verdana, sans-serif; font-size: 14px; line-height: 21px;"&gt;
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0.8em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px;"&gt;Programming as an intellectual activity is the&amp;nbsp;&lt;em&gt;only&lt;/em&gt;&amp;nbsp;art form that allows you to create &lt;strong&gt;interactive&lt;/strong&gt; art. You can create projects that other people can play with, and you can talk to them indirectly. No other art form is quite this interactive. Movies flow to the audience in one direction. Paintings do not move. Code goes both ways.&lt;/p&gt;

&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Lucida Grande, Lucida Sans Unicode, Geneva, Verdana, sans-serif; font-size: 14px; line-height: 21px;"&gt;Sad truth:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Lucida Grande, Lucida Sans Unicode, Geneva, Verdana, sans-serif; font-size: 14px; line-height: 21px;"&gt;People who can code in the world of technology companies are a dime a dozen and get no respect. People who can code in biology, medicine, government, sociology, physics, history, and mathematics are respected and can do amazing things to advance those disciplines.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Finally my most favorite part due to my personal experiences:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Lucida Grande, Lucida Sans Unicode, Geneva, Verdana, sans-serif; font-size: 14px; line-height: 21px;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-top: 0.8em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px;"&gt;Finally, I'll say that learning to create software changes you and makes you different. Not better or worse, just different. You may find that people treat you harshly because you can create software, maybe using words like "nerd". Maybe you'll find that because you can dissect their logic that they hate arguing with you. You may even find that simply knowing how a computer works makes you annoying and weird to them.&lt;/p&gt;
&lt;p style="margin-top: 0.8em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px;"&gt;To this I have just one piece of advice: &lt;strong&gt;they can go to hell&lt;/strong&gt;. The world needs more weird people who know how things work and who love to figure it all out. When they treat you like this, just remember that this is&amp;nbsp;&lt;em&gt;your&lt;/em&gt;&amp;nbsp;journey, not theirs. Being different is not a crime, and people who tell you it is are just jealous that you've picked up a skill they never in their wildest dreams could acquire.&lt;/p&gt;
&lt;p style="margin-top: 0.8em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px;"&gt;You can code. They cannot. That is pretty damn cool.&lt;/p&gt;
&lt;/blockquote&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/inspiring-quotes-from-the-author-of-learn-pyt"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/inspiring-quotes-from-the-author-of-learn-pyt#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/s-AcXhLHlIc" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://blog.vigneshwaran.in/inspiring-quotes-from-the-author-of-learn-pyt</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 12 Jan 2012 01:52:00 -0800</pubDate>
      <title>Retrieving and viewing mails from Gmail in terminal using POP protocol</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/uHQp2WXhLMw/retrieving-and-viewing-mails-from-gmail-in-te</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/retrieving-and-viewing-mails-from-gmail-in-te</guid>
      <description>&lt;p&gt;
	&lt;p&gt;First connect to gmail's pop server:&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;&lt;strong&gt;openssl s_client -connect pop.gmail.com:995&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This opens up a SSL connection with Gmail. For webmails using normal http, telnet is enough.&lt;/p&gt;
&lt;p&gt;It displays a big certificate and other stuffs. The last line of my response was&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;+OK Gpop ready for requests from 208.87.9.2 gu6pf13670898pbc.27&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then I specified my username using,&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;&lt;strong&gt;user &lt;a href="mailto:username@gmail.com"&gt;username@gmail.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and got this response:&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;+OK send PASS&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then I gave my password in plaintext (yuck) using,&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;&lt;strong&gt;pass mypassword&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and got this response:&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;+OK Welcome.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then I listed my mails using '&lt;strong&gt;list&lt;/strong&gt;' command:&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;list&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;+OK 322 messages (30630914 bytes)&lt;/p&gt;
&lt;p&gt;1 1561&lt;/p&gt;
&lt;p&gt;2 1711&lt;/p&gt;
&lt;p&gt;3 1627&lt;/p&gt;
&lt;p&gt;&amp;lt;snipped/&amp;gt;&lt;/p&gt;

&lt;/blockquote&gt;
&lt;p&gt;Then I retrieved a particular message using '&lt;strong&gt;retr&lt;/strong&gt;' command:&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;&lt;strong&gt;retr 322&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I could delete a mail using '&lt;strong&gt;dele &amp;lt;num&amp;gt;&lt;/strong&gt;' but I didn't wanna do it.&lt;/p&gt;
&lt;p&gt;Finally to exit, used '&lt;strong&gt;quit&lt;/strong&gt;'.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/retrieving-and-viewing-mails-from-gmail-in-te"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/retrieving-and-viewing-mails-from-gmail-in-te#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/uHQp2WXhLMw" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://blog.vigneshwaran.in/retrieving-and-viewing-mails-from-gmail-in-te</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 09 Jan 2012 03:51:00 -0800</pubDate>
      <title>How to find installation location of apache and How to create a sample module in Fedora</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/niC8_VmfQM4/how-to-find-installation-location-of-apache-a</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/how-to-find-installation-location-of-apache-a</guid>
      <description>&lt;p&gt;
	&lt;p&gt;After reading this article, you'll be able to&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;find the installation location of apache&lt;/li&gt;
&lt;li&gt;have no trouble finding paths where logs, configuration files and modules are stored&lt;/li&gt;
&lt;li&gt;create a sample module and test it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is assumed that you have Apache Http Server already installed in your linux system and have it running. If you haven't, then follow &lt;a href="http://www.cyberciti.biz/faq/linux-install-and-start-apache-httpd/"&gt;this nice article&lt;/a&gt; I found by googling. I am using Fedora 16. You should note that apache configurations are slightly different in Ubuntu from Fedora.&lt;/p&gt;
&lt;p&gt;First check if Apache is listening on port 80 by typing,&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;sudo netstat -anp | grep httpd&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(In case of ubuntu, you should grep for apache)&lt;/p&gt;
&lt;p&gt;It gave output for me like this:&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;tcp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0 &amp;nbsp; &amp;nbsp; &amp;nbsp;0 :::80 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :::* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LISTEN &amp;nbsp; &amp;nbsp; &amp;nbsp;5979/httpd &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;So the apache executable for me is httpd (apache2 in some distros)&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;I can find the running processes of apache using the command:
&lt;blockquote class="posterous_short_quote"&gt;ps -ef | grep apache&lt;/blockquote&gt;
or
&lt;blockquote class="posterous_short_quote"&gt;ps -ef | grep httpd&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;It gave me this:&lt;/div&gt;
&lt;p /&gt;
&lt;blockquote&gt;
&lt;div&gt;
&lt;div&gt;apache &amp;nbsp; &amp;nbsp;7006 &amp;nbsp;5979 &amp;nbsp;0 14:29 ? &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;00:00:00 /usr/sbin/httpd -k start&lt;/div&gt;
&lt;div&gt;apache &amp;nbsp; &amp;nbsp;7007 &amp;nbsp;5979 &amp;nbsp;0 14:29 ? &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;00:00:00 /usr/sbin/httpd -k start&lt;/div&gt;
&lt;div&gt;apache &amp;nbsp; &amp;nbsp;7008 &amp;nbsp;5979 &amp;nbsp;0 14:29 ? &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;00:00:00 /usr/sbin/httpd -k start&lt;/div&gt;
&lt;div&gt;apache &amp;nbsp; &amp;nbsp;7009 &amp;nbsp;5979 &amp;nbsp;0 14:29 ? &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;00:00:00 /usr/sbin/httpd -k start&lt;/div&gt;
&lt;div&gt;apache &amp;nbsp; &amp;nbsp;7010 &amp;nbsp;5979 &amp;nbsp;0 14:29 ? &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;00:00:00 /usr/sbin/httpd -k start&lt;/div&gt;
&lt;div&gt;apache &amp;nbsp; &amp;nbsp;7011 &amp;nbsp;5979 &amp;nbsp;0 14:29 ? &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;00:00:00 /usr/sbin/httpd -k start&lt;/div&gt;
&lt;div&gt;apache &amp;nbsp; &amp;nbsp;7012 &amp;nbsp;5979 &amp;nbsp;0 14:29 ? &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;00:00:00 /usr/sbin/httpd -k start&lt;/div&gt;
&lt;div&gt;apache &amp;nbsp; &amp;nbsp;7013 &amp;nbsp;5979 &amp;nbsp;0 14:29 ? &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;00:00:00 /usr/sbin/httpd -k start&lt;/div&gt;
&lt;div&gt;1000 &amp;nbsp; &amp;nbsp; 10586 10491 &amp;nbsp;0 17:48 pts/0 &amp;nbsp; &amp;nbsp;00:00:00 grep --color=auto apache&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p /&gt;
&lt;div&gt;From this I can find the number of apache processes running and also the path to the apache's executable. (we can also use 'which' for that.) The executable could be apache2 in other distros.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;Next is to find the paths to the configuration files, access logs and modules.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;Use&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;/usr/sbin/httpd -V&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;or&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;httpd -V&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;(if /usr/sbin is in your path)&lt;/div&gt;
&lt;div&gt;or apache2 -V (for Ubuntu)&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;This gave me&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;
&lt;div&gt;[vigneshwaran@localhost ~]$ /usr/sbin/httpd -V&lt;/div&gt;
&lt;div&gt;Server version: Apache/2.2.21 (Unix)&lt;/div&gt;
&lt;div&gt;Server built: &amp;nbsp; Sep 13 2011 12:26:57&lt;/div&gt;
&lt;div&gt;Server's Module Magic Number: 20051115:30&lt;/div&gt;
&lt;div&gt;Server loaded: &amp;nbsp;APR 1.4.5, APR-Util 1.3.12&lt;/div&gt;
&lt;div&gt;Compiled using: APR 1.4.5, APR-Util 1.3.12&lt;/div&gt;
&lt;div&gt;Architecture: &amp;nbsp; 32-bit&lt;/div&gt;
&lt;div&gt;Server MPM: &amp;nbsp; &amp;nbsp; Prefork&lt;/div&gt;
&lt;div&gt;&amp;nbsp; threaded: &amp;nbsp; &amp;nbsp; no&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; forked: &amp;nbsp; &amp;nbsp; yes (variable process count)&lt;/div&gt;
&lt;div&gt;Server compiled with....&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D APACHE_MPM_DIR="server/mpm/prefork"&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D APR_HAS_SENDFILE&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D APR_HAS_MMAP&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D APR_USE_SYSVSEM_SERIALIZE&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D APR_USE_PTHREAD_SERIALIZE&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D APR_HAS_OTHER_CHILD&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D AP_HAVE_RELIABLE_PIPED_LOGS&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D DYNAMIC_MODULE_LIMIT=128&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D HTTPD_ROOT="/etc/httpd"&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D SUEXEC_BIN="/usr/sbin/suexec"&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D DEFAULT_PIDLOG="logs/httpd.pid"&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D DEFAULT_LOCKFILE="logs/accept.lock"&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D DEFAULT_ERRORLOG="logs/error_log"&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D AP_TYPES_CONFIG_FILE="conf/mime.types"&lt;/div&gt;
&lt;div&gt;&amp;nbsp;-D SERVER_CONFIG_FILE="conf/httpd.conf"&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;
&lt;div&gt;For me the apache root is "/etc/httpd" where all other files and folders related to apache will be.&lt;/div&gt;
&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;Location to main configuration file is "/etc/httpd/conf/httpd.conf"&lt;/div&gt;
&lt;div&gt;(for ubuntu, It's "/etc/apache2/apache2.conf" I guess)&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;Location to logs is "/etc/httpd/logs" folder.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;Location to installed/bundled modules is "/etc/httpd/modules" folder.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;&lt;strong&gt;Make your own module:&lt;/strong&gt;&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;To make your own module, you must install the developer package of apache.&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;sudo yum install httpd-devel&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;or&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;sudo apt-get install apache2-devel&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;(for ubuntu)&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;The utility "apxs" tool comes with this devel package. (Or apxs2 for ubuntu) It helps making a module very easy by generating a skeleton for the module.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;Use&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;apxs -g -n "name_of_the_module"&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;to create a module. I used the name "yagami" for my module.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;Output:&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;
&lt;div&gt;[vigneshwaran@localhost myapachemodules]$ apxs -g -n "yagami"&lt;/div&gt;
&lt;div&gt;Creating [DIR] &amp;nbsp;yagami&lt;/div&gt;
&lt;div&gt;Creating [FILE] yagami/Makefile&lt;/div&gt;
&lt;div&gt;Creating [FILE] yagami/modules.mk&lt;/div&gt;
&lt;div&gt;Creating [FILE] yagami/mod_yagami.c&lt;/div&gt;
&lt;div&gt;Creating [FILE] yagami/.deps&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;The "mod_yagami.c" is what we should be concerned about. It's the source code of our module.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2012-01-09/ozCAkDloHcintwaCtpcrgeduJyFzEoanAsozkljaohdhobBjdCCFepGHGxBb/yagamimodule.png.scaled1000.png"&gt;&lt;img alt="Yagamimodule" height="650" src="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2012-01-09/ozCAkDloHcintwaCtpcrgeduJyFzEoanAsozkljaohdhobBjdCCFepGHGxBb/yagamimodule.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
I edited the file and replaced the "The sample page from mod_yagami.c" to "&amp;lt;h3&amp;gt;Welcome&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;How are you today?&amp;lt;/p&amp;gt;" inside the ap_rputs() statement.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;The comment section above the code gives you the instructions to compile this module, edit configurations to activate this module and restart the server. I'll repeat them here anyways.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;Save the file and compile it using&amp;nbsp;&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;sudo apxs -c -i mod_yagami.c&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;OUTPUT:&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;
&lt;div&gt;[vigneshwaran@localhost yagami]$ sudo apxs -c -i mod_yagami.c&lt;/div&gt;
&lt;div&gt;[sudo] password for vigneshwaran:&amp;nbsp;&lt;/div&gt;
&lt;div&gt;/usr/lib/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables &amp;nbsp;-DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -pthread -I/usr/include/httpd &amp;nbsp;-I/usr/include/apr-1 &amp;nbsp; -I/usr/include/apr-1 &amp;nbsp; -c -o mod_yagami.lo mod_yagami.c &amp;amp;&amp;amp; touch mod_yagami.slo&lt;/div&gt;
&lt;div&gt;/usr/lib/apr-1/build/libtool --silent --mode=link gcc -o mod_yagami.la &amp;nbsp;-rpath /usr/lib/httpd/modules -module -avoid-version &amp;nbsp; &amp;nbsp;mod_yagami.lo&lt;/div&gt;
&lt;div&gt;/usr/lib/httpd/build/instdso.sh SH_LIBTOOL='/usr/lib/apr-1/build/libtool' mod_yagami.la /usr/lib/httpd/modules&lt;/div&gt;
&lt;div&gt;/usr/lib/apr-1/build/libtool --mode=install cp mod_yagami.la /usr/lib/httpd/modules/&lt;/div&gt;
&lt;div&gt;libtool: install: cp .libs/mod_yagami.so /usr/lib/httpd/modules/mod_yagami.so&lt;/div&gt;
&lt;div&gt;libtool: install: cp .libs/mod_yagami.lai /usr/lib/httpd/modules/mod_yagami.la&lt;/div&gt;
&lt;div&gt;libtool: install: cp .libs/mod_yagami.a /usr/lib/httpd/modules/mod_yagami.a&lt;/div&gt;
&lt;div&gt;libtool: install: chmod 644 /usr/lib/httpd/modules/mod_yagami.a&lt;/div&gt;
&lt;div&gt;libtool: install: ranlib /usr/lib/httpd/modules/mod_yagami.a&lt;/div&gt;
&lt;div&gt;libtool: finish: PATH="/sbin:/bin:/usr/sbin:/usr/bin:/sbin" ldconfig -n /usr/lib/httpd/modules&lt;/div&gt;
&lt;div&gt;----------------------------------------------------------------------&lt;/div&gt;
&lt;div&gt;Libraries have been installed in:&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;/usr/lib/httpd/modules&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;If you ever happen to want to link against installed libraries&lt;/div&gt;
&lt;div&gt;in a given directory, LIBDIR, you must either use libtool, and&lt;/div&gt;
&lt;div&gt;specify the full pathname of the library, or use the `-LLIBDIR'&lt;/div&gt;
&lt;div&gt;flag during linking and do at least one of the following:&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;- add LIBDIR to the `LD_LIBRARY_PATH' environment variable&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;during execution&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;- add LIBDIR to the `LD_RUN_PATH' environment variable&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;during linking&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;- use the `-Wl,-rpath -Wl,LIBDIR' linker flag&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;- have your system administrator add LIBDIR to `/etc/ld.so.conf'&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;See any operating system documentation about shared libraries for&lt;/div&gt;
&lt;div&gt;more information, such as the ld(1) and ld.so(8) manual pages.&lt;/div&gt;
&lt;div&gt;----------------------------------------------------------------------&lt;/div&gt;
&lt;div&gt;chmod 755 /usr/lib/httpd/modules/mod_yagami.so&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;The last line in the output tells me that the compiled 'mod_yagami.so' file is put into /usr/lib/httpd/modules/ folder.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;Now I'm gonna edit the main conf file. Should use sudo otherwise you can't save the changes. Also make sure you back it up into a file&lt;strong&gt; with different extension&lt;/strong&gt;&amp;nbsp;something like httpd.conf.backup&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;sudo vi /etc/httpd/conf/httpd.conf&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;I added this line&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;span style="color: #993300;"&gt;LoadModule yagami_module modules/mod_yagami.so&lt;/span&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;along with similar lines. This line was copy pasted from the comment section I mentioned above.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;I also copied these lines also from the comment section and pasted into the file near the occurence of similar lines in the file.&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style="color: #993300;"&gt;&amp;lt;Location /yagami&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: #993300;"&gt;&amp;nbsp; &amp;nbsp; SetHandler yagami&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: #993300;"&gt;&amp;lt;/Location&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;Now use&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;sudo apachectl restart&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;to restart our Apache server so that it'll read our httpd.conf file and load our module.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;Now open "&lt;a href="http://localhost/yagami"&gt;http://localhost/yagami&lt;/a&gt;" in your browser. It'll display your page now. :)&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Yagamipage" height="180" src="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2012-01-09/IgyxbDkjlzdkDhEwuDdvCyeuxsECyEankhAAFCbBeIjgEiCFyIwyDkxcIirv/yagamipage.png.scaled696.png" width="347" /&gt;
&lt;/div&gt;
&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/how-to-find-installation-location-of-apache-a"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/how-to-find-installation-location-of-apache-a#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/niC8_VmfQM4" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="742" width="794" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2012-01-09/ozCAkDloHcintwaCtpcrgeduJyFzEoanAsozkljaohdhobBjdCCFepGHGxBb/yagamimodule.png">
        <media:thumbnail height="467" width="500" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2012-01-09/ozCAkDloHcintwaCtpcrgeduJyFzEoanAsozkljaohdhobBjdCCFepGHGxBb/yagamimodule.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="180" width="347" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2012-01-09/IgyxbDkjlzdkDhEwuDdvCyeuxsECyEankhAAFCbBeIjgEiCFyIwyDkxcIirv/yagamipage.png">
        <media:thumbnail height="180" width="347" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2012-01-09/IgyxbDkjlzdkDhEwuDdvCyeuxsECyEankhAAFCbBeIjgEiCFyIwyDkxcIirv/yagamipage.png" />
      </media:content>
    <feedburner:origLink>http://blog.vigneshwaran.in/how-to-find-installation-location-of-apache-a</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 06 Jan 2012 03:28:00 -0800</pubDate>
      <title>Small metaprogram using Python</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/uzGcjy3kGV0/small-metaprogram-using-python</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/small-metaprogram-using-python</guid>
      <description>&lt;p&gt;
	&lt;p&gt;If you have used so many softwares, you might have come across some that shows some Tips dialog with a checkbox that says "Show tip on startup." If you get annoyed, you uncheck it. It won't appear next time.&lt;/p&gt;
&lt;p&gt;Guess how it is programmed. There must be some kind of a properties file or database that stores some boolean (or any other form of data) to store this setting. And everytime the application is loaded, it checks for the variable unnecessarily wasting cycles. It won't remember that you said you don't want to see any tips. It's like an unintelligent being (which is what it is.. afterall it's just a set of instructions.) Metaprograms can be made to look intelligent (from developer's point of view.)&lt;/p&gt;
&lt;p&gt;This program is a very basic example. It prints out Hello and Good Morning. It asks you whether you want to be greeted with Hello everytime. If you say no, then it removes the related code from itself. IT CHANGES ITSELF! (Does it sound like Matrix? I Robot? Bicentennial Man?) It changes itself like the frogs in Jurassic Park novel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CODE:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;/p&gt;&lt;p&gt;def deleteHello():&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; f = open("sixthsense.py","r")&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; output = []&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; for line in f:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if not line.endswith("deleted#\n"):&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; output.append(line)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; f.close()&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; f = open("sixthsense.py","w")&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; f.writelines(output)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; f.close()&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;print "Hello" #line that might be deleted#&lt;/p&gt;
&lt;p&gt;raw_input() &amp;nbsp; #line that might be deleted#&lt;/p&gt;
&lt;p&gt;print "Good Morning"&lt;/p&gt;
&lt;p&gt;raw_input()&lt;/p&gt;
&lt;p&gt;choice = raw_input("Should I greet you with Hello always? (y/N)") &amp;nbsp;#line that might be deleted#&lt;/p&gt;
&lt;p&gt;if choice != "y": &amp;nbsp;#line that might be deleted#&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp;deleteHello() &amp;nbsp; #line that might be deleted#&lt;/p&gt;

&lt;/blockquote&gt;
&lt;p&gt;
&lt;p&gt;Remember to copy the file before running as you know that it can change itself.&lt;/p&gt;
&lt;p&gt;PS:&lt;/p&gt;
&lt;p&gt;One interesting thing happened.. I made a foolish mistake.&lt;/p&gt;
&lt;p&gt;Before this condition,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;if not line.endswith("deleted#\n"):&lt;/p&gt;
&lt;p&gt;I actually used this line.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;if not "#line" in line:&lt;/p&gt;
&lt;p&gt;That was really stupid. Because the condition line itself satisfies the condition and gets removed. :P&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/small-metaprogram-using-python"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/small-metaprogram-using-python#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/uzGcjy3kGV0" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://blog.vigneshwaran.in/small-metaprogram-using-python</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 06 Jan 2012 02:28:59 -0800</pubDate>
      <title>A web crawler and twitter crawler using Python</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/OfdpaRsH0JA/a-web-crawler-and-twitter-crawler-using-pytho</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/a-web-crawler-and-twitter-crawler-using-pytho</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I still haven't started studying Python properly but doing fun tasks with it and learning on the way. I have made a Web Crawler that when given a url crawls through the child links recursively in a depth first order.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web Crawler Code:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;import urllib,string,re,sys&lt;/p&gt;
&lt;p&gt;DEPTH = 0&lt;/p&gt;
&lt;p&gt;MAXDEPTH = 0&lt;/p&gt;
&lt;p&gt;SITENO = 0&lt;/p&gt;
&lt;p&gt;LINKS = []&lt;/p&gt;
&lt;p&gt;if len(sys.argv) &amp;lt; 3:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; print "Usage: python crawl.py &amp;lt;url&amp;gt; &amp;lt;depth&amp;gt;"&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; sys.exit()&lt;/p&gt;
&lt;p&gt;else:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; MAXDEPTH = int(sys.argv[2])&lt;/p&gt;
&lt;p&gt;def findLinks(url,parent,score):&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; global DEPTH&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; global SITENO&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; global LINKS&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; global MAXDEPTH&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; DEPTH += 1&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; if DEPTH &amp;gt; MAXDEPTH:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DEPTH -= 1&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; SITENO += 1&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; print "DEPTH: %d\tSiteNo: %d\tSite: %s\tParent: %d\tScore: %d" % (DEPTH,SITENO,url,parent,score)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; LINKS.append(url)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; body = urllib.urlopen(url).read()&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; try:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; start=string.index(body,"&amp;lt;body")&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; body = body[start:]&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; except ValueError:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pass&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; links = re.findall('''href=["']([^"']+)["']''', body, re.I)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; links = [ link \&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for link in links \&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (link.startswith("http://") and \&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (not (link.endswith(".xml") or link.endswith(".css") or link.endswith(".js"))) and \&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (link not in LINKS)) ]&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; if not links:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DEPTH -= 1&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; score *= len(links)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; parent = SITENO&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; for link in links:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; findLinks(link,parent,score)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; DEPTH -= 1&lt;/p&gt;
&lt;p&gt;findLinks(sys.argv[1],0,1)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Run "python crawl.py &lt;a href="http://en.wikipedia.org/"&gt;http://en.wikipedia.org/&lt;/a&gt; 4"&lt;/p&gt;
&lt;p&gt;Or start the depth with 1, 2 and go on for a better understanding of the working. Don't give big depth unless your processor has enough juice. I couldn't run this in my pc. I ran it in a high speed server where I have a shell access. It will display a set of fields. Depth of root node will be 1. SiteNo is a unique identifier for each site. Parent id of a site refers to its parent's siteno. Score(just for fun) starts with 1 for the root node. Score of a child node is the score of its parent node multiplied by number of siblings.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2012-01-06/avCwqtnmtvpCJwcvouADbBrGrFIDCcyuAzoBBaBwdAAkEeDxqDkzuAqceosp/crawl.png.scaled1000.png"&gt;&lt;img alt="Crawl" height="504" src="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2012-01-06/avCwqtnmtvpCJwcvouADbBrGrFIDCcyuAzoBBaBwdAAkEeDxqDkzuAqceosp/crawl.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now combining this with my &lt;a href="http://blog.vigneshwaran.in/bash-script-to-find-mutual-friends-in-twitter" target="_blank"&gt;previous twitter script&lt;/a&gt;, I wrote a twitter crawler that crawls through friend nodes in a similar networked tree fashion. But too bad, there's a limit of only 150 requests per hour per client on twitter.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Twitter Crawler Code:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;/p&gt;&lt;p&gt;import urllib,sys&lt;/p&gt;
&lt;p&gt;try:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; import json&lt;/p&gt;
&lt;p&gt;except ImportError:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; import simplejson as json&lt;/p&gt;
&lt;p&gt;DEPTH = 0&lt;/p&gt;
&lt;p&gt;MAXDEPTH = 0&lt;/p&gt;
&lt;p&gt;IDNO = 0&lt;/p&gt;
&lt;p&gt;NAMES = []&lt;/p&gt;
&lt;p&gt;if len(sys.argv) &amp;lt; 3:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; print "Usage: python twittertree.py &amp;lt;username&amp;gt; &amp;lt;depth&amp;gt;"&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; sys.exit()&lt;/p&gt;
&lt;p&gt;else:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; MAXDEPTH = int(sys.argv[2])&lt;/p&gt;
&lt;p&gt;def findFriends(name,parentidno):&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; global DEPTH&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; global MAXDEPTH&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; global IDNO&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; global NAMES&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; DEPTH += 1&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; if DEPTH &amp;gt; MAXDEPTH:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DEPTH -= 1&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; IDNO += 1&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; print "DEPTH: %d\tID_No: %d\tUser_ID: %s\tParent_ID_No: %d" % (DEPTH,IDNO,name,parentidno)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; NAMES.append(name)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; try:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; jsondata=json.loads(urllib.urlopen('https://api.twitter.com/1/friends/ids.json?screen_name='+name).read())&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; except IOError:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DEPTH -= 1&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; friendsidlist = []&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; try:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; friendsidlist = ",".join(map(str,jsondata['ids'][:100]))&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; except KeyError:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print "Rate Limit exceeded.. Only 150 requests per hour allowed.."&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.exit()&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; jsondata2 = json.loads(urllib.urlopen('https://api.twitter.com/1/users/lookup.json?user_id='+friendsidlist).read())&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; friendsnamelist = []&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; try:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; friendsnamelist = [each['screen_name'] for each in jsondata2 if each['screen_name'] not in NAMES]&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; except TypeError:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pass&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; if not friendsnamelist:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DEPTH -= 1&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; parentidno = IDNO&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; for eachfriendname in friendsnamelist:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; findFriends(eachfriendname,parentidno)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; DEPTH -= 1&lt;/p&gt;
&lt;p&gt;findFriends(sys.argv[1],0)&lt;/p&gt;

&lt;/blockquote&gt;
&lt;p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;Run "python twittertree.py vigneshwaranr 2"&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/a-web-crawler-and-twitter-crawler-using-pytho"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/a-web-crawler-and-twitter-crawler-using-pytho#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/OfdpaRsH0JA" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="742" width="1024" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2012-01-06/avCwqtnmtvpCJwcvouADbBrGrFIDCcyuAzoBBaBwdAAkEeDxqDkzuAqceosp/crawl.png">
        <media:thumbnail height="362" width="500" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2012-01-06/avCwqtnmtvpCJwcvouADbBrGrFIDCcyuAzoBBaBwdAAkEeDxqDkzuAqceosp/crawl.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://blog.vigneshwaran.in/a-web-crawler-and-twitter-crawler-using-pytho</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 04 Jan 2012 03:48:38 -0800</pubDate>
      <title>Screen scraping a site with Python and storing the results into a sqlite db</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/bds9bVeAYxY/screen-scraping-a-site-with-python-and-storin</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/screen-scraping-a-site-with-python-and-storin</guid>
      <description>&lt;p&gt;
	&lt;p&gt;This is a small program. I was tasked with retrieving a small set of data from a webpage by screenscraping using python.&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;&lt;a href="http://money.livemint.com/IID64/F132540/Financial/Ratios/Company.aspx"&gt;http://money.livemint.com/IID64/F132540/Financial/Ratios/Company.aspx&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2012-01-04/AICeGqszaoFyvssrppIzkHcDmcqluhrbDtiyaeFqBGEdoyjysuFgvjHrJoDD/eps.png"&gt;&lt;img alt="Eps" height="378" src="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2012-01-04/AICeGqszaoFyvssrppIzkHcDmcqluhrbDtiyaeFqBGEdoyjysuFgvjHrJoDD/eps.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
This is the data I should retrieve. I never learnt Python properly but I could do it. That is the beauty of Python. Python has an interface to sqlite - the smallest db engine - called "Pysqlite". The library to import is called "sqlite3"&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;
&lt;p&gt;dbconn = sqlite3.connect('db/tcs_eps.db')&lt;/p&gt;
&lt;p&gt;dbc = dbconn.cursor()&lt;/p&gt;
&lt;p&gt;dbc.execute("CREATE TABLE IF NOT EXISTS EPSTABLE(DATE TEXT,EPS TEXT)")&lt;/p&gt;
&lt;p&gt;dbc.execute("DELETE FROM EPSTABLE")&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This part of the code creates a connection to a database file. If the file doesn't exist, it will be created. But the directory path should exist otherwise it'll throw an error. Sqlite is a file based database system unlike the server-client based ones like mysql, db2 etc.. Then it'll create a table if it doesn't exist already (i.e. during first run). It'll truncate the data from the table otherwise next time, same set of data will repeat in my tables.&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;
&lt;p&gt;host = "money.livemint.com"&amp;nbsp;&lt;/p&gt;
&lt;p&gt;epspage = "/IID64/F132540/Financial/Ratios/Company.aspx"&amp;nbsp;&lt;/p&gt;
&lt;p&gt;print "Please wait.. It will take some time depending on your connection speed.."&lt;/p&gt;
&lt;p&gt;con = httplib.HTTPConnection(host)&lt;/p&gt;
&lt;p&gt;con.connect()&lt;/p&gt;
&lt;p&gt;con.request("GET", epspage)&lt;/p&gt;
&lt;p&gt;resp = con.getresponse()&lt;/p&gt;
&lt;p&gt;data = resp.read()&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This part of the code opens up a connection to the host and tries to GET the page and then it reads the "data" part of the response. (Response object has so many other stuffs like status, headers etc..)&lt;/p&gt;
&lt;p&gt;This data is the code of our html page. Analysing the content, I figured out that I should remove the unnecessary data above and below our interested part. For that I need to find a unique string above and below our part so that I can index them and take the substring out. Those indices were "InnerTable" and "R5". They were unique and appear only once and above and below our part in the file.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;start=string.index(data,"InnerTable")&lt;/p&gt;
&lt;p&gt;stop=string.index(data,"R5")&lt;/p&gt;
&lt;p&gt;data = data[start:stop]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There are some html entities in that page which I removed using&amp;nbsp;&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;data = re.sub(r'[&amp;amp;nbspamltg]*;','',data)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is not necessary though but I did it for my sake.&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;months = ['Date']+re.findall(r'[a-zA-Z]{1,3}\d\d\d\d',data)&lt;/p&gt;
&lt;p&gt;earnings = ['Earnings/share (Rs)']+re.findall(r'\d\d\.\d\d',data)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Using this regex, I find out the date pattern and earnings per share pattern and store them in two lists. (The regex in second line should be changed to match any number of digits. I'm such a poor regex coder.)&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;for month, earning in zip(months, earnings):&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; dbc.execute('INSERT INTO EPSTABLE VALUES (?,?)' , (month,earning))&lt;/p&gt;
&lt;p&gt;dbconn.commit()&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;p&gt;for month,earning in dbc.execute('SELECT * FROM EPSTABLE'):&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; print '%s\t\t\t\t\t%s' % (month, earning)&lt;/p&gt;
&lt;p&gt;dbconn.close()&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Traversing elements simultaneously through two lists, they are inserted into the table and committed. Then traversing through each row in table and printing them. This program is just for learning coding in python with sqlite.&lt;/p&gt;
&lt;p&gt;Full Program:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;/p&gt;&lt;p&gt;import httplib,string,re,sqlite3&lt;/p&gt;
&lt;p&gt;dbconn = sqlite3.connect('db/tcs_eps.db')&lt;/p&gt;
&lt;p&gt;dbc = dbconn.cursor()&lt;/p&gt;
&lt;p&gt;dbc.execute("CREATE TABLE IF NOT EXISTS EPSTABLE(DATE TEXT,EPS TEXT)")&lt;/p&gt;
&lt;p&gt;dbc.execute("DELETE FROM EPSTABLE")&lt;/p&gt;
&lt;p&gt;host = "money.livemint.com"&amp;nbsp;&lt;/p&gt;
&lt;p&gt;epspage = "/IID64/F132540/Financial/Ratios/Company.aspx"&amp;nbsp;&lt;/p&gt;
&lt;p&gt;print "Please wait.. It will take some time depending on your connection speed.."&lt;/p&gt;
&lt;p&gt;con = httplib.HTTPConnection(host)&lt;/p&gt;
&lt;p&gt;con.connect()&lt;/p&gt;
&lt;p&gt;con.request("GET", epspage)&lt;/p&gt;
&lt;p&gt;resp = con.getresponse()&lt;/p&gt;
&lt;p&gt;data = resp.read()&lt;/p&gt;
&lt;p&gt;print "=================================================="&lt;/p&gt;
&lt;p&gt;start=string.index(data,"InnerTable")&lt;/p&gt;
&lt;p&gt;stop=string.index(data,"R5")&lt;/p&gt;
&lt;p&gt;data = data[start:stop]&lt;/p&gt;
&lt;p&gt;data = re.sub(r'[&amp;amp;nbspamltg]*;','',data)&lt;/p&gt;
&lt;p&gt;months = ['Date']+re.findall(r'[a-zA-Z]{1,3}\d\d\d\d',data)&lt;/p&gt;
&lt;p&gt;earnings = ['Earnings/share (Rs)']+re.findall(r'\d\d\.\d\d',data)&lt;/p&gt;
&lt;p&gt;for month, earning in zip(months, earnings):&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; #print '%s\t\t\t\t\t%s' % (month, earning)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; dbc.execute('INSERT INTO EPSTABLE VALUES (?,?)' , (month,earning))&lt;/p&gt;
&lt;p&gt;dbconn.commit()&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;for month,earning in dbc.execute('SELECT * FROM EPSTABLE'):&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; print '%s\t\t\t\t\t%s' % (month, earning)&lt;/p&gt;

&lt;p&gt;dbconn.close()&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Tcsscr" height="253" src="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2012-01-04/kDCsDxraomspodftargiJmFrakywhobHaqFBpDyuxgafJJAqHprwsFpJiFjl/tcsscr.png.scaled696.png" width="601" /&gt;
&lt;/div&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/screen-scraping-a-site-with-python-and-storin"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/screen-scraping-a-site-with-python-and-storin#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/bds9bVeAYxY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="398" width="733" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2012-01-04/AICeGqszaoFyvssrppIzkHcDmcqluhrbDtiyaeFqBGEdoyjysuFgvjHrJoDD/eps.png">
        <media:thumbnail height="398" width="733" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2012-01-04/AICeGqszaoFyvssrppIzkHcDmcqluhrbDtiyaeFqBGEdoyjysuFgvjHrJoDD/eps.png" />
      </media:content>
      <media:content type="image/png" height="253" width="601" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2012-01-04/kDCsDxraomspodftargiJmFrakywhobHaqFBpDyuxgafJJAqHprwsFpJiFjl/tcsscr.png">
        <media:thumbnail height="210" width="500" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2012-01-04/kDCsDxraomspodftargiJmFrakywhobHaqFBpDyuxgafJJAqHprwsFpJiFjl/tcsscr.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://blog.vigneshwaran.in/screen-scraping-a-site-with-python-and-storin</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 28 Dec 2011 04:40:30 -0800</pubDate>
      <title>Multitasking in shell with screen command</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/xijGN1SJJ5c/multitasking-in-shell-with-screen-command</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/multitasking-in-shell-with-screen-command</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;strong&gt;screen command:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;screen is a very powerful and awesome command in unix/linux. It is used to create multiple "screens" within a single shell. It is NOT the same as having multiple shells.&lt;/p&gt;
&lt;p&gt;Before knowing screen command, if I had a long running program ( a GUI program or may be a CLI program that won't end quick) and wanted to do something else, I would open another shell. Also I couldn't close a shell with running task because that would terminate the task. Now I can use screen to do these.&lt;/p&gt;
&lt;p&gt;Type "screen" in the shell to go into screen mode.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Bashtoscreen" height="440" src="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-12-28/scGnrqgqJlJCtCHfryxGntbCnGvnmacnnymmnJEjCilcDktsIIjgfjsInGzl/bashtoscreen.png.scaled696.png" width="641" /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;(Note: In the title, if you see bash, then we're in bash mode.. If it's screen, then we're into screen mode)&lt;/p&gt;
&lt;p&gt;Once we are into our first screen, we can create additional screens using the screen command &lt;strong&gt;Ctrl+A c&lt;/strong&gt; or the shell equivalent "screen" command.&lt;/p&gt;
&lt;p&gt;(Note again: Whatever command that starts with "Ctrl A" goes to the screen and not to the shell)&lt;/p&gt;
&lt;p&gt;You can create any number of screens. It is recommended to give every screen a name using the &lt;strong&gt;Ctrl+A A&lt;/strong&gt;&amp;nbsp;command.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Screen1" height="440" src="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-12-28/zjdnsFmckmwdtrEclkfEykEmFEEvuvodltbClIznpqIjmvkDjApDxvvBGgCq/screen1.png.scaled696.png" width="641" /&gt;
&lt;/div&gt;
I launched Thunderbird, Firefox and one simple C program that loops indefinitely in three separate screens (just for examples sake) and named them with the same name as the applications.&lt;/p&gt;
&lt;p&gt;To switch between the screens, there are 3 ways to do this. I will explain the shell based way a bit later. There are 2 ways to switch in screen mode. We can use &lt;strong&gt;Ctrl+A n&lt;/strong&gt; and &lt;strong&gt;Ctrl+A p&lt;/strong&gt;&amp;nbsp;to switch to next and previous screens respectively. Alternatively we can view the list of the screens using &lt;strong&gt;Ctrl+A " &lt;/strong&gt;command and switch to one. (This is where the name of the screen becomes useful.)&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Screen4" height="440" src="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-12-28/fAGGGkbanAeymfimfodesDFEtjzncnnBippgxiihwApcACJmfuCBzvxfmnnb/screen4.png.scaled696.png" width="641" /&gt;
&lt;/div&gt;
In the third screen, I run a c program that indefinitely loops and prints "Hai :)" (making your pc slow down)&lt;/p&gt;
&lt;p&gt;Now I can detach the screen and go back to shell using the &lt;strong&gt;Ctrl+A d&lt;/strong&gt;&amp;nbsp;command. I can even exit the shell now. Remember that firefox and thunderbird and that c program will still be running. We may not see the output of the c program but it will be still running in the processor.&lt;/p&gt;
&lt;p&gt;I can open shell again. I can switch to the screens by going into screen mode and use the switching commands. Or I can directly attach to the screen using its id by&lt;/p&gt;
&lt;p&gt;1. using &lt;strong&gt;screen -ls &lt;/strong&gt;to list the screens&lt;/p&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;p&gt;2. using &lt;strong&gt;screen -r id &lt;/strong&gt;to reattach to that id.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Screen5" height="440" src="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-12-28/mJFmnvufstdJIGgcBErCizxrhJDlvjIyBvAitjnrbxiqJkvbgkaovwwetCfv/screen5.png.scaled696.png" width="641" /&gt;
&lt;/div&gt;
Now I can see the output of the c program running still.&lt;/p&gt;
&lt;p&gt;We can use this practically for some better purposes when needed. Remember that you need to check for any running screens and terminate them if not necessary.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/multitasking-in-shell-with-screen-command"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/multitasking-in-shell-with-screen-command#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/xijGN1SJJ5c" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="440" width="641" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-12-28/scGnrqgqJlJCtCHfryxGntbCnGvnmacnnymmnJEjCilcDktsIIjgfjsInGzl/bashtoscreen.png">
        <media:thumbnail height="440" width="641" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-12-28/scGnrqgqJlJCtCHfryxGntbCnGvnmacnnymmnJEjCilcDktsIIjgfjsInGzl/bashtoscreen.png" />
      </media:content>
      <media:content type="image/png" height="440" width="641" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-12-28/zjdnsFmckmwdtrEclkfEykEmFEEvuvodltbClIznpqIjmvkDjApDxvvBGgCq/screen1.png">
        <media:thumbnail height="440" width="641" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-12-28/zjdnsFmckmwdtrEclkfEykEmFEEvuvodltbClIznpqIjmvkDjApDxvvBGgCq/screen1.png" />
      </media:content>
      <media:content type="image/png" height="440" width="641" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-12-28/fAGGGkbanAeymfimfodesDFEtjzncnnBippgxiihwApcACJmfuCBzvxfmnnb/screen4.png">
        <media:thumbnail height="440" width="641" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-12-28/fAGGGkbanAeymfimfodesDFEtjzncnnBippgxiihwApcACJmfuCBzvxfmnnb/screen4.png" />
      </media:content>
      <media:content type="image/png" height="440" width="641" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-12-28/mJFmnvufstdJIGgcBErCizxrhJDlvjIyBvAitjnrbxiqJkvbgkaovwwetCfv/screen5.png">
        <media:thumbnail height="343" width="500" url="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-12-28/mJFmnvufstdJIGgcBErCizxrhJDlvjIyBvAitjnrbxiqJkvbgkaovwwetCfv/screen5.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://blog.vigneshwaran.in/multitasking-in-shell-with-screen-command</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 23 Dec 2011 08:45:00 -0800</pubDate>
      <title>Bash script to find mutual friends in twitter</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/DAN9taHCoE4/bash-script-to-find-mutual-friends-in-twitter</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/bash-script-to-find-mutual-friends-in-twitter</guid>
      <description>&lt;p&gt;
	&lt;p&gt;My manager gave me a simple(tough for me) assignment to learn..&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Problem: Write a command line app using your favourite language that  accepts 2 facebook ids and return a list of common friends between the 2  ids.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I couldn't! I could make a program that list my friends but not others because it's private information and it requires others to allow my application blah blah..&lt;/p&gt;
&lt;p&gt;So I gave a try for twitter and I SUCCESSFULLY DID IT! ;) Because following and followers list are public in twitter.&lt;/p&gt;
&lt;p&gt;Check out the script and screenshot&lt;/p&gt;
&lt;p&gt;Script&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;/p&gt;&lt;p&gt;#!/bin/bash&lt;/p&gt;
&lt;p&gt;link1='https://api.twitter.com/1/friends/ids.json?screen_name='$1&lt;/p&gt;
&lt;p&gt;link2='https://api.twitter.com/1/friends/ids.json?screen_name='$2&lt;/p&gt;
&lt;p&gt;curl $link1 &amp;gt; .fol.tmp&lt;/p&gt;
&lt;p&gt;curl $link2 &amp;gt; .fol2.tmp&lt;/p&gt;
&lt;p&gt;cat .fol.tmp | sed 's/.*\[\([0-9,]*\)\].*/\1/' | sed 's/,/\n/g' | sort &amp;gt; .ids.tmp&lt;/p&gt;
&lt;p&gt;cat .fol2.tmp | sed 's/.*\[\([0-9,]*\)\].*/\1/' | sed 's/,/\n/g' | sort &amp;gt; .ids2.tmp&lt;/p&gt;
&lt;p&gt;#comm -12 .ids.tmp .ids2.tmp | tr '\n' ',' | sed 's/,$//' &amp;gt; .comids.tmp&lt;/p&gt;
&lt;p&gt;#comm -12 is same as grep -xFf :)&lt;/p&gt;
&lt;p&gt;grep -xFf .ids.tmp .ids2.tmp | tr '\n' ',' | sed 's/,$//' &amp;gt; .comids.tmp&lt;/p&gt;
&lt;p&gt;comids=`cat .comids.tmp`&lt;/p&gt;
&lt;p&gt;comidlink='https://api.twitter.com/1/users/lookup.json?user_id='$comids&lt;/p&gt;
&lt;p&gt;curl $comidlink &amp;gt; .lookup.tmp&lt;/p&gt;
&lt;p&gt;cat .lookup.tmp | tr ',' '\n' | grep '"name"' | sed 's/.*:\"\([^\"]*\)\"/\1/g'&lt;/p&gt;
&lt;p&gt;rm .fol.tmp .fol2.tmp .ids.tmp .ids2.tmp .comids.tmp .lookup.tmp&lt;/p&gt;

&lt;/blockquote&gt;
&lt;p&gt;Note: I'm an amateur programmer. This code may not be the most efficient but it does the job well.&lt;/p&gt;
&lt;p&gt;Screenshot:&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-12-23/GBElDpdxJGoyCgHsCyzwBCIoqesmhpyatmxybhdbcechlgjncwnwbthdsbzo/mutualfriends2.png"&gt;&lt;img alt="Mutualfriends2" height="522" src="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-12-23/GBElDpdxJGoyCgHsCyzwBCIoqesmhpyatmxybhdbcechlgjncwnwbthdsbzo/mutualfriends2.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/bash-script-to-find-mutual-friends-in-twitter"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/bash-script-to-find-mutual-friends-in-twitter#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/DAN9taHCoE4" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="768" width="1024" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-12-23/GBElDpdxJGoyCgHsCyzwBCIoqesmhpyatmxybhdbcechlgjncwnwbthdsbzo/mutualfriends2.png">
        <media:thumbnail height="768" width="1024" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-12-23/GBElDpdxJGoyCgHsCyzwBCIoqesmhpyatmxybhdbcechlgjncwnwbthdsbzo/mutualfriends2.png" />
      </media:content>
    <feedburner:origLink>http://blog.vigneshwaran.in/bash-script-to-find-mutual-friends-in-twitter</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 22 Dec 2011 23:51:00 -0800</pubDate>
      <title>Neembuu Uploader crossed 10k+ downloads and featured in a Japanese Magazine</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/SLxuy45YYU8/neembuu-uploader-crossed-10k-downloads-and-fe</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/neembuu-uploader-crossed-10k-downloads-and-fe</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Hi y'all,&lt;/p&gt;
&lt;p&gt;I hadn't been updating on NU for a long time after getting job. Though I am sincerely committed to my employers, I will still be responsible to my previous projects that helped me improve in life. I will use my weekends on them. Shashaank (Neembuu Admin) has a lots of plans for Neembuu, Neembuu Uploader, JPFM, JD and Vuze all combined. Lots of works ahead ;-)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NU Stats:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Downloads: 10325 (at the time of writing this)&lt;br /&gt;Top Country: France :)&lt;br /&gt;You can always see the latest stats at &lt;a href="http://neembuuuploader.sf.net/downloads.html"&gt;http://neembuuuploader.sf.net/downloads.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;France overtook Russia as the top downloading country. &lt;a href="http://korben.info/neembuu.html"&gt;Seems like we have a lot of fans there&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AND&lt;/strong&gt; I am very happy now to announce that Neembuu Uploader has been featured in a Japanese Tech magazine called "iP!". A month ago I got this mail from them:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style=""&gt;Dear Vigneshwaran Raveendran,&lt;/span&gt;&lt;p /&gt;&lt;span style=""&gt;I am an editor of a Japanese&amp;nbsp;&lt;/span&gt;&lt;span class="il" style=""&gt;magazine&lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;called "&lt;/span&gt;&lt;span class="il" style=""&gt;iP&lt;/span&gt;&lt;span style=""&gt;!", a&amp;nbsp;&lt;/span&gt;&lt;span class="il" style=""&gt;magazine&lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;for&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;Windows users with original DVD-ROMs to offer data/software.&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;I would like to introduce your "Neembuu Uploader"to Japanese Windows users.&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;And I am glad that you would give me kind permission to put your soft&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;into our DVD-ROM.&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;If OK,I would like to introduce "Neembuu Uploader" continuously from now on.&lt;/span&gt;&lt;p /&gt;&lt;span style=""&gt;Please let me &amp;nbsp;know when you have any questions or find any problems&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;for introducing your soft.&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;I'm looking forward to hearing from you soon.&lt;/span&gt;&lt;p /&gt;&lt;span style=""&gt;Published information is the following.&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;Please correct it when the mistake is found.&lt;br /&gt;&amp;lt;snipped&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And I replied:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style=""&gt;Dear Xxxxxxx Xxx,&lt;/span&gt;&lt;p /&gt;&lt;span style=""&gt;I am really glad to know that my product "Neembuu Uploader" will be introduced in&amp;nbsp;&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;your&amp;nbsp;&lt;/span&gt;&lt;span class="il" style=""&gt;magazine&lt;/span&gt;&lt;span style=""&gt;. You are ALLOWED to feature it in your&amp;nbsp;&lt;/span&gt;&lt;span class="il" style=""&gt;magazine&lt;/span&gt;&lt;span style=""&gt;. Please make sure&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;that you include my name "Vigneshwaran Raveendran" and the homepage url&amp;nbsp;&lt;/span&gt;&lt;br style="" /&gt;&lt;a href="http://neembuuuploader.sourceforge.net/" target="_blank" style=""&gt;http://neembuuuploader.sourceforge.net/&lt;/a&gt;&lt;span style=""&gt;&amp;nbsp;anywhere in the body of the content.&lt;/span&gt;&lt;p /&gt;&lt;span style=""&gt;I have one request. I am living in India where I cannot get access to your "&lt;/span&gt;&lt;span class="il" style=""&gt;iP&lt;/span&gt;&lt;span style=""&gt;!"&amp;nbsp;&lt;/span&gt;&lt;span class="il" style=""&gt;magazine&lt;/span&gt;&lt;span style=""&gt;.&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;So after the&amp;nbsp;&lt;/span&gt;&lt;span class="il" style=""&gt;magazine&lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;is published, please send me a scanned image of the page where&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;"Neembuu Uploader" is featured.&lt;/span&gt;&lt;p /&gt;&lt;span style=""&gt;Thank you&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After a long time, yesterday they replied:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style=""&gt;Vigneshwaran Raveendran様&lt;/span&gt;&lt;p /&gt;&lt;span style=""&gt;お世話になっております。晋遊舎の静内です。&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;このたびはソフトウエアの掲載に&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;ご協力ありがとうございました。&lt;/span&gt;&lt;p /&gt;&lt;span style=""&gt;無事に誌面が完成いたしましたのでお送りいたします。&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;引き続きまして、変わらぬご愛顧のほど、&lt;/span&gt;&lt;br style="" /&gt;&lt;span style=""&gt;どうぞよろしくお願い申し上げます。&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(Translate if you don't know japanese)&lt;/p&gt;
&lt;p&gt;They attached a pdf of the scanned magazine. I took this screenshot of the part where NU appears. Check it out:&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-12-23/jwhCsgcnhuFIwfbrjJCvwAfmqlHkgwhwdoinDHbunavAAHBdrvhgziInxEfs/28.png.scaled1000.png"&gt;&lt;img alt="28" height="522" src="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-12-23/jwhCsgcnhuFIwfbrjJCvwAfmqlHkgwhwdoinDHbunavAAHBdrvhgziInxEfs/28.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/neembuu-uploader-crossed-10k-downloads-and-fe"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/neembuu-uploader-crossed-10k-downloads-and-fe#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/SLxuy45YYU8" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="768" width="1024" url="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-12-23/jwhCsgcnhuFIwfbrjJCvwAfmqlHkgwhwdoinDHbunavAAHBdrvhgziInxEfs/28.png">
        <media:thumbnail height="375" width="500" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-12-23/jwhCsgcnhuFIwfbrjJCvwAfmqlHkgwhwdoinDHbunavAAHBdrvhgziInxEfs/28.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://blog.vigneshwaran.in/neembuu-uploader-crossed-10k-downloads-and-fe</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 22 Dec 2011 02:11:56 -0800</pubDate>
      <title>Session on linux commands: strace and ltrace</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/PSNkCQjyszE/session-on-linux-commands-strace-and-ltrace</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/session-on-linux-commands-strace-and-ltrace</guid>
      <description>&lt;p&gt;
	&lt;div style="margin: 8px;"&gt;
&lt;p&gt;Trainer: Mr. Vijayaguru Guruchave&lt;/p&gt;
&lt;p&gt;Attendees: The freshers team, my manager Kamesh, my best friend Jeyanthan, Shrinivasan, Arwin and few others&lt;/p&gt;
&lt;p&gt;Time: Dec 21, 2011 3PM&lt;/p&gt;
&lt;p&gt;This is our second technical session focused on linux commands strace and ltrace. There was also a discussion on man command and in-depth performance analysis of java vs c.&lt;/p&gt;
&lt;p&gt;Before going into ltrace and strace, we must know about the unix/linux architecture.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Unix_architecture" height="265" src="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-12-22/lltizmHgbsDetcxAuIJzEpGFAaHqlwvsJuxlaDDziiklrbwhcboxuuGoxFeI/unix_architecture.gif.scaled696.gif" width="266" /&gt;
&lt;/div&gt;
The kernel is the heart of an operating system which handles the low level operations of the operating system.&lt;/p&gt;
&lt;p&gt;To access the kernel operations, Unix/Linux provides system calls.&lt;/p&gt;
&lt;p&gt;Shell provides an interface for users to call system calls.&lt;/p&gt;
&lt;p&gt;There are library calls available for high level operations. Instead of using many number of system calls for accomplishing a particular high level task, one could rather use a single library call.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Libcall_and_syscall" height="420" src="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-12-22/ociIvlnAhyqmEDlhkrssDCjiABfByflseIByhpcgglwEBuatjldpojdvEvEs/libcall_and_syscall.gif.scaled696.gif" width="323" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Here an application uses c library's malloc function which calls the system call - sbrk.&lt;/p&gt;
&lt;div&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Libcall_syscall1" height="395" src="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-12-22/GmHhrucpxfowBxlydmcoqwfgGIfxsBCaCEmtdIzzpflsCaDtJwzqyGbEBjhz/libcall_syscall1.gif.scaled696.gif" width="402" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;(Thanks to Mr.Vijay for the diagrams)&lt;/div&gt;
&lt;div&gt;An application can use library calls and also can use system calls  directly but it's all system calls in the end as the library calls  internally use system calls themselves.&lt;/div&gt;
&lt;/div&gt;
&lt;div style="margin: 8px;"&gt;Similarly "ls" is a shell command that might be written using library calls and some system calls directly.&lt;/div&gt;
&lt;div style="margin: 8px;"&gt;If we want to trace what are all the library calls it uses, we can use &lt;strong&gt;&lt;span style="font-family: mceinline;"&gt;ltrace&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="margin: 8px;"&gt;If we want to trace what are all the system calls it directly uses or indirectly uses through library calls, then we should use &lt;strong&gt;strace&lt;/strong&gt;&lt;/div&gt;
&lt;div style="margin: 8px;"&gt;Let us see them in action.&lt;/div&gt;
&lt;div style="margin: 8px;"&gt;Try &lt;em&gt;strace ls&lt;/em&gt; in your terminal. You should see something like this:&lt;/div&gt;
&lt;blockquote&gt;
&lt;div style="margin: 8px;"&gt;[vigneshwaran@localhost ~]$ strace ls&lt;br /&gt;execve("/bin/ls", ["ls"], [/* 51 vars */]) = 0&lt;br /&gt;brk(0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x9744000&lt;br /&gt;mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7751000&lt;br /&gt;access("/etc/ld.so.preload", R_OK)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = -1 ENOENT (No such file or directory)&lt;br /&gt;open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3&lt;br /&gt;fstat64(3, {st_mode=S_IFREG|0644, st_size=118287, ...}) = 0&lt;br /&gt;mmap2(NULL, 118287, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7734000&lt;br /&gt;close(3)&amp;nbsp; &lt;br /&gt;&amp;lt;snipped&amp;gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div style="margin: 8px;"&gt;This is 0.1% of the output from the console. It prints out all the system commands used by the ls command.&lt;/div&gt;
&lt;div style="margin: 8px;"&gt;To have good readablity, print the output to a file using the -o switch.&lt;/div&gt;
&lt;div style="margin: 8px;"&gt;&lt;em&gt;strace -o strace.out ls&lt;/em&gt;&lt;/div&gt;
&lt;div style="margin: 8px;"&gt;then read the file using vim:&lt;/div&gt;
&lt;div style="margin: 8px;"&gt;&lt;em&gt;vim strace.out&lt;/em&gt;&lt;/div&gt;
&lt;div style="margin: 8px;"&gt;The &lt;em&gt;-c&lt;/em&gt; displays the statistics such as the number of each system calls, microseconds per call of each system call, total time taken by each system call, % of time spent on system call etc.&lt;/div&gt;
&lt;blockquote&gt;
&lt;div style="margin: 8px;"&gt;[vigneshwaran@localhost ~]$ strace -c ls&lt;br /&gt;access_log.1&amp;nbsp; google-chrome-stable_current_i386.rpm&amp;nbsp; jd.sh&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; qsort.tar&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Templates&lt;br /&gt;dead.letter&amp;nbsp;&amp;nbsp; Hello.c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; qsort.7z&amp;nbsp;&amp;nbsp; qsort.tar.bz2&amp;nbsp; Videos&lt;br /&gt;Desktop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hello.class&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Music&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; qsort.c&amp;nbsp;&amp;nbsp;&amp;nbsp; qsort.tar.gz&amp;nbsp;&amp;nbsp; workspace&lt;br /&gt;Documents&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hello.java&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Naruto Manga Downloader&amp;nbsp; qsort.out&amp;nbsp; qsort.zip&lt;br /&gt;Downloads&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hello.out&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pictures&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; qsort.rar&amp;nbsp; rpmbuild&lt;br /&gt;% time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; seconds&amp;nbsp; usecs/call&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; calls&amp;nbsp;&amp;nbsp;&amp;nbsp; errors syscall&lt;br /&gt;------ ----------- ----------- --------- --------- ----------------&lt;br /&gt;100.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.001000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_tid_address&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; open&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; close&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; execve&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 access&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; brk&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; munmap&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uname&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mprotect&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rt_sigaction&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rt_sigprocmask&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getrlimit&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 25&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mmap2&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stat64&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fstat64&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getdents64&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_thread_area&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; statfs64&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; openat&lt;br /&gt;&amp;nbsp; 0.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_robust_list&lt;br /&gt;------ ----------- ----------- --------- --------- ----------------&lt;br /&gt;100.00&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.001000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 102&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 total&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;Let's see how this can be useful in analysing performance of a simple "Hello, World!" program in c and java.&lt;/p&gt;
&lt;p&gt;I created the c and java programs for printing "Hello, World!" and compiled them. Now using strace before executing them..&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-12-22/FhFrwfbzxDJiIHxGwIjAaHoGdBrsImbviCnmAGbnpbyrJbmJrsFppEvziCEa/07.png.scaled1000.png"&gt;&lt;img alt="07" height="504" src="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-12-22/FhFrwfbzxDJiIHxGwIjAaHoGdBrsImbviCnmAGbnpbyrJbmJrsFppEvziCEa/07.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-12-22/FBuIrHnBzaDxwrnJfDcDfDodDCzwcbejkqomDlDymlCgDICGdHGaGDFmqyld/36.png.scaled1000.png"&gt;&lt;img alt="36" height="504" src="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-12-22/FBuIrHnBzaDxwrnJfDcDfDodDCzwcbejkqomDlDymlCgDICGdHGaGDFmqyld/36.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
The java program uses 337 system calls to execute that simple task whereas the c version uses only 23 system calls. The c program is 15 times faster than the equivalent java program. You should note that since java program runs by an interpreter, it requires the launch and running of java runtime environment as well so it obviously take more calls than c. But anyways it's a fact that java program will be slower than c program. (Unix itself is written in c!)&lt;/p&gt;
&lt;p&gt;Lets play another experiment using &lt;em&gt;-p&lt;/em&gt; switch. The &lt;em&gt;-p&lt;/em&gt; switch is used to trace the system calls used by a process by specifying the id of the process.&lt;/p&gt;
&lt;p&gt;Open two terminals. In the first one, execute &lt;em&gt;echo $$&lt;/em&gt; to print the terminal's process id.&lt;/p&gt;
&lt;p&gt;Terminal 1:&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;[vigneshwaran@localhost ~]$ echo $$&lt;br /&gt;5017&lt;br /&gt;[vigneshwaran@localhost ~]$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Terminal 2:&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;[vigneshwaran@localhost ~]$ strace -p 5017&lt;br /&gt;Process 5017 attached - interrupt to quit&lt;br /&gt;read(0,&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Terminal 2 just displays "read(0," waiting for any action in terminal 1.&lt;/p&gt;
&lt;p&gt;Now I just type a character "a" in the terminal 1 and see what happens in terminal 2.&lt;/p&gt;
&lt;p&gt;Terminal 1:&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;[vigneshwaran@localhost ~]$ echo $$&lt;br /&gt;5017&lt;br /&gt;[vigneshwaran@localhost ~]$ a&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Terminal 2:&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;
&lt;p&gt;[vigneshwaran@localhost ~]$ strace -p 5017&lt;br /&gt;Process 5017 attached - interrupt to quit&lt;br /&gt;read(0, "a", 1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1&lt;br /&gt;rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0&lt;br /&gt;write(2, "a", 1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1&lt;br /&gt;rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0&lt;br /&gt;rt_sigprocmask(SIG_BLOCK, NULL, [], 8)&amp;nbsp; = 0&lt;br /&gt;read(0,&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You can understand the read and write methods. The read method reads the "a" character from memory.&lt;/p&gt;
&lt;p&gt;The first parameter is 0 meaning standard input.&lt;br /&gt;The second parameter is the character being read.&lt;br /&gt;The third parameter is the number of bytes read (here 1).&lt;/p&gt;
&lt;p&gt;There is also a write method because the typed character should echo back to the screen. In case of password input, there won't be a write method.&lt;/p&gt;
&lt;p&gt;There are various switches for various purposes and following are most commonly used ones. This post is already long for the explained ones. Refer man pages for the use of the remaining interesting switches. :)&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;
&lt;p&gt;strace:&lt;br /&gt;======&lt;/p&gt;
&lt;p&gt;strace -c&lt;p /&gt;strace -o&lt;p /&gt;strace -p&lt;p /&gt;strace -f&lt;p /&gt;strace -ff&lt;p /&gt;strace -r&lt;p /&gt;strace -t&lt;p /&gt;strace -tt&lt;p /&gt;strace -T&lt;p /&gt;strace -e trace=network&lt;p /&gt;strace -s&lt;p /&gt;strace -o /tmp/telnet.out -e trace=network telnet &lt;a href="http://www.google.com"&gt;www.google.com&lt;/a&gt; 80&lt;p /&gt;&lt;p /&gt;&lt;br /&gt;ltrace:&lt;br /&gt;======&lt;p /&gt;ltrace -n 5 svn --version&lt;p /&gt;ltrace -r svn --version&lt;p /&gt;ltrace -c svn --version&lt;p /&gt;&amp;nbsp;ltrace -n5 -S svn --version&lt;p /&gt;ltrace -c -S svn --version&lt;p /&gt;ltrace -tt -S svn --version&lt;/p&gt;
&lt;/blockquote&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/session-on-linux-commands-strace-and-ltrace"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/session-on-linux-commands-strace-and-ltrace#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/PSNkCQjyszE" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
      <media:content type="image/gif" height="265" width="266" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-12-22/lltizmHgbsDetcxAuIJzEpGFAaHqlwvsJuxlaDDziiklrbwhcboxuuGoxFeI/unix_architecture.gif">
        <media:thumbnail height="265" width="266" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-12-22/lltizmHgbsDetcxAuIJzEpGFAaHqlwvsJuxlaDDziiklrbwhcboxuuGoxFeI/unix_architecture.gif.scaled500.gif" />
      </media:content>
      <media:content type="image/gif" height="420" width="323" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-12-22/ociIvlnAhyqmEDlhkrssDCjiABfByflseIByhpcgglwEBuatjldpojdvEvEs/libcall_and_syscall.gif">
        <media:thumbnail height="420" width="323" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-12-22/ociIvlnAhyqmEDlhkrssDCjiABfByflseIByhpcgglwEBuatjldpojdvEvEs/libcall_and_syscall.gif.scaled500.gif" />
      </media:content>
      <media:content type="image/gif" height="395" width="402" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-12-22/GmHhrucpxfowBxlydmcoqwfgGIfxsBCaCEmtdIzzpflsCaDtJwzqyGbEBjhz/libcall_syscall1.gif">
        <media:thumbnail height="395" width="402" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-12-22/GmHhrucpxfowBxlydmcoqwfgGIfxsBCaCEmtdIzzpflsCaDtJwzqyGbEBjhz/libcall_syscall1.gif.scaled500.gif" />
      </media:content>
      <media:content type="image/png" height="742" width="1024" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-12-22/FhFrwfbzxDJiIHxGwIjAaHoGdBrsImbviCnmAGbnpbyrJbmJrsFppEvziCEa/07.png">
        <media:thumbnail height="362" width="500" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-12-22/FhFrwfbzxDJiIHxGwIjAaHoGdBrsImbviCnmAGbnpbyrJbmJrsFppEvziCEa/07.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="742" width="1024" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-12-22/FBuIrHnBzaDxwrnJfDcDfDodDCzwcbejkqomDlDymlCgDICGdHGaGDFmqyld/36.png">
        <media:thumbnail height="362" width="500" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-12-22/FBuIrHnBzaDxwrnJfDcDfDodDCzwcbejkqomDlDymlCgDICGdHGaGDFmqyld/36.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://blog.vigneshwaran.in/session-on-linux-commands-strace-and-ltrace</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 20 Dec 2011 04:00:00 -0800</pubDate>
      <title>Training Session on SMTP and a discussion on its strange vulnerability</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/_KAmXll6py4/training-session-on-smtp-and-a-discussion-on</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/training-session-on-smtp-and-a-discussion-on</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Trainer: Mr. Kamesh Jayachandran&lt;/p&gt;
&lt;p&gt;Attendees: The freshers team including myself, &lt;a href="http://jophinepranjal.blogspot.com/2011/12/day1-training-in-collabnet-dec-19th.html"&gt;Jophine&lt;/a&gt;, Nithya, Harish, Sathish and Annapoorni and 6 more employees&lt;/p&gt;
&lt;p&gt;Time: 3PM Dec 20, 2011&lt;/p&gt;
&lt;p&gt;This was our first training session to be followed by many in future. It is not the usual theoretical smtp session with block diagrams like you might think. It was a practical session.&lt;/p&gt;
&lt;p&gt;I learnt the following commands:&lt;/p&gt;
&lt;p&gt;nslookup - displays the ip address of a web server&lt;br /&gt;Using "set q=mx", we can lookup mx record configuration as well.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="59" height="665" src="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-12-20/gvnxvhuisjwqtkttgAGpwguDfIqAsFAqJxBIBFfxmtpEDhxhzjkhcJzhmBjD/59.png.scaled696.png" width="659" /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Try these commands in your terminal&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000080;"&gt;$telnet gmail-smtp-in.l.google.com 25&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000080;"&gt;helo example.com&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000080;"&gt;mail from: &amp;lt;&lt;a href="mailto:abc@xyz.com"&gt;abc@xyz.com&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000080;"&gt;rcpt to: &amp;lt;&lt;a href="mailto:validemailaddress@gmail.com"&gt;validemailaddress@gmail.com&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000080;"&gt;data&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000080;"&gt;Hai how are you?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000080;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;First we telnet to port 25 of the specified address. (If there is no errors based on crlf stuffs, you can enter those following commands)&lt;/p&gt;
&lt;p&gt;The SMTP protocol requires that you must helo some website to it. It doesn't verify the url.&lt;/p&gt;
&lt;p&gt;You should enter a valid recipient address in the "rcpt to:" field.&lt;/p&gt;
&lt;p&gt;You can enter any address in the "mail from:" field and the mail will be sent without any authentication. This is called email spoofing.&lt;/p&gt;
&lt;p&gt;Type data and hit enter. Now you can type the body of the message in any number of lines.&lt;/p&gt;
&lt;p&gt;Note that there is a dot "." to terminate the message string.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="14" height="665" src="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-12-20/ezFkzxyBltHBeaqveJgEoyImfrJbACqDnAksszHmIcHDaHchAbeeEjFAvxxB/14.png.scaled696.png" width="659" /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you know this, then you can send a fake mail which appears like it was sent by other person instead of you.&lt;/p&gt;
&lt;p&gt;If these kind of scripts are difficult for you, then you can try some php based contact forms in some websites. This one is mine:&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="07" height="444" src="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-12-20/uckvGJuEIpoCBvgGbvvrAtAlxHclxmCyIsAmitiolhcFEancJEbacJGttcyz/07.png.scaled696.png" width="605" /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;In these kinds of forms, you can type in your enemy's name and email address and send the email to the site's admin(in this case, me.) There will be no kind of authentication. This is just like sending a fake postal mail with different from address. But you shouldn't be doing like this illegally. This is just for educational purposes.&lt;/p&gt;
&lt;p&gt;Anyways most modern email clients these days can figure out the emails without authentication and show the recipient a warning that the sender may not be originally who they claim. See the red warning box in screenshot:&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-12-20/xhHzhaJbBcjhiedjxqbfBJaekrAfGoGBpoCluEJxyyhxlEJtogolfuBCxCsI/46.png.scaled1000.png"&gt;&lt;img alt="46" height="522" src="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-12-20/xhHzhaJbBcjhiedjxqbfBJaekrAfGoGBpoCluEJxyyhxlEJtogolfuBCxCsI/46.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This warning will be shown even if you are legitimately sending with your original email address because the server doesn't know that if there is no authentication.&lt;/p&gt;
&lt;p&gt;In the next screenshot, it is the original sender. (Sorry I've striken out the email address in respect to the privacy of the sender)&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-12-20/igDswifEojoGkGyJCtzirGAazdlnDDHwCiEBdExejDBmikaijBltvqptaCeu/50.png.scaled1000.png"&gt;&lt;img alt="50" height="522" src="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-12-20/igDswifEojoGkGyJCtzirGAazdlnDDHwCiEBdExejDBmikaijBltvqptaCeu/50.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
I learnt a lot of unix commands like ps, grep, screen, tcpdump (and its arguments), wc etc. But these are not enough. I have a hellot to learn. I will update more from future sessions.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/training-session-on-smtp-and-a-discussion-on"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/training-session-on-smtp-and-a-discussion-on#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/_KAmXll6py4" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="665" width="659" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-12-20/gvnxvhuisjwqtkttgAGpwguDfIqAsFAqJxBIBFfxmtpEDhxhzjkhcJzhmBjD/59.png">
        <media:thumbnail height="505" width="500" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-12-20/gvnxvhuisjwqtkttgAGpwguDfIqAsFAqJxBIBFfxmtpEDhxhzjkhcJzhmBjD/59.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="444" width="605" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-12-20/uckvGJuEIpoCBvgGbvvrAtAlxHclxmCyIsAmitiolhcFEancJEbacJGttcyz/07.png">
        <media:thumbnail height="367" width="500" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-12-20/uckvGJuEIpoCBvgGbvvrAtAlxHclxmCyIsAmitiolhcFEancJEbacJGttcyz/07.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-12-20/xhHzhaJbBcjhiedjxqbfBJaekrAfGoGBpoCluEJxyyhxlEJtogolfuBCxCsI/46.png">
        <media:thumbnail height="375" width="500" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-12-20/xhHzhaJbBcjhiedjxqbfBJaekrAfGoGBpoCluEJxyyhxlEJtogolfuBCxCsI/46.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-12-20/igDswifEojoGkGyJCtzirGAazdlnDDHwCiEBdExejDBmikaijBltvqptaCeu/50.png">
        <media:thumbnail height="375" width="500" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-12-20/igDswifEojoGkGyJCtzirGAazdlnDDHwCiEBdExejDBmikaijBltvqptaCeu/50.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="665" width="659" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-12-20/ezFkzxyBltHBeaqveJgEoyImfrJbACqDnAksszHmIcHDaHchAbeeEjFAvxxB/14.png">
        <media:thumbnail height="505" width="500" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-12-20/ezFkzxyBltHBeaqveJgEoyImfrJbACqDnAksszHmIcHDaHchAbeeEjFAvxxB/14.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://blog.vigneshwaran.in/training-session-on-smtp-and-a-discussion-on</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 11 Dec 2011 02:38:00 -0800</pubDate>
      <title>Starting my career with CollabNet</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/4E8uWTdDSf4/starting-my-career-with-collabnet</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/starting-my-career-with-collabnet</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Hai guys&lt;/p&gt;
&lt;p&gt;I am starting my career with&amp;nbsp;&lt;a href="http://www.collab.net/"&gt;CollabNet&lt;/a&gt;&amp;nbsp;from Wednesday Dec 14, 2011.&lt;/p&gt;
&lt;p&gt;I already had offers from 2 big service based companies and was waiting to join one of them. Then I heard my friend &lt;a href="https://plus.google.com/101765729167843196323/about" title="Balaji"&gt;Balaji&lt;/a&gt;'s work experience in his product based company and had an awakening that I am more fit to work in a product based company than in a service based one. Having developed small tools and utility softwares is also one of the reasons. So I started to look for an opportunity in a product based company in Chennai.&lt;/p&gt;
&lt;p&gt;My college senior and friend &lt;a href="http://www.ijeyanthan.com/blog/archives/finally-my-dream-came-true-collabnet"&gt;Jeyanthan&lt;/a&gt;,&amp;nbsp;who has been working in CollabNet for more than a year, informed me about an opening in CollabNet for freshers. (Jeyanth bro has also studied in the same school as mine. What a coincidence?) I had some kind of feeling that I am definitely going to start working there before this year ends and it happened. I cleared 7 rounds of interview - 2 written, 3 technical face-to-face, 2 general HR.&lt;/p&gt;
&lt;p&gt;Every HR was very kind and friendly. So it was apparent that there will be no scary office politics. Package is decent. (Planning to donate 5$ out of my salary to one opensource project every month starting with Wikipedia.) Work environment looked awesome. Flexible working hours and no formal dress code. This kind of first job for a fresher is a golden opportunity!&lt;/p&gt;
&lt;p&gt;After getting the offer letter, I had one week of time for joining. I came back to Madurai to take my Passport and other original educational certificates and identity proofs. I'll be leaving tonight for Chennai.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update to NeembuuUploader:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I was in Chennai for one month. I had no laptop or any resource to work. I received 4 bug reports in this month. The sites MediaFire, MegaUpload and iFile.it changed a little bit and so the corresponding plugins in NeembuuUploader broke. I fixed them and added the Turkish language translation (contributed by Atif Zafrak) and released version 2.6 - a minor bugfix update. :)&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/starting-my-career-with-collabnet"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/starting-my-career-with-collabnet#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/4E8uWTdDSf4" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://blog.vigneshwaran.in/starting-my-career-with-collabnet</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 03 Nov 2011 11:37:00 -0700</pubDate>
      <title>Neembuu Uploader featured in "Linux For You" magazine</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/7QBhAnOuhIc/neembuu-uploader-featured-in-linux-for-you-ma</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/neembuu-uploader-featured-in-linux-for-you-ma</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Loads of Thanks to my amazing inspiring super-awesome senior Jeyanth for informing about this matter and also to his colleague who informed him first.&lt;/p&gt;
&lt;p&gt;Neembuu Uploader is featured in "Linux For You" magazine November 2011 edition page 12.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-11-03/muGCCcIFCobfBbyBiffasuvgoGdxjnGiqdiooldcbqEErEDnlbtpIkyjIgiw/Image0498.jpg.scaled1000.jpg"&gt;&lt;img alt="Image0498" height="928" src="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-11-03/muGCCcIFCobfBbyBiffasuvgoGdxjnGiqdiooldcbqEErEDnlbtpIkyjIgiw/Image0498.jpg.scaled696.jpg" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
(Sorry for the bad quality.. Someday I'm gonna buy Android phone with HD camera.. hmm..)&lt;/p&gt;
&lt;p&gt;As soon as Jeyanth bro told me, I went out, bought this 100Rs magazine, searched. Without any suspense, it was in 12th page itself. The content seemed like taken from some review site I don't remember now. I'd have been more happy if it was featured in my favorite magazine "Digit". Expecting that to happen.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This is the front cover of this magazine.&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-11-03/gJthCFgsIutfGGIbnClnmeBhBAebrJoqyJGcDuqgEcpwHIoovjamBbJldHoy/Image0500.jpg.scaled1000.jpg"&gt;&lt;img alt="Image0500" height="928" src="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-11-03/gJthCFgsIutfGGIbnClnmeBhBAebrJoqyJGcDuqgEcpwHIoovjamBbJldHoy/Image0500.jpg.scaled696.jpg" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;I have released version 2.5 last month but didn't blog about it. It was just a small update like iPhone 4S over iPhone 4. 5 more sites and 9 more translations.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: line-through;"&gt;All nice things happen to Neembuu Uploader but its creator don't have a satisfying job. How ironic?&lt;/span&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/neembuu-uploader-featured-in-linux-for-you-ma"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/neembuu-uploader-featured-in-linux-for-you-ma#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/7QBhAnOuhIc" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
      <media:content type="image/jpeg" height="1200" width="900" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-11-03/muGCCcIFCobfBbyBiffasuvgoGdxjnGiqdiooldcbqEErEDnlbtpIkyjIgiw/Image0498.jpg">
        <media:thumbnail height="667" width="500" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-11-03/muGCCcIFCobfBbyBiffasuvgoGdxjnGiqdiooldcbqEErEDnlbtpIkyjIgiw/Image0498.jpg.scaled500.jpg" />
      </media:content>
      <media:content type="image/jpeg" height="1280" width="960" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-11-03/gJthCFgsIutfGGIbnClnmeBhBAebrJoqyJGcDuqgEcpwHIoovjamBbJldHoy/Image0500.jpg">
        <media:thumbnail height="667" width="500" url="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-11-03/gJthCFgsIutfGGIbnClnmeBhBAebrJoqyJGcDuqgEcpwHIoovjamBbJldHoy/Image0500.jpg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://blog.vigneshwaran.in/neembuu-uploader-featured-in-linux-for-you-ma</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 21 Oct 2011 02:48:00 -0700</pubDate>
      <title>Concept to implement a mouse-over equivalent for touch screen devices</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/wsBxPlIOgx0/concept-to-implement-a-mouse-over-equivalent</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/concept-to-implement-a-mouse-over-equivalent</guid>
      <description>&lt;p&gt;
	&lt;p&gt;If you used touchscreen devices, sometimes you might have felt that it would be nice to have something like the "mouse-over" events in computers. It would be a nice feature to have but after all these years neither Apple nor Google did anything about it. Recently I had this idea for "finger-over" in touch screen devices. I don't know Electronics Engineering so my concept may be wrong. Or may be it's already implemented. Watch out for my ugly (mspaint) drawings.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Concept1" height="460" src="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-10-21/ztcvtEzHapDzAffxsaoGoixfAjJdajJbBdjozzbelwBkfbglGBulpyjFhgua/concept1.png.scaled696.png" width="614" /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;Almost all touchscreen phones have proximity sensors. Replace it with 4 proximity sensor (or whatever best suited for the purpose) on 4 corners of the screen behind the screen. They should be of different frequencies and should point towards the center.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Concept2" height="533" src="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-10-21/vFniEGBlhvjBDkypIcviluDpfupwEAtfpvzmsCDvJJCfeIlhpjBGrJozilqH/concept2.png.scaled696.png" width="614" /&gt;
&lt;/div&gt;
Now if we put our finger 0.5-1.0cm above the screen, the waves emitted from the sensors will reflect back to them. In this diagram, it looks like sensor 4 will receive its reflection first followed by 3, 2 and 1.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-10-21/HfFpBAgzqJgqkmEJsuntwEFBkbtosdfylCbublrqGBbfqFzaABEojGoJtfzm/concept3.png.scaled1000.png"&gt;&lt;img alt="Concept3" height="457" src="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-10-21/HfFpBAgzqJgqkmEJsuntwEFBkbtosdfylCbublrqGBbfqFzaABEojGoJtfzm/concept3.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now we can find the exact position of the finger using the differences from the waves. If the sensors are capable of generating a 3d imaging of the finger, then the tip of the finger can be found. Nowadays softwares can recognize faces so finding a tip of a finger wont be difficult. If 3d imaging is not possible, then atleast the tip of the finger can be found by setting a threshold limit (0.5-1.0cm as I said previously). If it doesn't look like a finger tip but like a big flat surface, then it's the user's cheek :P Then turn off the display (the original job of proximity sensors). That's all there is to it.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Edit: This is not similar to what is already done in Microsoft Surface. If you put a glass of Mango juice, the surrounding surface changes to yellow. It looks like surface uses Optical camera on 4 corners to find the color but it depends on touch and not hover. It will work only if you put something "on" it.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Benefits to users:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If this is done, then users can enjoy the "finger-over" in touchscreen devices.&lt;/p&gt;
&lt;p&gt;1. Websites that use mouseover event in javascript can be expected to work.&lt;/p&gt;
&lt;p&gt;2. There is a new System bar in Icecream Sandwich that always appear below the screen. It would be nice if it appears only if finger tip is near the bottom of the screen. The system bar will not be visible, then appears translucently if finger is near the bottom the screen and fully visible when being touched. For a nice effect, we can vary the degree of translucence directly proportional to the distance between the finger and the position of that bar on the screen. This I really wish to happen.&lt;/p&gt;
&lt;p&gt;3. Most obvious use. If user is clueless of what a button does, then he can simply hover the finger over the button for a while until a tooltip shows up.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Device Manufacturers:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This will be an extra headache for device manufacturers as it may be require 4 sensors below or adjacent to screen which increases the phone thickness, complex circuitry, reduced battery hours. But this can be an optional feature.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For developers:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Developers can expect methods like &lt;em&gt;onFingerOver(), onFingerOver(customtimeout)&lt;/em&gt;&amp;nbsp;:P&lt;/p&gt;
&lt;p&gt;Such methods obviously execute before (and may be also after) click events.&lt;/p&gt;
&lt;p&gt;Lets say that not all manufacturers support this hardware feature. In that case, the developers need not worry about compatibility if they used FingerOver events for showing tooltip only. Android system will simply won't execute the code. But if they use FingerOver events to display a panel or something like the system bar, then developers (or Android system) should replace it with an alternate interface like Swiping(like notification area).&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Nothing is impossible for humans. Even if my concept is wrong, something like this will happen in the future. Let us see :)&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/concept-to-implement-a-mouse-over-equivalent"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/concept-to-implement-a-mouse-over-equivalent#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/wsBxPlIOgx0" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="460" width="614" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-10-21/ztcvtEzHapDzAffxsaoGoixfAjJdajJbBdjozzbelwBkfbglGBulpyjFhgua/concept1.png">
        <media:thumbnail height="375" width="500" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-10-21/ztcvtEzHapDzAffxsaoGoixfAjJdajJbBdjozzbelwBkfbglGBulpyjFhgua/concept1.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="533" width="614" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-10-21/vFniEGBlhvjBDkypIcviluDpfupwEAtfpvzmsCDvJJCfeIlhpjBGrJozilqH/concept2.png">
        <media:thumbnail height="434" width="500" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-10-21/vFniEGBlhvjBDkypIcviluDpfupwEAtfpvzmsCDvJJCfeIlhpjBGrJozilqH/concept2.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="533" width="811" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-10-21/HfFpBAgzqJgqkmEJsuntwEFBkbtosdfylCbublrqGBbfqFzaABEojGoJtfzm/concept3.png">
        <media:thumbnail height="329" width="500" url="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-10-21/HfFpBAgzqJgqkmEJsuntwEFBkbtosdfylCbublrqGBbfqFzaABEojGoJtfzm/concept3.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://blog.vigneshwaran.in/concept-to-implement-a-mouse-over-equivalent</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 06 Oct 2011 21:26:00 -0700</pubDate>
      <title>Conspiracy Theory: Could Steve Jobs have died before Oct 5?</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/mhxQDX2RU9E/conspiracy-theory-could-steve-jobs-have-died</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/conspiracy-theory-could-steve-jobs-have-died</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I have this conspiracy theory in my mind that &lt;strong&gt;Steve Jobs might have died on Oct 4 or before and Apple covered up the news because of their Oct 4 event or may be Steve Jobs himself asked them to cover up.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I followed the Apple's homepage for 3 days continuously.&lt;/p&gt;
&lt;p&gt;Oct 4 - Details on iPhone 4 and that conference is going on.&lt;/p&gt;
&lt;p&gt;Oct 5 - Details on iPhone 4S, links to download previous day keynotes.&lt;/p&gt;
&lt;p&gt;Oct 6 - A small paragraph saying Steve Jobs has died&lt;/p&gt;
&lt;p&gt;This was the source of information. All the blogs and newssites started to publish articles on "How Steve changed the world" and quotes by notable people. But still there is no clear detail on his death.&lt;/p&gt;
&lt;p&gt;Anyways I loved Steve Jobs. Kindly send your thoughts to &lt;a href="mailto:rememberingsteve@apple.com"&gt;rememberingsteve@apple.com&lt;/a&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/conspiracy-theory-could-steve-jobs-have-died"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/conspiracy-theory-could-steve-jobs-have-died#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/mhxQDX2RU9E" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://blog.vigneshwaran.in/conspiracy-theory-could-steve-jobs-have-died</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 15 Sep 2011 03:29:00 -0700</pubDate>
      <title>Neembuu Uploader v2.4 - World's first software in Sourashtra!</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/VkrvClJpZZ8/neembuu-uploader-v24-worlds-first-software-in</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/neembuu-uploader-v24-worlds-first-software-in</guid>
      <description>&lt;p&gt;
	&lt;p&gt;NeembuuUploader v2.4 is arguably the world's first full-fledged software that can be used in Sourashtra language. The translation is provided by one of my best buddies &lt;strong&gt;&lt;a href="https://plus.google.com/101765729167843196323/posts"&gt;Balaji Sivanath&lt;/a&gt;. &lt;/strong&gt;(See screenshots below)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I just released v2.3 about 2 weeks ago(Sep2). v2.3 was a major update over v2.2. We tested it thoroughly but still somehow 2 bugs leaked out.. They escaped our test because they won't happen to any one in India. They are,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;System Locale Bug&lt;/strong&gt; - Due to one single missing line in a catch block, NU wouldn't start if the system locale is set to anything other than English. I got complaints from Sweden and Denmark. This was a serious issue which could lose me a lot of non-English users..&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bug in FileSonic and Wupload plugins&lt;/strong&gt; - What we didn't know was both these sites redirect to .in domain (Just like Google.com redirects to .co.in) and in other countries, they redirect to corresponding domain. We coded directly against .in domain hoping it will work anywhere. But it worked well anywhere in India but not outside India.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;NOW WE FIXED BOTH THESE ISSUES!!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We verified the fix with those troubled users. They were really cooperative. This is why we had to make the next release on such an early date.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What's new in this version?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The previous version's update notification dialog can explain a lot.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-09-15/hfeyewkuEvtjEpawtEEosasJflfokiaCsdznGudiHjdjgnaJppHpzwwodpBy/BeautifulUpdateNotificationfrom2.3.png.scaled1000.png"&gt;&lt;img alt="Beautifulupdatenotificationfrom2" height="522" src="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-09-15/hfeyewkuEvtjEpawtEEosasJflfokiaCsdznGudiHjdjgnaJppHpzwwodpBy/BeautifulUpdateNotificationfrom2.3.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;Now NeembuuUploader supports 25 filehosting sites!! (previously v2.3 - 12 and before that v2.2 - 6).&lt;/p&gt;
&lt;p&gt;Seems like we are following Moore's law by doubling our ability in each release ;)&lt;/p&gt;
&lt;p&gt;Added more convenient controls in Upload History window.&lt;/p&gt;
&lt;p&gt;We have a new settings window now! This is how it looks.. Not much options for now as we had to rush to release this.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Settingsdialogwindows" height="406" src="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-09-15/HdpselasBicusCmwhqGwqvtfhabcfzrifcnmCnnFrgEjCfszizEisicyifwn/SettingsDialogWindows.png.scaled696.png" width="558" /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Translations:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We are getting atleast two translations everyday from developers all over the world. &lt;strong&gt;One person I am so proud to tell is my favorite Grandpa who provided me with Malay translation ;)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Version 2.4 supports Catalan, Sourashtra, Spanish and Tamil fully. Hindi, Malay and Vietnamese were incomplete at the time of release.&lt;/p&gt;
&lt;p&gt;Today morning I received translation for Brazilian Portugese (pt_BR). Another two guys offered German and Greek. Their submission is pending.&lt;/p&gt;
&lt;p&gt;I make sure that every translator is properly credited both in the software's About Dialog and Project site.&lt;/p&gt;
&lt;p&gt;Check out this gallery of how NeembuuUploader looks in each language.&lt;/p&gt;
&lt;p&gt;(click on the image to see in fullscreen zoom)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Brazilian Portugese - by Maykon da Silva Siqueira&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-09-15/zhlAzHacubqcCzJACymuxIdoheBvjpHqnHxinIbshBEsGjtoEgFJHJktfGFI/BrazilianPortugeseWindows.png.scaled1000.png"&gt;&lt;img alt="Brazilianportugesewindows" height="522" src="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-09-15/zhlAzHacubqcCzJACymuxIdoheBvjpHqnHxinIbshBEsGjtoEgFJHJktfGFI/BrazilianPortugeseWindows.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Catalan - by Jordi Castells&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-09-15/huaqiucCyntiuwsaHoAFqFzxcutcdkbkffyzeBsqjxwAhmqIEnfzarpfadzD/CatalanWindows.png.scaled1000.png"&gt;&lt;img alt="Catalanwindows" height="522" src="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-09-15/huaqiucCyntiuwsaHoAFqFzxcutcdkbkffyzeBsqjxwAhmqIEnfzarpfadzD/CatalanWindows.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hindi&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;(Incomplete)&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;- by Shashaank Tulsyan (my mentor)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-09-15/qCsBpHbzmGFjIGvJdrvklgJHJhrEyHfnuxtBiuAJndibkkevmflJtcsxtzur/HindiWindows.png.scaled1000.png"&gt;&lt;img alt="Hindiwindows" height="522" src="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-09-15/qCsBpHbzmGFjIGvJdrvklgJHJhrEyHfnuxtBiuAJndibkkevmflJtcsxtzur/HindiWindows.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Malay (Incomplete) - by Natesan Vellaichamy (my grandpa)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-09-15/xlAvbhIDkbbeaxEsCvfgjEkCmspBqAClGuxaEnracuEwmeEklIwHJkxwyHrz/MalayWindows.png.scaled1000.png"&gt;&lt;img alt="Malaywindows" height="522" src="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-09-15/xlAvbhIDkbbeaxEsCvfgjEkCmspBqAClGuxaEnracuEwmeEklIwHJkxwyHrz/MalayWindows.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sourashtra!! - by Balaji Sivanath (my best buddy)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-09-15/wficwvufEshclIjGgAsjthyqjdfGqsmoajpuxzggfistamEwIejsAnEufqqo/SourashtraMac.jpg.scaled1000.jpg"&gt;&lt;img alt="Sourashtramac" height="523" src="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-09-15/wficwvufEshclIjGgAsjthyqjdfGqsmoajpuxzggfistamEwIejsAnEufqqo/SourashtraMac.jpg.scaled696.jpg" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Spanish - by Jordi Castells&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-09-15/gAApllkBfEwFsyiocbDfgruswDieaxFcutIcEDldnvwcjbivFxfFjxGmsBbA/SpanishWindows.png.scaled1000.png"&gt;&lt;img alt="Spanishwindows" height="522" src="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-09-15/gAApllkBfEwFsyiocbDfgruswDieaxFcutIcEDldnvwcjbivFxfFjxGmsBbA/SpanishWindows.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tamil - by Vigneshwaran Raveendran (myself :P )&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-09-15/CkukmpgsfBuCqDcgxewgjuEbhCgHqtavHzJvApAycedrusbEtGeGivpnHIvI/TamilWindows3.png.scaled1000.png"&gt;&lt;img alt="Tamilwindows3" height="522" src="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-09-15/CkukmpgsfBuCqDcgxewgjuEbhCgHqtavHzJvApAycedrusbEtGeGivpnHIvI/TamilWindows3.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vietnamese (Incomplete) - by Nguyen Kien&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-09-15/CDhfbJFnowFtjmhceCbcmhDcbracndmIdAvufpzCCftreIoGiCHBtrzvlFim/VietnameseWindows.png.scaled1000.png"&gt;&lt;img alt="Vietnamesewindows" height="522" src="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-09-15/CDhfbJFnowFtjmhceCbcmhDcbracndmIdAvufpzCCftreIoGiCHBtrzvlFim/VietnameseWindows.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
~Fin~&lt;/strong&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/neembuu-uploader-v24-worlds-first-software-in"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/neembuu-uploader-v24-worlds-first-software-in#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/VkrvClJpZZ8" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="406" width="558" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-09-15/HdpselasBicusCmwhqGwqvtfhabcfzrifcnmCnnFrgEjCfszizEisicyifwn/SettingsDialogWindows.png">
        <media:thumbnail height="364" width="500" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-09-15/HdpselasBicusCmwhqGwqvtfhabcfzrifcnmCnnFrgEjCfszizEisicyifwn/SettingsDialogWindows.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-09-15/hfeyewkuEvtjEpawtEEosasJflfokiaCsdznGudiHjdjgnaJppHpzwwodpBy/BeautifulUpdateNotificationfrom2.3.png">
        <media:thumbnail height="375" width="500" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-09-15/hfeyewkuEvtjEpawtEEosasJflfokiaCsdznGudiHjdjgnaJppHpzwwodpBy/BeautifulUpdateNotificationfrom2.3.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-09-15/zhlAzHacubqcCzJACymuxIdoheBvjpHqnHxinIbshBEsGjtoEgFJHJktfGFI/BrazilianPortugeseWindows.png">
        <media:thumbnail height="375" width="500" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-09-15/zhlAzHacubqcCzJACymuxIdoheBvjpHqnHxinIbshBEsGjtoEgFJHJktfGFI/BrazilianPortugeseWindows.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-09-15/huaqiucCyntiuwsaHoAFqFzxcutcdkbkffyzeBsqjxwAhmqIEnfzarpfadzD/CatalanWindows.png">
        <media:thumbnail height="375" width="500" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-09-15/huaqiucCyntiuwsaHoAFqFzxcutcdkbkffyzeBsqjxwAhmqIEnfzarpfadzD/CatalanWindows.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-09-15/qCsBpHbzmGFjIGvJdrvklgJHJhrEyHfnuxtBiuAJndibkkevmflJtcsxtzur/HindiWindows.png">
        <media:thumbnail height="375" width="500" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-09-15/qCsBpHbzmGFjIGvJdrvklgJHJhrEyHfnuxtBiuAJndibkkevmflJtcsxtzur/HindiWindows.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-09-15/xlAvbhIDkbbeaxEsCvfgjEkCmspBqAClGuxaEnracuEwmeEklIwHJkxwyHrz/MalayWindows.png">
        <media:thumbnail height="375" width="500" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-09-15/xlAvbhIDkbbeaxEsCvfgjEkCmspBqAClGuxaEnracuEwmeEklIwHJkxwyHrz/MalayWindows.png.scaled500.png" />
      </media:content>
      <media:content type="image/jpeg" height="767" width="1021" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-09-15/wficwvufEshclIjGgAsjthyqjdfGqsmoajpuxzggfistamEwIejsAnEufqqo/SourashtraMac.jpg">
        <media:thumbnail height="376" width="500" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-09-15/wficwvufEshclIjGgAsjthyqjdfGqsmoajpuxzggfistamEwIejsAnEufqqo/SourashtraMac.jpg.scaled500.jpg" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-09-15/gAApllkBfEwFsyiocbDfgruswDieaxFcutIcEDldnvwcjbivFxfFjxGmsBbA/SpanishWindows.png">
        <media:thumbnail height="375" width="500" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-09-15/gAApllkBfEwFsyiocbDfgruswDieaxFcutIcEDldnvwcjbivFxfFjxGmsBbA/SpanishWindows.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-09-15/CkukmpgsfBuCqDcgxewgjuEbhCgHqtavHzJvApAycedrusbEtGeGivpnHIvI/TamilWindows3.png">
        <media:thumbnail height="375" width="500" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-09-15/CkukmpgsfBuCqDcgxewgjuEbhCgHqtavHzJvApAycedrusbEtGeGivpnHIvI/TamilWindows3.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-09-15/CDhfbJFnowFtjmhceCbcmhDcbracndmIdAvufpzCCftreIoGiCHBtrzvlFim/VietnameseWindows.png">
        <media:thumbnail height="375" width="500" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-09-15/CDhfbJFnowFtjmhceCbcmhDcbracndmIdAvufpzCCftreIoGiCHBtrzvlFim/VietnameseWindows.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://blog.vigneshwaran.in/neembuu-uploader-v24-worlds-first-software-in</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 07 Sep 2011 06:08:00 -0700</pubDate>
      <title>New WebSite built for Neembuu Uploader</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/u-OLu4Dcu9k/new-website-built-for-neembuu-uploader</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/new-website-built-for-neembuu-uploader</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Didn't know my Neembuu Uploader will get popular so didn't create a site for it.. Thanks to help of my new team and reviews by various blogs, It crossed 4000 downloads. So spent 1.5 days and built a new website for Neembuu Uploader with loads of Passion.&lt;/p&gt;
&lt;p&gt;Now it's up at &lt;a href="http://neembuuuploader.sf.net/"&gt;http://neembuuuploader.sf.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The Site is very beautiful and matches the theme (unlike my previous &lt;a href="http://jjsplit.sf.net"&gt;http://jjsplit.sf.net&lt;/a&gt; which doesn't look so good).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Home Page&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-09-07/pHqefohvmqfxBAilzjArdkvkqjtBgzbzrsIwGcJIHFFFyGympDhEcICxCqeA/site.png.scaled1000.png"&gt;&lt;img alt="Site" height="522" src="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-09-07/pHqefohvmqfxBAilzjArdkvkqjtBgzbzrsIwGcJIHFFFyGympDhEcICxCqeA/site.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The whole site is green themed. (JJSplit site was red themed. Probably my next site's theme will be blue... lol.)&lt;/p&gt;
&lt;p&gt;Used a tag line from Dinesh : "A smart way to upload"&lt;/p&gt;
&lt;p&gt;In the home page there'll be 3 small images which can rotate around if you click on either sides.&lt;/p&gt;
&lt;p&gt;There's a Facebook's recommend and Twitter's tweet plugin at the bottom. But I put Google's +1 button on the top right as an always-on-top button.&lt;/p&gt;
&lt;p&gt;During the first launch, the screenshot images will be preloaded into your cache. Once the site is fully loaded, click on the "Screenshots" link on the top right. It'll show a slideshow of 12 screenshots in a the same way as Facebook doing now but with a dark background and a panning effect.&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-09-07/vpejCgtoprtAylmybsfuhHJJghdmzwixIGBzGnsIAAwIycIjevahedDogFdD/site6.png.scaled1000.png"&gt;&lt;img alt="Site6" height="522" src="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-09-07/vpejCgtoprtAylmybsfuhHJJghdmzwixIGBzGnsIAAwIycIjevahedDogFdD/site6.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-09-07/qqayEbHweElwqnGHcyhqGqahGiswxAHAAdCdluFGqdbgmkhlrADpAfljomvy/site2.png.scaled1000.png"&gt;&lt;img alt="Site2" height="522" src="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-09-07/qqayEbHweElwqnGHcyhqGqahGiswxAHAAdCdluFGqdbgmkhlrADpAfljomvy/site2.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/strong&gt;On the left side of Features page, there'll be a list of currently supported hosts and a list of hosts that will be supported in the future.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;On the right side, I've written a brief explanations of Features supported by NU. It took me more than an hour to find the perfect 48x icons for each features.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-09-07/smjBhIFnfyBIwxBGjeoHuHyvrpeCtefjyCmplGmjxrhEnjgnkGbtHxBnsCxi/site3.png.scaled1000.png"&gt;&lt;img alt="Site3" height="522" src="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-09-07/smjBhIFnfyBIwxBGjeoHuHyvrpeCtefjyCmplGmjxrhEnjgnkGbtHxBnsCxi/site3.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/strong&gt;Same stuff you'll find in other sites. A list of common annoying questions and a link to Contact page.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Downloads&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-09-07/FqrfdeqHcAliBEmsrrtdrvhzCDolguHbIoIBHhEhcxHCEevummrAhkJzhuDh/site4.png.scaled1000.png"&gt;&lt;img alt="Site4" height="522" src="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-09-07/FqrfdeqHcAliBEmsrrtdrvhzCDolguHbIoIBHhEhcxHCEevummrAhkJzhuDh/site4.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On left column, list of new features added in the latest version.&lt;/p&gt;
&lt;p&gt;On right column, a download button that will link to my sourceforge directory where people can download the latest version of Neembuu Uploader.&lt;/p&gt;
&lt;p&gt;Like VLC guys, I have "live download statistics" that will display the total number of downloads, top os by downloads and top country by downloads. These are retrieved from SF with help of their downloadstats JSON API and AJAX on my side. (Downloads from sites other than SF are not calculated).&lt;/p&gt;
&lt;p&gt;I have also listed links to CNET and Softpedia's Neembuu Uploader product page as Trusted Mirrors.&lt;/p&gt;
&lt;p&gt;Also listed here are reviews to my product by various blogs. Special thanks to WebUpd8.org for always being the first to review.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Contact Us&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-09-07/CswyJjCdaxAcqidaHDcCiwuddpgwqAnzBGaviqjbCAdqJkpctBidtbwyctAg/site5.png.scaled1000.png"&gt;&lt;img alt="Site5" height="522" src="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-09-07/CswyJjCdaxAcqidaHDcCiwuddpgwqAnzBGaviqjbCAdqJkpctBidtbwyctAg/site5.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/strong&gt;Here my team details are mentioned and a Contact Form for contacting us for any support.&lt;/p&gt;
&lt;p&gt;Hope you love my site as I do ;)&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/new-website-built-for-neembuu-uploader"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/new-website-built-for-neembuu-uploader#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/u-OLu4Dcu9k" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="768" width="1024" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-09-07/pHqefohvmqfxBAilzjArdkvkqjtBgzbzrsIwGcJIHFFFyGympDhEcICxCqeA/site.png">
        <media:thumbnail height="375" width="500" url="http://getfile0.posterous.com/getfile/files.posterous.com/temp-2011-09-07/pHqefohvmqfxBAilzjArdkvkqjtBgzbzrsIwGcJIHFFFyGympDhEcICxCqeA/site.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-09-07/vpejCgtoprtAylmybsfuhHJJghdmzwixIGBzGnsIAAwIycIjevahedDogFdD/site6.png">
        <media:thumbnail height="375" width="500" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-09-07/vpejCgtoprtAylmybsfuhHJJghdmzwixIGBzGnsIAAwIycIjevahedDogFdD/site6.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-09-07/qqayEbHweElwqnGHcyhqGqahGiswxAHAAdCdluFGqdbgmkhlrADpAfljomvy/site2.png">
        <media:thumbnail height="375" width="500" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-09-07/qqayEbHweElwqnGHcyhqGqahGiswxAHAAdCdluFGqdbgmkhlrADpAfljomvy/site2.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-09-07/smjBhIFnfyBIwxBGjeoHuHyvrpeCtefjyCmplGmjxrhEnjgnkGbtHxBnsCxi/site3.png">
        <media:thumbnail height="375" width="500" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-09-07/smjBhIFnfyBIwxBGjeoHuHyvrpeCtefjyCmplGmjxrhEnjgnkGbtHxBnsCxi/site3.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-09-07/FqrfdeqHcAliBEmsrrtdrvhzCDolguHbIoIBHhEhcxHCEevummrAhkJzhuDh/site4.png">
        <media:thumbnail height="375" width="500" url="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-09-07/FqrfdeqHcAliBEmsrrtdrvhzCDolguHbIoIBHhEhcxHCEevummrAhkJzhuDh/site4.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-09-07/CswyJjCdaxAcqidaHDcCiwuddpgwqAnzBGaviqjbCAdqJkpctBidtbwyctAg/site5.png">
        <media:thumbnail height="375" width="500" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-09-07/CswyJjCdaxAcqidaHDcCiwuddpgwqAnzBGaviqjbCAdqJkpctBidtbwyctAg/site5.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://blog.vigneshwaran.in/new-website-built-for-neembuu-uploader</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 02 Sep 2011 07:06:00 -0700</pubDate>
      <title>Neembuu Uploader v2.3 - Major update with new team</title>
      <link>http://feedproxy.google.com/~r/VigneshwaranPosterous/~3/4BpGd3-Tpio/neembuu-uploader-v23-major-update-with-new-te</link>
      <guid isPermaLink="false">http://blog.vigneshwaran.in/neembuu-uploader-v23-major-update-with-new-te</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I had spent 2 weeks working on this without much sleep and food. The product came out beautiful. I have learnt so much stuffs while working on this. I'm sure this time, this version alone gonna cross 10000 downloads in next few months.&lt;/p&gt;
&lt;p&gt;Until 2.2 I have been playing solo. Now 3 friends contributed for me.&lt;/p&gt;
&lt;p&gt;This is the Neembuu Uploader Team now.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dinesh Sivaji:&lt;/strong&gt; Plugins for DepositFiles, FileFactory, FileSonic, MediaFire, MegaUpload, Wupload&lt;br /&gt;&lt;strong&gt;Muthu Krishnan:&lt;/strong&gt;&amp;nbsp;New Beautiful Icon&lt;br /&gt;&lt;strong&gt;Shashaank Tulsyan (my sempai):&amp;nbsp;&lt;/strong&gt;Translation Framework (for future releases)&lt;br /&gt;&lt;strong&gt;Vigneshwaran Raveendran (myself):&amp;nbsp;&lt;/strong&gt;Framework for Accounts and Uploaders, User Interface and Controls, Plugins for remaining sites.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What's Neembuu Uploader?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For new readers,&amp;nbsp;Neembuu Uploader v2.3 is a free and opensource Java application that uploads files&amp;nbsp;simultaneously to multiple filehosts and lets you manage the download&amp;nbsp;and delete URLs. Currently 12 major hosts are supported.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What's new in version 2.3?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New Hosts added with login support!: DepositFiles, FileFactory, FileSonic, MediaFire, MegaUpload, Wupload.&lt;/li&gt;
&lt;li&gt;Right click menu to copy, export or go to selected links and to stop an upload.&lt;/li&gt;
&lt;li&gt;Ability to remove and change the order of uploads.&lt;/li&gt;
&lt;li&gt;Saves state and queued uploads on exit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Some Screenshots:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Accounts window:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-09-02/qrloyzrffbqcvHAduCeeCasgJGvlaGsalBbmyADwDEseHtEJIBptziDjjyme/Windows_04_Accounts_Manager.png.scaled1000.png"&gt;&lt;img alt="Windows_04_accounts_manager" height="522" src="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-09-02/qrloyzrffbqcvHAduCeeCasgJGvlaGsalBbmyADwDEseHtEJIBptziDjjyme/Windows_04_Accounts_Manager.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Drag and Drop files:&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-09-02/bddjaDoExfvrugtdFDuEnzrBwzxmbzgerdgFqbpgcsHDArGjBkslHlrbjmuu/Linux_01_Drag_and_Drop.jpg.scaled1000.jpg"&gt;&lt;img alt="Linux_01_drag_and_drop" height="522" src="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-09-02/bddjaDoExfvrugtdFDuEnzrBwzxmbzgerdgFqbpgcsHDArGjBkslHlrbjmuu/Linux_01_Drag_and_Drop.jpg.scaled696.jpg" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Select Hosts:&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-09-02/goizmpApjvifauAlnpkygifIHvmsyyBIwsGIjfeJmyCzhyzjypprzlgklJFo/Windows_02_Select_Hosts.png.scaled1000.png"&gt;&lt;img alt="Windows_02_select_hosts" height="522" src="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-09-02/goizmpApjvifauAlnpkygifIHvmsyyBIwsGIjfeJmyCzhyzjypprzlgklJFo/Windows_02_Select_Hosts.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Start Uploading (Main Window):&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-09-02/vugwDjindlIAdIAptHCkvrzsztGacyGHrdvwGrxhDwDDGjHIhiBxxjfCoivn/Mac_04_Uploading.png.scaled1000.png"&gt;&lt;img alt="Mac_04_uploading" height="521" src="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-09-02/vugwDjindlIAdIAptHCkvrzsztGacyGHrdvwGrxhDwDDGjHIhiBxxjfCoivn/Mac_04_Uploading.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Upload History:&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-09-02/GFeHlfshBACDkaCdHxujCjsCgrGAnuhJfsoJropdAcfndxgbzcFdwpcoBpjH/Mac_05_Upload_history.png.scaled1000.png"&gt;&lt;img alt="Mac_05_upload_history" height="522" src="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-09-02/GFeHlfshBACDkaCdHxujCjsCgrGAnuhJfsoJropdAcfndxgbzcFdwpcoBpjH/Mac_05_Upload_history.png.scaled696.png" width="696" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://sourceforge.net/projects/neembuuuploader/"&gt;Download Neembuu Uploader v2.3 from here&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.vigneshwaran.in/neembuu-uploader-v23-major-update-with-new-te"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.vigneshwaran.in/neembuu-uploader-v23-major-update-with-new-te#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/VigneshwaranPosterous/~4/4BpGd3-Tpio" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/714344/vigneshwaran2_2.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/3siah3YCwjfj</posterous:profileUrl>
        <posterous:firstName>Vigneshwaran</posterous:firstName>
        <posterous:lastName>Raveendran</posterous:lastName>
        <posterous:nickName>Vigneshwaran</posterous:nickName>
        <posterous:displayName>Vigneshwaran Raveendran</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="768" width="1024" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-09-02/qrloyzrffbqcvHAduCeeCasgJGvlaGsalBbmyADwDEseHtEJIBptziDjjyme/Windows_04_Accounts_Manager.png">
        <media:thumbnail height="375" width="500" url="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2011-09-02/qrloyzrffbqcvHAduCeeCasgJGvlaGsalBbmyADwDEseHtEJIBptziDjjyme/Windows_04_Accounts_Manager.png.scaled500.png" />
      </media:content>
      <media:content type="image/jpeg" height="768" width="1024" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-09-02/bddjaDoExfvrugtdFDuEnzrBwzxmbzgerdgFqbpgcsHDArGjBkslHlrbjmuu/Linux_01_Drag_and_Drop.jpg">
        <media:thumbnail height="375" width="500" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-09-02/bddjaDoExfvrugtdFDuEnzrBwzxmbzgerdgFqbpgcsHDArGjBkslHlrbjmuu/Linux_01_Drag_and_Drop.jpg.scaled500.jpg" />
      </media:content>
      <media:content type="image/png" height="768" width="1024" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-09-02/goizmpApjvifauAlnpkygifIHvmsyyBIwsGIjfeJmyCzhyzjypprzlgklJFo/Windows_02_Select_Hosts.png">
        <media:thumbnail height="375" width="500" url="http://getfile6.posterous.com/getfile/files.posterous.com/temp-2011-09-02/goizmpApjvifauAlnpkygifIHvmsyyBIwsGIjfeJmyCzhyzjypprzlgklJFo/Windows_02_Select_Hosts.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="763" width="1020" url="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-09-02/vugwDjindlIAdIAptHCkvrzsztGacyGHrdvwGrxhDwDDGjHIhiBxxjfCoivn/Mac_04_Uploading.png">
        <media:thumbnail height="374" width="500" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-09-02/vugwDjindlIAdIAptHCkvrzsztGacyGHrdvwGrxhDwDDGjHIhiBxxjfCoivn/Mac_04_Uploading.png.scaled500.png" />
      </media:content>
      <media:content type="image/png" height="764" width="1019" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-09-02/GFeHlfshBACDkaCdHxujCjsCgrGAnuhJfsoJropdAcfndxgbzcFdwpcoBpjH/Mac_05_Upload_history.png">
        <media:thumbnail height="375" width="500" url="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-09-02/GFeHlfshBACDkaCdHxujCjsCgrGAnuhJfsoJropdAcfndxgbzcFdwpcoBpjH/Mac_05_Upload_history.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://blog.vigneshwaran.in/neembuu-uploader-v23-major-update-with-new-te</feedburner:origLink></item>
  </channel>
</rss>

