<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4363007243782176340</id><updated>2012-01-31T01:43:44.550-08:00</updated><title type='text'>Exploring Software Universe</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-8164785462864090858</id><published>2011-09-27T02:30:00.000-07:00</published><updated>2011-09-27T02:30:56.301-07:00</updated><title type='text'>SMB integrator experiment - Zero sum game</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;We are acquiring customers organically via inbound-marketing for our workflow product Postoz (http://www.postoz.com).&lt;br /&gt;&lt;br /&gt;We wanted to accelerate customer acquisition inorganically &amp;amp; were talking with few SMB solution integrators for partnership deals.&lt;br /&gt;&lt;br /&gt;Typically integrators earn their revenue via,&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Business consulting.&lt;/li&gt;&lt;li&gt;Technology consulting and implementation.&lt;/li&gt;&lt;li&gt;Support services.&lt;/li&gt;&lt;/ol&gt;Since our product is SaaS hosted; do-it-yourself; no-coding required solution, it eliminates need for step 2 and 3. Our partnership deal has to be&amp;nbsp;purely&amp;nbsp;based on revenue sharing.&lt;br /&gt;&lt;br /&gt;There are other big SaaS vendors playing zero-sum game with these SMB integrators. These vendors are spending multi-millions upfront to acquire large customer base. We don't have such large financial leverage to spend millions on customer acquisition.&lt;br /&gt;&lt;br /&gt;Fun part of startup is creating greater economic value out of nothing rather than corporate style 5-8 year break-even period to&amp;nbsp;recoup invested millions.&lt;br /&gt;&lt;br /&gt;We have to make ourselves more reachable for customers world wide &amp;amp; we should find direct path to customers.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-8164785462864090858?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/8164785462864090858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=8164785462864090858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/8164785462864090858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/8164785462864090858'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2011/09/smb-integrator-experiment-zero-sum-game.html' title='SMB integrator experiment - Zero sum game'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-7915576084855992548</id><published>2011-09-24T03:31:00.000-07:00</published><updated>2011-09-24T07:34:11.159-07:00</updated><title type='text'>Fun starts after release of the product</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;Like other dev-entrepreneurs i hated marketing/sales at first time, i guess because programming is much more quantifiable than marketing/sales.&lt;br /&gt;&lt;br /&gt;In programming you deal with machine, tell it how to behave &amp;amp; when something didn't work you know how to fix it.&lt;br /&gt;&lt;br /&gt;In marketing/sales you are dealing with other human (customers, bloggers, partners etc). It is more of psychology play. You will certainly don't know why certain things didn't work/worked in particular way.&lt;br /&gt;&lt;br /&gt;Productizing an interesting problem/idea is just start of the journey. Real fun starts when you selling it. You get lot of energy when,&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Your product is being used by customers (uhh, finally built something people need)&lt;/li&gt;&lt;li&gt;You receive love letters &amp;amp; support requests from&amp;nbsp;customers and hate mails from competitors&amp;nbsp;(few meaningful emails in your Inbox).&lt;/li&gt;&lt;li&gt;Revenue generation (allows to&amp;nbsp;on-board&amp;nbsp;new hackers to experiment exciting ideas)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ship your product quickly and start selling. Your excitement will grow exponentially with every customer acquisition.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-7915576084855992548?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/7915576084855992548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=7915576084855992548' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/7915576084855992548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/7915576084855992548'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2011/09/fun-starts-after-release-of-product.html' title='Fun starts after release of the product'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-322629304573937328</id><published>2011-08-28T23:55:00.000-07:00</published><updated>2011-08-29T00:07:51.744-07:00</updated><title type='text'>Pattern of human centric business processes</title><content type='html'>Many SMEs use email for workflow management. Email based workflows are best examples of "human centric" business processes. The flexibility of email allows enterprises to structure their workflow system with ease. But email based workflows are &lt;span style="font-style: italic;"&gt;painful&lt;/span&gt; when the team size is not small and business process requires,&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Transparency among team members (who is working on what &amp;amp; how long).&lt;/li&gt;&lt;li&gt;Traceability of work item across various departments.&lt;/li&gt;&lt;li&gt;Quantitative data to analyze existing process structure for improvements.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;In enterprises, pattern of "capturing data via web form (or) email that flows among group of people in an orderly sequence", repeats for many human centric business processes such as "IT helpdesk", procurement and employee on-boarding etc. &lt;span style="font-weight: bold;"&gt;We recently released &lt;a href="http://www.postoz.com/"&gt;Postoz&lt;/a&gt; (http://www.postoz.com), a SaaS hosted, web based solution for this common pattern. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Postoz enables enterprises to create and deploy business processes in few minutes. With Postoz, enterprises can build  automation solution for business processes the creative way they wanted and deploy them over internet, instantly.&lt;br /&gt;&lt;br /&gt;Here are the links to get started and know more about &lt;a href="http://www.postoz.com"&gt;Postoz&lt;/a&gt;,&lt;br /&gt;&lt;br /&gt;Sign-up free demo url   : &lt;a href="http://www.postoz.com/demo"&gt;http://www.postoz.com/demo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tour page  : &lt;a href="http://www.postoz.com/info/tour"&gt;http://www.postoz.com/info/tour&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3 mins demo video : &lt;a href="http://www.youtube.com/watch?v=xWnu6RIUQaA"&gt;http://www.youtube.com/watch?v=xWnu6RIUQaA&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-322629304573937328?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/322629304573937328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=322629304573937328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/322629304573937328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/322629304573937328'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2011/08/pattern-of-human-centric-business.html' title='Pattern of human centric business processes'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-2039232555495130256</id><published>2011-07-19T03:46:00.000-07:00</published><updated>2011-07-19T03:52:32.481-07:00</updated><title type='text'>Postoz - Public beta launch.</title><content type='html'>We recently launched our latest product "Postoz" in limited public beta. You can access it at &lt;a href="http://www.postoz.com"&gt;http://www.postoz.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Postoz is focused on an issue, most enterprises are coping with - "Using email for workflow management".&lt;br /&gt;&lt;br /&gt;Email has proved as wonderful communication medium. The flexibility of email allows enterprises to structure their workflow system with ease. But monitoring, tracking, measuring &amp;amp; optimising email based workflows are tough.&lt;br /&gt;&lt;br /&gt;At one end, there are expensive bloatware workflow/business process systems that requires multiple months of customization and at other end, there are one-size-fits-all ready-made solutions that kills operational innovations &amp;amp; effectiveness.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;Postoz is SaaS hosted, web based business process system that lets organisations craft automation solution for business processes&lt;br /&gt;the creative&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;way they wanted &amp;amp; deploy them over Internet, instantly. Build business process in 5 minutes.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;You can try Postoz at &lt;a href="http://www.postoz.com"&gt;http://www.postoz.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-2039232555495130256?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/2039232555495130256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=2039232555495130256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/2039232555495130256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/2039232555495130256'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2011/07/postoz-public-beta-launch.html' title='Postoz - Public beta launch.'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-3121838274351607857</id><published>2011-04-13T23:29:00.000-07:00</published><updated>2011-04-13T23:38:44.917-07:00</updated><title type='text'>Postoz - Build email driven apps</title><content type='html'>We are preparing for beta launch of our new product - &lt;a href="http://www.postoz.com/"&gt;Postoz.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Postoz empowers enterprises to create, deploy, monitor email driven business processes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Postoz = Email routing + Workflow + Web app for business logic&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;Epitome of postoz :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Automate business processes that are driven by inbound or outbound emails.&lt;/li&gt;&lt;li&gt;Control execution of business process with DSL based email routes and workflow steps.&lt;/li&gt;&lt;li&gt;Use web development skills for business logic implementation.&lt;/li&gt;&lt;li&gt;Get started at no cost.&lt;/li&gt;&lt;li&gt;Deploy at our hosted cloud environment or at your own infrastructure.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;You can find more info and/or signup for a private beta invite at :  http://www.postoz.com&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Feel free to send your feeback/thoughts to feedback@postoz.com&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-3121838274351607857?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/3121838274351607857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=3121838274351607857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/3121838274351607857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/3121838274351607857'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2011/04/postoz-build-email-driven-apps.html' title='Postoz - Build email driven apps'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-5788162947429897020</id><published>2011-03-22T21:31:00.000-07:00</published><updated>2011-03-22T23:33:50.918-07:00</updated><title type='text'>Freebies, incentives &amp; education.</title><content type='html'>&lt;div&gt;&lt;div&gt;It is election time in &lt;a href="http://en.wikipedia.org/wiki/Tamil_Nadu"&gt;Tamil Nadu&lt;/a&gt;, India. To allure voters, political parties released their electoral manifesto with promise of various freebies and schemes. There are lot of debate in TV channels and new papers about socio-economic impact of these freebies &amp;amp; incentive schemes on government, society and individuals.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I knew one area that freebies did a wonder - Education. I grew up in rural &lt;a href="http://en.wikipedia.org/wiki/Tamil_Nadu"&gt;Tamil Nadu&lt;/a&gt;, India and did my primary &amp;amp; pre-university education at govt sponsored school. During pre-economic reforms, liberalization era,  to attract students to schools &amp;amp; reduce ownership/cost of education for parents, there were freebies &amp;amp; incentives for school going kids, particularly in rural India (where illiteracy, poverty was prevalent). Here i list freebies (that i could remember) distributed in my school&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Primary School.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;No school fees.&lt;/li&gt;&lt;li&gt;Tooth powder (Distributed first week of every month).&lt;/li&gt;&lt;li&gt;Mid day meals (Every day, free lunch).&lt;/li&gt;&lt;li&gt;Vitamin food balls (Every month, last Friday)&lt;/li&gt;&lt;li&gt;Note pads, pencil (Twice a year).&lt;/li&gt;&lt;li&gt;Geometry boxes &amp;amp; school books (Once a year).&lt;/li&gt;&lt;li&gt;Stitched school uniform (couldn't remember distribution frequency)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Middle &amp;amp; High school.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;No school fees, Mid day meals, Note pads, books &amp;amp; school uniform.&lt;/li&gt;&lt;li&gt;Bicycle (For students who passed 8th grade. This was major attraction).&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;If you pass 10th grade, you are&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Eligible to apply for limited bank loan without capital asset (This was major attraction).&lt;/li&gt;&lt;li&gt;Eligible to apply for heavy wheeler driving license (Lorry, Truck, Bus etc).&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;India's economic reforms, liberalization started in mid 1990, had reduced need of these incentives. Today incentives like "Free tooth powder" are no longer exist &amp;amp; not many people depend on these schemes for their education.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When i look back 15 years, always amazed by opportunities brought by economic reforms &amp;amp; liberalization.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-5788162947429897020?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/5788162947429897020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=5788162947429897020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/5788162947429897020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/5788162947429897020'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2011/03/freebies-incentives-education.html' title='Freebies, incentives &amp; education.'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-2355293227550849817</id><published>2011-03-02T20:42:00.000-08:00</published><updated>2011-08-28T23:53:11.730-07:00</updated><title type='text'>Using web skills to create product catalog / brochure</title><content type='html'>&lt;span style="font-weight: bold; font-style: italic;"&gt;update :&lt;/span&gt; Brochure we created using below discussed points, for &lt;a href="http://www.postoz.com/"&gt;Postoz&lt;/a&gt; - SaaS hosted business process system is accessible at &lt;a href="https://s3.amazonaws.com/postoz/postoz-brochure.pdf"&gt;https://s3.amazonaws.com/postoz/postoz-brochure.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;In this blog we discusses about creating professional looking product catalog / brochure by leveraging web development skills.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You need,&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;jQuery (&lt;a href="http://jquery.com/"&gt;http://jquery.com/&lt;/a&gt;) - Cross browser javascript library.&lt;/li&gt;&lt;li&gt;Blue print CSS (&lt;a href="http://www.blueprintcss.org/"&gt;http://www.blueprintcss.org/&lt;/a&gt;) - Cross browser CSS Framework with grid based layouts, typography.&lt;/li&gt;&lt;li&gt;Cufon (&lt;a href="http://cufon.shoqolate.com/generate/"&gt;http://cufon.shoqolate.com/&lt;/a&gt;) - Javascript frame work for displaying visually interesting fonts by replacing existing texts.&lt;/li&gt;&lt;li&gt;Cufon fonts (&lt;a href="http://www.cufonfonts.com/"&gt;http://www.cufonfonts.com/&lt;/a&gt;) - Free catalog of fonts to use with Cufon.&lt;/li&gt;&lt;li&gt;Wkhtmltopdf (&lt;a href="http://code.google.com/p/wkhtmltopdf/"&gt;http://code.google.com/p/wkhtmltopdf/&lt;/a&gt;) - Webpage to PDF converter that uses webkit rendering engine.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;To outline steps involved, we will create simple brochure.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;&lt;u&gt;Create brochure layout with Blue print CSS&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;&lt;div&gt;if you haven't used Blue print CSS before, have a look at &lt;a href="http://net.tutsplus.com/tutorials/html-css-techniques/a-closer-look-at-the-blueprint-css-framework/"&gt;this tutorial&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;script src="https://gist.github.com/852622.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;u&gt;&lt;b&gt;Apply necessary styles&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;&lt;div&gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;&lt;div&gt;&lt;script src="https://gist.github.com/852591.js"&gt; &lt;/script&gt;&lt;/div&gt;&lt;div&gt;&lt;u&gt;&lt;b&gt;Download and apply Cufon fonts&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;&lt;div&gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;&lt;div&gt;For this demo, i used &lt;a href="http://www.cufonfonts.com/en/font/459/vanilla"&gt;vanilla font&lt;/a&gt; from Cufon fonts. &lt;/div&gt;&lt;div&gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;&lt;div&gt;&lt;script src="https://gist.github.com/852592.js"&gt; &lt;/script&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;u&gt;Export your webpage as pdf&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;&lt;div&gt;&lt;script src="https://gist.github.com/852618.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can download files associated with this blog entry at github repo : https://github.com/selvan/sample-brochure&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;update :&lt;/span&gt; Brochure we created using above discussed points, for &lt;a href="http://www.postoz.com/"&gt;Postoz&lt;/a&gt; - SaaS hosted business process system is accessible at &lt;a href="https://s3.amazonaws.com/postoz/postoz-brochure.pdf"&gt;https://s3.amazonaws.com/postoz/postoz-brochure.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-2355293227550849817?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/2355293227550849817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=2355293227550849817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/2355293227550849817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/2355293227550849817'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2011/03/using-web-skills-to-create-product.html' title='Using web skills to create product catalog / brochure'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-3412357233481516652</id><published>2011-01-10T03:13:00.000-08:00</published><updated>2011-01-12T05:08:37.261-08:00</updated><title type='text'>Good Team + Interesting Technology + Great Vision = Investment</title><content type='html'>&lt;div&gt;Few weeks ago, on my way to office, noticed advertising hoardings from &lt;a href="http://www.vbhc.com/"&gt;VBHC&lt;/a&gt; for 1BHK apartments at $13,500 (5500000 INR) &amp;amp; 2BHK apartments at $27,000 (1250000). Price tag of these apartments was big surprise and as an entrepreneur i started wondering about their business model.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I decided to spend some time &amp;amp; understand their business &amp;amp; economics behind it. Here is my analysis.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1) Builders.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Like in many cities, real estate business in bangalore too has strong links with not so good people (Unethical, Greed etc). So first thing i looked at was,&lt;/div&gt;&lt;div&gt;who is the promotor of VBHC ?. I found that "&lt;a href="http://en.wikipedia.org/wiki/Jaithirth_Rao"&gt;Jerry Rao&lt;/a&gt;" is the promotor and HDFC investment arm holds minority stake in VBHC. As i work in the software industry,  i knew that jerry rao was the founder of Mphasis (He sold Mphasis to EDS) and he was also served as chairman of NASSCOM. VBHC project was launched by HDFC chairman "&lt;a href="http://en.wikipedia.org/wiki/Deepak_Parekh"&gt;Deepak Parekh&lt;/a&gt;". When multi billion dollar satyam scam emerged, Minister for Corporate Affairs constituted new board for satyam and "Deepak Parekh" was one of the three board members. I am convinced that i am dealing with good builders.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2) Business &amp;amp; economics.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lets understand how typical real estate business works in India.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Builder purchases land - With his own money or via loan.&lt;/li&gt;&lt;li&gt;Builder starts construction using conventional methods - Most builders take loan for construction to mitigate their execution/business risk.&lt;/li&gt;&lt;li&gt;Builder completes 60% of construction. - Interest incurred on the loan during this period will be passed on to consumers.&lt;/li&gt;&lt;li&gt;Builder starts marketing. - Interest incurred on the loan during this period will be passed on to consumers.&lt;/li&gt;&lt;li&gt;Builder couldn't sell (as the market is competitive) or Builder didn't want to sell (expects demands will be high) - More interest incurred on the loan, again it will be passed on to consumers.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Based on various parameters (number of units being constructed, capital strength of the builder, market demand etc) typical construction duration is between 2 to 3 years.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lets look at how VBHC is building,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;VBHC purchases land.&lt;/li&gt;&lt;li&gt;Constructs model houses, starts marketing.&lt;/li&gt;&lt;li&gt;Completes more than 95% booking before actual construction starts. Construction cost is paied by consumer in chunks along with progress of the construction. &lt;b&gt;&lt;i&gt;VBHC completely avoided their major business risk - "selling to consumer", even before the construction started&lt;/i&gt;&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Construction completes within a year.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In their current project, VBHC is building ~1800 units. This large volume of units allows them to bargain more from their raw material suppliers. &lt;i&gt;VBHC is clearly trying to distrupt conventional housing business with "Build large number of units &amp;amp; Build quickly."&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3) Technology&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When VBHC told me that they will construct all ~1800 units with a year &amp;amp; 3 months, i was surprised as i thought it is nearly impossible with conventional construction method (It is equivalent to thinking "5 ladies together can deliver a baby in just 2 months"). They showed interesting method for  construction - "Western Forms". As i wan't aware "Western Forms" way of construction elsewhere, I questioned about usage of the same technology elsewhere. The sales guy replied that the technology provider has successfully used the same construction methodology on multiple hosuing projects in mexico and many commercial projects in NA.&lt;/div&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/WI_iTppT8GM?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/WI_iTppT8GM?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;VBHC is targeting urban middle class with their vision of "a million homes in 10 years". Affordable 2BHK flats along with in-campus CBSE school, grocery shops &amp;amp; primary health center, certainly the valuation (based on location of the project, price tag, team, amenities, safety, community living, return on investment) of &lt;a href="http://www.vbhc.com/index.php?page=Project&amp;amp;act=Vaibhava&amp;amp;act1=Perspactive&amp;amp;count=check"&gt;VBHC Vaibhava&lt;/a&gt; project looks attractive.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-3412357233481516652?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/3412357233481516652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=3412357233481516652' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/3412357233481516652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/3412357233481516652'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2011/01/good-team-interesting-technology-great.html' title='Good Team + Interesting Technology + Great Vision = Investment'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-1708906743701107705</id><published>2011-01-08T23:49:00.000-08:00</published><updated>2011-01-08T23:51:18.937-08:00</updated><title type='text'>Salary structure - multiple options</title><content type='html'>&lt;div&gt;Instead of having single salary structure, we started offering multiple options to our new employees,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Pure stock option =&gt; X number of company shares.&lt;/li&gt;&lt;li&gt;Stock option (Major portion) + Cash amount (Minor portion) =&gt; X number of company shares + Y amount of cash.&lt;/li&gt;&lt;li&gt;Cash amount (Major portion) + Stock option (Minor portion) =&gt; Y amount of cash + X number of company shares.&lt;/li&gt;&lt;li&gt;Pure cash amount =&gt; Y amount of cash.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;We also allowed him to switch to other option within three month from the joining date.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-1708906743701107705?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/1708906743701107705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=1708906743701107705' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/1708906743701107705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/1708906743701107705'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2011/01/salary-structure-multiple-options.html' title='Salary structure - multiple options'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-8148838086256347309</id><published>2011-01-08T23:17:00.001-08:00</published><updated>2011-01-08T23:26:20.944-08:00</updated><title type='text'>Primay key look up : NOSQL vs SQL</title><content type='html'>&lt;div&gt;To demonstrate this usecase, we retrieve bunch of columns for a primary key. Typical SQL would be, &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"SELECT COLUMN1, COLUMN2, COLUMN3 FROM TABLE WHERE PRIMARY_KEY={X}".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lets analyze what happens when we execute above SQL,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; 1&lt;/span&gt;) Query passes through SQL engine.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;a) Lexical analysis &amp;amp; Parsing of SQL statement (Exception will be raised if any syntax error                              found).&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;b) SQL optimization to choose optimal execution path for the statement.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; 2&lt;/span&gt;) Searching the index for primary key&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Most databses store table indexs on tree structure. B+ tree is most commonly and widely used                       indexing structure. Even with, highly optimized B+ index structure, some form of tree search is                     required to locate the primary key.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; 3&lt;/span&gt;) Primary key is located, perform data retrieval.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Primary key is located, corresponding row is returned for that primary key.&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;Is SQL way of retrieving data based on primary key effective?. Lets see how we implement same usecase with NOSQL,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"GET [TABLE][PRIMARY_KEY]"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In NOSQL, primary key and corresponding columns are stored as Hash (key =&gt; primarykey, value =&gt; column values as string/jason). With NOSQL, looking up primary key is performed in constant time and there is no need for lexical analysis, parsing and optimization. Does this pattern sound familer?. Many large websites use MySQL with Memcached. Memcached will serve as in-memory NOSQL.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;NOSQL is better for fast retrieval of data using primary key. MySQL + Memcached combination could be used to achieve the same.&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-8148838086256347309?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/8148838086256347309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=8148838086256347309' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/8148838086256347309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/8148838086256347309'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2011/01/primay-key-look-up-nosql-vs-sql.html' title='Primay key look up : NOSQL vs SQL'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-4952019706846313607</id><published>2010-12-29T03:32:00.001-08:00</published><updated>2010-12-29T03:52:21.989-08:00</updated><title type='text'>Startup Quants</title><content type='html'>&lt;div&gt;As an entrepreneur, one aspect that i enjoy quite often is quantification of various aspect of our business.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;What is the current valuation of our venture?&lt;/li&gt;&lt;li&gt;How much money should we raise in this round?&lt;/li&gt;&lt;li&gt;Should i go for fixed size equity round or convertible debt round?&lt;/li&gt;&lt;li&gt;How much options should i grant to person 'x'?&lt;/li&gt;&lt;li&gt;What does it take to recruit this interesting guy?&lt;/li&gt;&lt;li&gt;Why do customer think product 'x' is better than product 'y'?&lt;/li&gt;&lt;li&gt;How to price our products?&lt;/li&gt;&lt;li&gt;Is it worth pursuing idea 'x'?&lt;/li&gt;&lt;li&gt;....... ........ .......&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;It is very unlikely that one will find optimal answer to these questions. Certainly there would be very subjective answers to few of these questions.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To find near optimal answers, you may take advise from peers, read about experience of others but it will be your own experiments that will give satisfying answers. My approach has been "Experiment at smaller scale, amplify if the experiment is successful, re-experiment incase of failure" (You should be shameless about your failures, iterate quickly &amp;amp; fail fast). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Beware, when things are incomprehensible, you will treat them as cheap or flout them or think they are magical.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-4952019706846313607?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/4952019706846313607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=4952019706846313607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/4952019706846313607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/4952019706846313607'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2010/12/startup-quants.html' title='Startup Quants'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-2247187443919119935</id><published>2010-12-28T03:55:00.000-08:00</published><updated>2010-12-28T04:05:03.030-08:00</updated><title type='text'>Welcome aboard</title><content type='html'>&lt;div&gt;Most corporates have some form of induction program to on-board new employees. Startup doesn't have time, energy &amp;amp; man power for such programs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In corporate environment such program can't be avoided for various reasons,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1) In corporates, it is not uncommon to on-board large group ( &gt; 5 employees) at a time, but in startups it is always cherry picking.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2) Corporates do recruitment based on profile matching and (try to) mould employees to their culture but startups put lot of emphasis on culture &amp;amp; passion while recruiting itself.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3) During induction program, corporates will show what makes their company a unique place to work. But startups count on new employee(s) to make their company unique.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4) In corporates, one should understand structure of the company to escalate issues and get things done. But in startups, things &amp;amp; structure would be fluid.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5) Corporates trust their process more than people, whereas startups trust their people most.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have also seen backlash from employees when a company transform from startup stage to corporate stage (Things were not like this before, Do we really need a position to take care certain things? etc).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In our startup &lt;a href="http://www.bitstat.com/"&gt;bitstat technologies&lt;/a&gt;, we have introduced "self-experiment-and-use-your-freetime" induction process for new employees. In this process they will execute their own idea, create a simple software product, try to market it and will share their experience with others.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Someday, our startup would be a corporate. But till that time, our experiments will continue.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-2247187443919119935?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/2247187443919119935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=2247187443919119935' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/2247187443919119935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/2247187443919119935'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2010/12/welcome-aboard.html' title='Welcome aboard'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-6356373985657058552</id><published>2009-08-03T05:53:00.000-07:00</published><updated>2009-08-03T05:57:45.596-07:00</updated><title type='text'>Open Source Calendar Server</title><content type='html'>I was looking for open source calender server with &lt;a href="http://en.wikipedia.org/wiki/CalDAV"&gt;CalDev&lt;/a&gt; support. I finally decided to go with "&lt;a href="http://www.calendarserver.org/"&gt;Darwin Calendar Server&lt;/a&gt;", that is being developed and maintained by Apple. Darwin calendar server is developed with Python. Here are the instructions to build darwin calendar server on ubuntu,&lt;br /&gt;&lt;br /&gt;a) apt-get install following components, if you don't have it,&lt;br /&gt;&lt;br /&gt;    build-essential&lt;br /&gt;    python-openssl&lt;br /&gt;    python-xattr&lt;br /&gt;    python-zopeinterface&lt;br /&gt;    python-xml&lt;br /&gt;    ibkrb5-dev&lt;br /&gt;    krb5-config&lt;br /&gt;&lt;br /&gt;b) Create empty directory, check out CalendarServer inside empty directory (while building, system will download number of other necessary libs inside empty directory you have created),&lt;br /&gt;&lt;br /&gt;svn checkout http://svn.calendarserver.org/repository/calendarserver/CalendarServer/trunk CalendarServer&lt;br /&gt;&lt;br /&gt;c) Enable extended attributes for the filesystem (CalendarServer expects extended attribute enabled file system for storing calendar data),&lt;br /&gt;&lt;br /&gt;    edit, /etc/fstab  and add user_xattr&lt;br /&gt;&lt;br /&gt;    Here is how my "/etc/fstab" looks after adding user_xattr,&lt;br /&gt;&lt;br /&gt;    UUID=2594fb7b-cb60-490c-8d08-1fbee11f1e5f / ext3 relatime,errors=remount-ro,user_xattr 0 1&lt;br /&gt;&lt;br /&gt;d) Activate fstab changes, with 'mount -o remount /&amp;lt;mountpoint&amp;gt;'&lt;br /&gt;&lt;br /&gt;e) To build CalendarServer, follow the instructions listed at,&lt;br /&gt;    http://trac.calendarserver.org/wiki/QuickStart&lt;br /&gt;&lt;br /&gt;f) If everything goes fine, open browser with http://localhost:8008/calendars/users/admin/calendar (If you are challenged by security realm, enter admin for both username and password). You should see admin's calendar listing&lt;br /&gt;&lt;br /&gt;g) You may use any calendar client that supports "CalDev" to access your calendar. If you plan to use sunbird as your client, follow the instructions at &lt;br /&gt;    http://trac.calendarserver.org/wiki/Sunbird&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-6356373985657058552?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/6356373985657058552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=6356373985657058552' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/6356373985657058552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/6356373985657058552'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2009/08/open-source-calendar-server.html' title='Open Source Calendar Server'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-6262554282152584925</id><published>2008-08-26T03:21:00.000-07:00</published><updated>2008-08-26T03:34:15.407-07:00</updated><title type='text'>Register VMs : Rise of the machines</title><content type='html'>I am currently designing and implementing small language with in-built concurrency for experimental/learning purpose. I decided to go with virtual machine approach, but when we implement a virtual machine, we hit by a long-running question in the design of virtual machines, whether to go with stack architecture or with register architecture?&lt;br /&gt;&lt;br /&gt;Many of virtual machines are implemented with stack architecture.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Stack based VMs:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The Java Virtual Machine.&lt;/li&gt;&lt;li&gt;.NET CLR&lt;/li&gt;&lt;li&gt;Perl 5 virtual machine.&lt;/li&gt;&lt;li&gt;SQLite Virtual Database Engine.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;There is lot of interest in implementing VM based on register architecture too and practical register based VMs are started emerging.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Register based VMs:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Parrot VM -  http://en.wikipedia.org/wiki/Parrot_virtual_machine&lt;/li&gt;&lt;li&gt;Android Dalvik VM - http://en.wikipedia.org/wiki/Dalvik_virtual_machine&lt;/li&gt;&lt;li&gt;Webkit Javascript VM - http://webkit.org/blog/189/announcing-squirrelfish/&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I decided to go with register based VM, thought of below two options and decided to go with first.&lt;br /&gt;&lt;br /&gt;1) Implementing my register based VM in C&lt;br /&gt;&lt;br /&gt;2) Implementing my register based VM in Java (Hey, java is improving and sun is adding multi language support and it is open!!!, so why not?) - In this case my VM itself interpreted on stack based JVM!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-6262554282152584925?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/6262554282152584925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=6262554282152584925' title='302 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/6262554282152584925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/6262554282152584925'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2008/08/register-vms-rise-of-machines.html' title='Register VMs : Rise of the machines'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>302</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-3437266097164286604</id><published>2008-05-04T21:58:00.000-07:00</published><updated>2008-05-04T22:12:10.927-07:00</updated><title type='text'>Magic of Multilanguage Environment</title><content type='html'>We need to create methods at runtime (say, based on some user input we need to construct an behavior in the form of methods) and associate/execute that methods in the context of particular existing object instance. How could we achieve this in Java?&lt;br /&gt;&lt;br /&gt;1) Use&lt;a href="http://openjdk.java.net/projects/mlvm/subprojects.html#AnonymousClasses"&gt; features of mlvm&lt;/a&gt;. Currently it is in prototype stage. So we may have to wait for some time before being available as part of standard distribution.&lt;br /&gt;&lt;br /&gt;2) We could use any of byte code engineering libraries and include a method in the class at runtime. But we are trying to include a method for a particular object instance of the class. Not in the class itself.&lt;br /&gt;&lt;br /&gt;Hey, Javacript/Ruby very much allow adding new methods to a particular instance and good news is that we have matured Javascript (Rhino) and Ruby (JRuby) implementations in Java. You may be aware that Rhino javascript implementation is included as part of standard java 6 distribution. With the help of Rhino engine, we could take advantage of power of javascript and implement our scenario.&lt;br /&gt;&lt;br /&gt;Include JDK_6_HOME&lt;jdk_6&gt;/bin in your path.&lt;br /&gt;Type jrunscript in command prompt.&lt;br /&gt;&lt;br /&gt;var fr = new javax.swing.JFrame()&lt;br /&gt;fr.title = "My Title"&lt;br /&gt;fr.setSize(200, 200)&lt;br /&gt;fr.show()&lt;br /&gt;&lt;br /&gt;var fn_title = function(title_text) {this.title = title_text}&lt;br /&gt;fn_title.call(fr, "My New Title")&lt;br /&gt;&lt;br /&gt;"fn_title" is the method, that we have associated with "JFrame" instance "fr"&lt;br /&gt;&lt;br /&gt;PS: Rhino engine is written in Java. How easy to simulate above behavior with our own java classes and byte code engineering? Look at &lt;a href="http://docs.google.com/Present?docid=dgmr9kck_448zkrssdt&amp;amp;skipauth=true#0"&gt;these slides for answer&lt;/a&gt;.&lt;/jdk_6&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-3437266097164286604?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/3437266097164286604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=3437266097164286604' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/3437266097164286604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/3437266097164286604'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2008/05/magic-of-multilanguage-environment.html' title='Magic of Multilanguage Environment'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-4683102070799235163</id><published>2008-04-09T21:04:00.000-07:00</published><updated>2008-04-09T22:45:55.793-07:00</updated><title type='text'>Jax India 2008 - Open JDK Multi Language Virtual Machine (MLVM) /  The Da Vinci Machine</title><content type='html'>Yesterday, I spoke at Jax India 2008. My session was on "The Da Vinci Machine - Multi Language Environment for Java Virtual Machine". There were around 70 to 90 participants.&lt;br /&gt;My session went fine with number of good questions from participants. Started my talk with "why we need other languages support on JVM" then pitched into "Introduction to porting new languages on JVM" and ended my talk with discussion on various "MLVM features (Light-weight byte code loading, light weight method objects, Dynamic Invocation, Symbolic freedom, Continuations and Tail recursion)". &lt;a href="http://docs.google.com/Present?docid=dgmr9kck_448zkrssdt&amp;amp;skipauth=true#0"&gt;Click here for presentation slides&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://docs.google.com/EmbedSlideshow?docid=dgmr9kck_448zkrssdt" frameborder="0" height="400" width="500"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-4683102070799235163?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/4683102070799235163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=4683102070799235163' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/4683102070799235163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/4683102070799235163'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2008/04/jax-india-2008-open-jdk-multi-language.html' title='Jax India 2008 - Open JDK Multi Language Virtual Machine (MLVM) /  The Da Vinci Machine'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-2453218530614266045</id><published>2008-03-26T23:13:00.000-07:00</published><updated>2008-03-26T23:21:11.289-07:00</updated><title type='text'>Interesting open source license</title><content type='html'>When we build project for clients based on number of open source libraries, we typically look into licensing policy of each open source library and analyze how well they fit with client policies. While analyzing one such policy of open source library, I was asked by my colleague what was the interesting licensing policy you have come across?, without second thought i replied back,  policy of SQLite. Here is extracted license text from SQLite&lt;br /&gt;&lt;br /&gt;“ The author disclaims copyright to this source code.  In place of a legal notice, here is a blessing:&lt;br /&gt;&lt;br /&gt;  May you do good and not evil.&lt;br /&gt;  May you find forgiveness for yourself and forgive others.&lt;br /&gt;  May you share freely, never taking more than you give. “&lt;br /&gt;&lt;br /&gt;  Isn't it interesting?.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-2453218530614266045?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/2453218530614266045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=2453218530614266045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/2453218530614266045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/2453218530614266045'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2008/03/when-we-build-project-for-clients-based.html' title='Interesting open source license'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-176114564881566074</id><published>2008-03-04T21:37:00.000-08:00</published><updated>2008-03-04T22:03:49.258-08:00</updated><title type='text'>Customizable Closure with OpenJDK MLVM and javac</title><content type='html'>The customizable closure code listed below, take advantage of following,&lt;br /&gt;&lt;ol&gt;&lt;li&gt;    Closure data types are converted to inner classes at compile time.&lt;/li&gt;&lt;li&gt;    AnnonymousClassLoader in MLVM, allows us to load multiple definitions of same class in the same instance of the class loader at run time.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Code:&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;import java.dyn.AnonymousClassLoader;&lt;br /&gt;&lt;br /&gt;public class CustomizableClosure {&lt;br /&gt;&lt;br /&gt;static private {String =&gt; void} welcomeClosure  =&lt;br /&gt;{ String name =&gt; System.out.println(name + ",  " + shortWelcome);};&lt;br /&gt;&lt;br /&gt;   static String shortWelcome = " Welcome to closure...";&lt;br /&gt;   static String detailedWelcome =&lt;br /&gt;" Welcome to MLVM closure customization..Experience the power of AnonymousClassLoader...";&lt;br /&gt;&lt;br /&gt;   public static void main(String[] args) throws Exception {&lt;br /&gt;       CustomizableClosure.testSimpleClosure();&lt;br /&gt;       CustomizableClosure.testCustomizableClosure();&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   static void testSimpleClosure() {&lt;br /&gt;       System.out.println("=================");&lt;br /&gt;       System.out.println("Before customization..");&lt;br /&gt;       welcomeClosure.invoke("Dear bob");&lt;br /&gt;       System.out.println("=================");&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   static void testCustomizableClosure() throws Exception {&lt;br /&gt;       AnonymousClassLoader acl = new AnonymousClassLoader();&lt;br /&gt;&lt;br /&gt;       acl.setClassFile(welcomeClosure.getClass());&lt;br /&gt;       Class hostClass = CustomizableClosure.class;&lt;br /&gt;&lt;br /&gt;       Class acls = welcomeClosure.getClass();&lt;br /&gt;       acl.putSymbolPatch("shortWelcome", "detailedWelcome");&lt;br /&gt;       acls = acl.loadClass();&lt;br /&gt; &lt;br /&gt;       {String =&gt; void} obj = ({String =&gt; void}) acls.newInstance();&lt;br /&gt;       System.out.println("================");&lt;br /&gt;       System.out.println("After customization..");&lt;br /&gt;       obj.invoke("Dear bob");&lt;br /&gt;       System.out.println("================");&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Output:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;=================&lt;br /&gt;Before customization..&lt;br /&gt;Dear bob,   Welcome to closure...&lt;br /&gt;=================&lt;br /&gt;================&lt;br /&gt;After customization..&lt;br /&gt;Dear bob,   Welcome to MLVM closure customization..Experience the power of AnonymousClassLoader...&lt;br /&gt;=================&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;OK, what's going on?&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;    {String =&gt; void} welcomeClosure  = { String name =&gt; System.out.println(name + ",  " + shortWelcome);} this closure snippet is converted to inner class at compile time.&lt;/li&gt;&lt;li&gt;    In method "testSimpleClosure", we are executing closure code as is.&lt;/li&gt;&lt;li&gt;    In method "testCustomizableClosure", we take closure (compiled inner class) as base template, customize it (by changing welcome text) at run time and execute it.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Step by step instructions on how to build and run Customizable Closure code.&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://weblogs.java.net/blog/simonis/archive/2008/01/hotspot_develop.html"&gt;    Build OpenJDK and Hotspot&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://softonaut.blogspot.com/2008/02/building-openjdk-multi-language-vm-aka.html"&gt;    Apply MLVM patch and rebuild Hotspot&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.javac.info/closures.tar.gz"&gt;    Download javac&lt;/a&gt; for closures from &lt;a href="http://www.javac.info/"&gt;javac.info&lt;/a&gt;&lt;/li&gt;&lt;li&gt;    Prepend MLVM AnonymousClassLoader.class and javac.jar to bootclasspath of java and javac. In my local machine, i used following commands for compilation and execution. &lt;/li&gt;&lt;/ol&gt;&lt;ul style="margin-left: 40px;"&gt;&lt;li&gt; javac -J-Xbootclasspath/p:/share/software/OpenJDK/closures-2008-02-12/lib/javac.jar:/share/software/OpenJDK/mlvm/bootcp -source 7 -d classes/ CustomizableClosure.java &lt;/li&gt;&lt;li&gt;java -Xbootclasspath/p:/share/software/OpenJDK/closures-2008-02-12/lib/javac.jar:/share/software/OpenJDK/mlvm/bootcp -cp classes CustomizableClosure&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-176114564881566074?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/176114564881566074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=176114564881566074' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/176114564881566074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/176114564881566074'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2008/03/customizable-closure-with-openjdk-mlvm.html' title='Customizable Closure with OpenJDK MLVM and javac'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-1906819994916116715</id><published>2008-02-13T21:33:00.000-08:00</published><updated>2008-02-13T21:54:20.069-08:00</updated><title type='text'>AnonymousClassLoader in OpenJDK Mlti-Language VM (MLVM)</title><content type='html'>When we implement JIT interpreter for dynamic languages on JVM, we typically deal with set of data (Environment) and Operations (Methods, Lambda etc).&lt;br /&gt;&lt;br /&gt;Design and loading of class definition for data and operations on JVM, has following challenges (pains),&lt;br /&gt;&lt;br /&gt;a) We can't define a light weight / anonymous methods in JVM on the fly.&lt;br /&gt;&lt;br /&gt; Method definition must live in a class. (Relationship between class that defines method and data could be composition or inheritance).&lt;br /&gt;&lt;br /&gt;b) We can't load multiple class definitions of same class / overwrite previously loaded class definition with new one, in the same class loader.&lt;br /&gt;&lt;br /&gt; Class loader keeps track of all loaded class in its System Dictionary. When we try to reload class definition (even though class definition is changed after first load), class loader checks for any entry in System dictionary for a given class name. If so, it will return class definition of system dictionary entry.&lt;br /&gt;&lt;br /&gt; To circumvent above issue, we instantiate (custom) new class loader every time when class definition changes.&lt;br /&gt;&lt;br /&gt;c) Garbage collection issue&lt;br /&gt;&lt;br /&gt; Class loader is another Java class in JDK. When a class (Let's call host class) instantiates our custom class loader; say CL1, class loader of host class (could be system class loader or ext class loader or another custom class loader) can reach CL1 class loader. Make sure custom class loaders like CL1 are eligible for GC (there by all classes loaded by that class loader) when they are no longer useful.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;OpenJDK Mlti-Language VM, introduces java.dyn.AnonymousClassLoader&lt;/span&gt; that alleviates above pain points,&lt;br /&gt;&lt;br /&gt;1) No System Dictionary in AnonymousClassLoader and AnonymousClassLoader is independent of existing class loaders in JDK. (Refer &lt;a href="http://homepage.mac.com/rose00/work/webrev/6653858/DVMTest.zip"&gt;AnonymousClassLoader.java&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;2) We can load multiple definition of same class using same instance of AnonymousClassLoader and it is responsibility of the user to choose preferred class definition among loaded class definitions to create instance. (Refer testAPI method of &lt;a href="http://homepage.mac.com/rose00/work/webrev/6653858/DVMTest.zip"&gt;DVMTest.java&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;3) Classes defined by AnonymousClassLoader are not reachable by class loader of host class. Making not-in-use class definitions available for GC is simple.&lt;br /&gt;&lt;br /&gt;Above points are not theory, we have tested and working prototype ready. If you want to try yourself, refer my previous post on &lt;a href="http://softonaut.blogspot.com/2008/02/building-openjdk-multi-language-vm-aka.html"&gt;building MLVM&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;QR code for building MLVM : &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_IL3-G4eU0k0/R7PUGoelm0I/AAAAAAAAAAQ/XLnFUcRBHyw/s1600-h/mlvm.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_IL3-G4eU0k0/R7PUGoelm0I/AAAAAAAAAAQ/XLnFUcRBHyw/s200/mlvm.png" alt="" id="BLOGGER_PHOTO_ID_5166706407934106434" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-1906819994916116715?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/1906819994916116715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=1906819994916116715' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/1906819994916116715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/1906819994916116715'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2008/02/anonymousclassloader-in-openjdk-mlti.html' title='AnonymousClassLoader in OpenJDK Mlti-Language VM (MLVM)'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_IL3-G4eU0k0/R7PUGoelm0I/AAAAAAAAAAQ/XLnFUcRBHyw/s72-c/mlvm.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-5601685165303714789</id><published>2008-02-03T18:46:00.000-08:00</published><updated>2008-02-03T23:20:22.655-08:00</updated><title type='text'>Building OpenJDK Multi-Language VM aka The Da Vinci Machine</title><content type='html'>Life is more exciting with multi-language support on JVM. Recently john rose @ sun, created patch for  loading anonymous classes in the VM ( &lt;span style="font-style: italic;"&gt;read carefully, we are not talking about anonymous classes in JDK, we are talking about loading anonymous classes at VM level&lt;/span&gt; ). JVM wouldn't not allow someone  to change structure of a class once it loaded. Though this security feature brings-in stability to JVM, dynamic language  implementors for JVM are forced to write lots of boiler plate code to simulate dynamism on top of JVM (Ex: In Ruby, methods can be added, removed, modified at runtime, even class structure can be changed @ runtime too). The recent patch added by john  for OpenJDK allows us to load an arbitrary class from a block of bytecodes and associate the new class with a pre-existing host class, inheriting its access, linkage, and permission characteristics. Very interesting thing is, a block of bytecodes can be template class file and this template class can be customized at runtime using various  constant pool patching methods in java.dyn.AnonymousClassLoader, just before loaded by AnonymousClassLoader  class loader. This patch not only alienate  pain of other language implementers to a greater extent but  accentuate complete JDK and Hotspot with new way of loading and  linking anonymous classes in JVM, thereby opening up developers mind in  yet another innovative direction. Read john's blog on&lt;a href="http://blogs.sun.com/jrose/entry/anonymous_classes_in_the_vm"&gt; anonymous classes in the vm&lt;/a&gt; for more details on this feature. Pretty exciting ha?, Wanna try it out yourself?. Here is the step by step instruction for applying multi-language path to  Open JDK Hotspot VM and building &lt;a href="http://openjdk.java.net/projects/mlvm/"&gt;mlvm&lt;/a&gt; aka &lt;a href="http://openjdk.java.net/projects/mlvm/"&gt;The Davinci VM&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you haven't successfully built Open JDK and Hotspot VM, go through simonis blog on &lt;a href="http://weblogs.java.net/blog/simonis/archive/2008/01/hotspot_develop.html"&gt;building Open JDK and hotspot on linux&lt;/a&gt;. Once you successfully built OpenJDK and Hotspot, follow&lt;br /&gt;below instructions for building and running mlvm,&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Download mlvm paths and related files&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://homepage.mac.com/rose00/work/webrev/6652736/wkk.patch"&gt;http://homepage.mac.com/rose00/work/webrev/6652736/wkk.patch&lt;/a&gt;&lt;br /&gt;&lt;a href="http://homepage.mac.com/rose00/work/webrev/6653858/anonk.patch"&gt;http://homepage.mac.com/rose00/work/webrev/6653858/anonk.patch&lt;/a&gt;&lt;br /&gt;&lt;a href="http://homepage.mac.com/rose00/work/webrev/6653858/DVMTest.zip"&gt;http://homepage.mac.com/rose00/work/webrev/6653858/DVMTest.zip&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Applying patchs&lt;/li&gt;&lt;/ul&gt;cd &lt;open_jdk_dir&gt;&lt;open_jdk_dir&gt;/jdk7/hotspot&lt;/open_jdk_dir&gt;&lt;/open_jdk_dir&gt;&lt;br /&gt;&lt;open_jdk_dir&gt;patch -p1 --backup-if-mismatch &lt; /home/tselvan/mlvm/patches/wkk.patch &lt;/open_jdk_dir&gt;&lt;br /&gt;&lt;open_jdk_dir&gt;patch -p1 --backup-if-mismatch &lt; /home/tselvan/mlvm/patches/anonk.patch &lt;/open_jdk_dir&gt;&lt;ul&gt;&lt;li&gt;&lt;open_jdk_dir&gt;Build OpenJDK Hotspot VM&lt;br /&gt;&lt;/open_jdk_dir&gt;&lt;/li&gt;&lt;/ul&gt;&lt;open_jdk_dir&gt; LANG=C \&lt;br /&gt;ALT_BOOTDIR=/share/software/jdk1.6.0_04/ \   HOTSPOT_BUILD_JOBS=1 \                                           ALT_OUTPUTDIR=../../build/hotspot_debug \   make jvmg 2&gt;&amp;amp;1 | tee ../../build/hotspot_debug.log&lt;/open_jdk_dir&gt;&lt;ul&gt;&lt;li&gt;&lt;open_jdk_dir&gt;Give necessary permissions to libjvm.so under linux,&lt;/open_jdk_dir&gt;&lt;/li&gt;&lt;/ul&gt;&lt;open_jdk_dir&gt;chcon -t texrel_shlib_t /share/software/OpenJDK/jdk7/build/openjdk_full_debug/lib/i386/*.so&lt;/open_jdk_dir&gt;&lt;br /&gt;&lt;open_jdk_dir&gt;chcon -t texrel_shlib_t /share/software/OpenJDK/jdk7/build/openjdk_full_debug/j2sdk-image/jre/lib/i386/*.so&lt;/open_jdk_dir&gt;&lt;ul&gt;&lt;li&gt;&lt;open_jdk_dir&gt;set PATH and JAVA_HOME&lt;/open_jdk_dir&gt;&lt;/li&gt;&lt;/ul&gt;&lt;open_jdk_dir&gt;export PATH=/share/software/OpenJDK/jdk7/build/openjdk_full_debug/bin:$PATH&lt;/open_jdk_dir&gt;&lt;br /&gt;&lt;open_jdk_dir&gt;export JAVA_HOME=/share/software/OpenJDK/jdk7/build/openjdk_full_debug&lt;/open_jdk_dir&gt;&lt;ul&gt;&lt;li&gt;&lt;open_jdk_dir&gt;Running sample mlvm program&lt;br /&gt;&lt;/open_jdk_dir&gt;&lt;/li&gt;&lt;/ul&gt;&lt;open_jdk_dir&gt;Unzip DVMTest.zip, ( i have locally unziped to /share/software/OpenJDK/mlvm)&lt;/open_jdk_dir&gt;&lt;br /&gt;&lt;open_jdk_dir&gt;Run Make.sh&lt;/open_jdk_dir&gt;&lt;br /&gt;&lt;open_jdk_dir&gt;java -esa -ea  -Xbootclasspath/p:/share/software/OpenJDK/mlvm/bootcp -cp /share/software/OpenJDK/mlvm  DVMTest&lt;br /&gt;&lt;br /&gt;&lt;/open_jdk_dir&gt;&lt;open_jdk_dir&gt;If you like to have discussion on mlvm, leave your comments or lets catch up during &lt;a href="http://www.devcamp.in/"&gt;DevCamp&lt;/a&gt;. Watch this space for more experiment with mlvm in coming weeks.&lt;br /&gt;&lt;br /&gt;&lt;/open_jdk_dir&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-5601685165303714789?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/5601685165303714789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=5601685165303714789' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/5601685165303714789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/5601685165303714789'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2008/02/building-openjdk-multi-language-vm-aka.html' title='Building OpenJDK Multi-Language VM aka The Da Vinci Machine'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-351375284566409563</id><published>2007-08-12T22:40:00.000-07:00</published><updated>2007-08-12T22:54:18.980-07:00</updated><title type='text'>Static Language Runtime</title><content type='html'>&lt;p class="MsoNormal"&gt;Disclaimer:&lt;span style=""&gt;  &lt;/span&gt;** Just for fun**&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;If you are a Ruby/Python lover, you probably very glad by now as ruby/python adaptation across various spectrum of industry is growing at very rapid phase, and these dynamic languages are ported to existing enterprise heavyweights like Java.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;Let’s go one step further from here, why can’t we port static language like Java to ruby? Think of it, we will have Static Language Runtime for Java/C#  in ruby/python. I am talking about bi-directional portability at runtime level. Won’t that be fun?.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-351375284566409563?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/351375284566409563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=351375284566409563' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/351375284566409563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/351375284566409563'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2007/08/static-language-runtime.html' title='Static Language Runtime'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4363007243782176340.post-973077622363067341</id><published>2007-07-22T20:38:00.000-07:00</published><updated>2007-07-22T20:47:02.250-07:00</updated><title type='text'>My Small Observations as DEV</title><content type='html'>&lt;ul&gt;&lt;li&gt;Production Environment: Is a place, where only limited people are allowed to make mistakes.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Java Dev's belief&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;Carl Sagan        : Number of stars is more than sum of all grains of sand on all beaches in earth.&lt;/li&gt;&lt;li&gt;Java Dev's belief    : Number of java frameworks should be more than number of stars.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;It is not very difficult to master a framework compared to understanding the fundamentals.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Every offshore vendor has two kinds of developers,&lt;/li&gt;&lt;ul&gt;&lt;li&gt;1) Excite about technology, innovate at work, and generate revenue for the company&lt;/li&gt;&lt;li&gt;2) Work at Center of Excellence and/or Technology practice&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The only benefit of CMM certification is exercised at first by every offshore vendor when things go wrong in a project. "Blame process at client end". It was difficult to find reason(s) for a failure when client too CMM certified. Solution? Have more certifications apart from CMM. Execution capability of offshore vendor grows with number of certification it acquires.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363007243782176340-973077622363067341?l=softonaut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softonaut.blogspot.com/feeds/973077622363067341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4363007243782176340&amp;postID=973077622363067341' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/973077622363067341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4363007243782176340/posts/default/973077622363067341'/><link rel='alternate' type='text/html' href='http://softonaut.blogspot.com/2007/07/my-small-observations-as-dev.html' title='My Small Observations as DEV'/><author><name>selvan</name><uri>http://www.blogger.com/profile/00769495255524314482</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
