<?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-2460691050807423015</id><updated>2011-09-21T05:37:59.071-07:00</updated><category term='weather'/><category term='Python'/><category term='Tipping Point'/><category term='Google App'/><category term='MySQL'/><category term='Sticky ideas'/><category term='startup'/><category term='OpenSocial'/><category term='puzzle'/><category term='CRs'/><category term='crucible'/><category term='Posterous'/><category term='LiarLiar'/><category term='Smart Grid'/><category term='Bugs'/><category term='Linux'/><category term='LinkedIn'/><category term='todo'/><category term='Notepad++'/><category term='email'/><category term='Bugzilla'/><category term='Ubuntu'/><category term='Clover'/><category term='architecture'/><category term='blogging'/><category term='Teamcity'/><category term='Facebook'/><category term='Wubi'/><category term='password'/><category term='Software tools'/><title type='text'>Systems View</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2460691050807423015.post-5131397144008958134</id><published>2010-02-22T19:10:00.000-08:00</published><updated>2010-02-22T19:10:09.192-08:00</updated><title type='text'>social and Google -- Who I am, who do I know, what do I do</title><content type='html'>What does social mean to Google? &lt;a href="http://gigaom.com/2010/01/11/googles-approach-to-social-for-2010/"&gt;Who I am, who do I know, what do I do.&amp;nbsp;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check out the above link for details but the above seems a nice pithy answer. &lt;br /&gt;&lt;input id="gwProxy" type="hidden" /&gt;&lt;input id="jsProxy" onclick="jsCall();" type="hidden" /&gt;&lt;br /&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-5131397144008958134?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/5131397144008958134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/5131397144008958134'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2010/02/social-and-google-who-i-am-who-do-i.html' title='social and Google -- Who I am, who do I know, what do I do'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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></entry><entry><id>tag:blogger.com,1999:blog-2460691050807423015.post-982987688726671138</id><published>2010-02-22T17:43:00.000-08:00</published><updated>2010-02-22T17:43:26.350-08:00</updated><title type='text'>getting ready to leave Qualcomm</title><content type='html'>Hi all, getting ready to leave Qualcomm. Planning to join a startup in the machine to machine wireless space. Will have more articles related to this space going forward. &lt;br /&gt;&lt;input id="gwProxy" type="hidden" /&gt;&lt;!--Session data--&gt;&lt;input id="jsProxy" onclick="jsCall();" type="hidden" /&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-982987688726671138?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/982987688726671138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/982987688726671138'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2010/02/getting-ready-to-leave-qualcomm.html' title='getting ready to leave Qualcomm'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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></entry><entry><id>tag:blogger.com,1999:blog-2460691050807423015.post-2037426562935248232</id><published>2010-01-26T19:16:00.000-08:00</published><updated>2010-01-26T19:42:23.899-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='email'/><title type='text'>communication nirvana -- email?</title><content type='html'>Email was supposed to be cool but then it has degenerated to something akin to a curse. We have examples of several people declaring email free days, email bankruptcy etc. What went wrong?&amp;nbsp; To quote from an old article&lt;a href="http://money.cnn.com/magazines/business2/business2_archive/2007/07/01/100117059/index.htm"&gt; in CNN &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;As software goes, e-mail is almost socialist: From each according to his ability, to each whether or not he needs it. &lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Here's where e-mail's socialism turns from strength to weakness: It doesn't matter if the message comes from a spammer hawking Viagra, your wife asking you to pick up some wine, your boss telling the company that Monday is a holiday, or a client asking for a meeting at his office at 11 a.m. In today's inboxes, all e-mail messages are equal. &lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;That even the most tech-savvy among us are unable to cope indicates an underlying problem: E-mail has become a crutch, a way of passing the buck. Want to make an appointment? That's 10 messages back and forth. Then there are corporate updates, birthday announcements, forwarded jokes, and (if you're me) the occasional amorous ditty.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;So mankind is in need of a solution to this problem. Is there a market for this? To quote the same article in CNN,&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp;According to the Radicati Group, a market research firm, there are about 1.2 billion e-mail users and 1.8 billion active e-mail accounts worldwide. And in much of Asia and Latin America, Internet usage is still low. When those people show up in full force, e-mail traffic is going to increase exponentially.&lt;br /&gt;&lt;/blockquote&gt;And to get the size of the market from another recent &lt;a href="http://gigaom.com/2009/07/27/the-social-web-prays-at-emails-altar/"&gt;GigaOm article &lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://www.radicati.com/?p=3237"&gt;The Radicati Group&lt;/a&gt;, a Palo Alto, Calif.-based research company, recently released a study showing that the number of worldwide email users will increase to almost 1.9 billion by 2013 compared with over 1.4 billion in 2009. Radicati projects that worldwide&amp;nbsp;email traffic will reach 507 billion messages per day by 2013, almost double the 2009 figure of 247 billion messages per day. &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;What can be an approach to solve this problem? From the same article&lt;br /&gt;&lt;blockquote&gt;In reality, of course, some are more equal than others. Spam, alerts, and calendar items all need to be treated separately. A smart inbox would -- all in one interface -- catch spam in junk filters, display the wine reminder in an IM, move company news to an RSS feed, and intelligently negotiate appointment requests with your calendar in the background.&lt;br /&gt;&lt;/blockquote&gt;Hmm, a problem that needs a solution. Why did I start thinking of this. Two words -- Google Wave. Will that solve this problem? Probably will address that in a separate article. But is this the only option out there. Not really. Some others of interest seem to be &amp;nbsp;&lt;a href="http://www.postbox-inc.com/"&gt;Postbox,&lt;/a&gt; SenderOk (division of WebCEO), Xobni, Zimbra etc. &lt;br /&gt;&lt;br /&gt;The feature of Postbox that caught my eye was the to-do tagging. This seems to give me an ability to add task related comments to my email. Have to check that out. &lt;br /&gt;&lt;br /&gt;SenderOk seems to have some cool features &lt;a href="http://gigaom.com/2009/07/27/the-social-web-prays-at-emails-altar/"&gt;such as&lt;/a&gt; the ability to sort email according to your past behavior and the behavior of others in the network. Algorithms mark received email into either VIP category that need to be addressed asap or in regular category that can be ignored for a while. They also seem to provide social networking profiles in the email header pane.&amp;nbsp; They also claim to provide real time anonymous statistics to companies on what really happens to their email and whether they can reach people another way (such as starting a conversation via the social networking portal inside the email header pane). Interesting. &lt;br /&gt;&lt;br /&gt;Have to check the above approaches out. &lt;br /&gt;&lt;br /&gt;&lt;input id="gwProxy" type="hidden" /&gt;&lt;input id="jsProxy" onclick="jsCall();" type="hidden" /&gt;&lt;br /&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden" /&gt;&lt;input id="jsProxy" onclick="jsCall();" type="hidden" /&gt;&lt;br /&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-2037426562935248232?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/2037426562935248232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/2037426562935248232'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2010/01/communication-nirvana-email.html' title='communication nirvana -- email?'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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></entry><entry><id>tag:blogger.com,1999:blog-2460691050807423015.post-2338548206706112033</id><published>2010-01-23T19:22:00.000-08:00</published><updated>2010-01-26T19:44:25.366-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='weather'/><title type='text'>Weather data based startups</title><content type='html'>Information about the weather is useful for many industries such as utility, transportation and even retail. A utility can decide on the resource usage to generate power based on the weather conditions. A transport company can use the weather information for planning purpose while a retailer can use the weather information to stock up on appropriate material.&lt;br /&gt;&lt;br /&gt;In fact weather data can be the basis of creation of many applications as &lt;a href="http://earth2tech.com/2010/01/19/how-weather-data-could-be-the-new-location-data/"&gt;this article&lt;/a&gt; from GigaOm points out. &lt;br /&gt;&lt;input id="gwProxy" type="hidden" /&gt;&lt;!--Session data--&gt;&lt;input id="jsProxy" onclick="jsCall();" type="hidden" /&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-2338548206706112033?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/2338548206706112033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/2338548206706112033'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2010/01/weather-data-based-startups.html' title='Weather data based startups'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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></entry><entry><id>tag:blogger.com,1999:blog-2460691050807423015.post-8883034821541685387</id><published>2010-01-23T18:43:00.000-08:00</published><updated>2010-01-23T18:43:21.191-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Smart Grid'/><title type='text'>Smart Grids and real time information</title><content type='html'>FCC is currently focusing on smart grid. To quote &lt;a href="http://earth2tech.com/2010/01/21/how-the-fcc-will-promote-open-smart-grid-networks-real-time-energy-data/"&gt;GigaOM&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;Those recommendations will include how to promote open standards and commercial networks, how to use policies to encourage utilities to provide their customers with real-time open access to energy data and potential ways to use federal spectrum bands for utilities’ smart grid deployments. &lt;br /&gt;&lt;/blockquote&gt;This should be of interest to startups such as OnRamp Wireless. &lt;br /&gt;&lt;input id="gwProxy" type="hidden" /&gt;&lt;!--Session data--&gt;&lt;input id="jsProxy" onclick="jsCall();" type="hidden" /&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-8883034821541685387?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/8883034821541685387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/8883034821541685387'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2010/01/smart-grids-and-real-time-information.html' title='Smart Grids and real time information'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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></entry><entry><id>tag:blogger.com,1999:blog-2460691050807423015.post-6131291618699159455</id><published>2010-01-23T18:10:00.000-08:00</published><updated>2010-01-23T18:10:51.118-08:00</updated><title type='text'>LTE related startups</title><content type='html'>Promising opportunity for startups who can improve the experience on a LTE network. Approximately 1.3 billion dollars to be provided to startups who can focus on problems faced by the core LTE infrastructure. More details at &lt;a href="http://gigaom.com/2010/01/22/startups-if-you-can-make-verizons-lte-network-awesome-theres-1-3b-to-be-had/"&gt;GigaOm&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-6131291618699159455?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/6131291618699159455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/6131291618699159455'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2010/01/lte-related-startups.html' title='LTE related startups'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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></entry><entry><id>tag:blogger.com,1999:blog-2460691050807423015.post-1878430619135573981</id><published>2009-12-06T21:34:00.000-08:00</published><updated>2009-12-06T21:32:12.136-08:00</updated><title type='text'>Breathalyzer -- Facebook puzzle</title><content type='html'>More puzzles; in this post I provide the code for another puzzle provided on Facebook. Note that the unit test code is not included here. You can copy the code below after creating a project in an IDE such as Eclipse (which is what I use). &lt;br /&gt;&lt;br /&gt;By the way, this puzzle was interesting. I did spend some time thinking of the algorithm to solve the problem but then started Googling for it. Found out about LevenshteinDistance which solves this problem nicely. Have to confess though that my thoughts on solving this problem were focused on using a tree structure. After finding the solution (and also the code for that) I gave up on that approach. &lt;br /&gt;&lt;br /&gt;So given below is the problem and the code.  The code contains two different functions for getting the Levenshtein Distance. Was having problems with the first function and hence included the second; now have kept both.&lt;br /&gt;&lt;br /&gt;By the way see the example below. The word "tihs" has "ties" as the closest although in the context of the example sentence I was not seeing this until I used the program to clear my mental block. An example of computer not having to deal with the "mental block". &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PROBLEM: (&lt;a href="http://www.facebook.com/careers/puzzles.php?puzzle_id=17"&gt;from Facebook page)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To safeguard against the dreaded phenomenon of wall posting while drunk, Facebook is implementing a feature that detects when post content is too garbled to have been done while sober and informs the user that they need to take an online breathalyzer test before being allowed to post. &lt;br /&gt;&lt;br /&gt; Unfortunately, there is far too much content for a given set of persons to evaluate by hand. Fortunately, you are a programmer of some repute and can write a program that processes and evaluates wall posts. You realize that such a program would be of great use to society and intend to resolve the problem once and for all. The program you write must compute a score for a body of text, returning this score upon completion. &lt;br /&gt;&lt;br /&gt; Your program will be given a list of accepted words and run on one wall post at a time. For each word &lt;strong&gt;W&lt;/strong&gt; in the post, you must find word &lt;strong&gt;W'&lt;/strong&gt; from the list of accepted words such that the number of changes from &lt;strong&gt;W&lt;/strong&gt; to &lt;strong&gt;W'&lt;/strong&gt; is minimized. It is possible that &lt;strong&gt;W&lt;/strong&gt; is already &lt;strong&gt;W'&lt;/strong&gt; and thus the number of changes necessary is zero. A change is defined as replacing a single letter with another letter, adding a letter in any position, or removing a letter from any position. The total score for the wall post is the minimum number of changes necessary to make all words in the post acceptable. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Input Specification&lt;/h3&gt;  Your program must take a single string argument, representing the file name containing the wall post to analyze. In addition, your program must open up and read the accepted word list from the following static path location:  &lt;div class="puzcode"&gt;&lt;strong&gt; &lt;pre&gt;/var/tmp/twl06.txt&lt;/pre&gt; &lt;/strong&gt;&lt;/div&gt;  For testing purposes, you may download and examine the accepted word list &lt;strong&gt;&lt;a href="http://www.facebook.com/jobs_puzzles/twl06.txt"&gt;here&lt;/a&gt;&lt;/strong&gt;. When submitting your code, you do not need to include this file, as it is already present on the machine. &lt;br /&gt;&lt;br /&gt; The input file consists entirely of lower case letters and space characters. You are guaranteed that the input file will start with a lower case letter, and that all words are separated by at least one space character. The file may or may not end with a new line character. &lt;br /&gt;&lt;br /&gt; Example input file: &lt;div class="puzcode"&gt;&lt;strong&gt; &lt;pre&gt;tihs sententcnes iss nout varrry goud&lt;/pre&gt; &lt;/strong&gt;&lt;/div&gt;  You are guaranteed that your program will run against well formed input files and that the accepted word list is identical to the one provided for testing. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;h3&gt;Output Specification&lt;/h3&gt;  Your program must print out the minimum number of changes necessary to turn all words in the input wall post into accepted words as defined by the word list file. Words may not be joined together, or separated into multiple words. A change in a word is defined as one of the following: &lt;ol&gt;&lt;li&gt;Replacing any single letter with another letter.&lt;/li&gt;&lt;li&gt;Adding a single letter in any position.&lt;/li&gt;&lt;li&gt;Removing any single letter.&lt;/li&gt;&lt;/ol&gt; This score must be printed out as an integer and followed by a single new line. &lt;br /&gt;&lt;br /&gt; Example Output (newline after number): &lt;div class="puzcode"&gt;&lt;strong&gt;&lt;pre&gt;8&lt;/pre&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;package com.farooq;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.FileReader;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;&lt;br /&gt;public class Word_distance {&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @param args&lt;br /&gt;     */&lt;br /&gt;    private ArrayList&lt;String&gt; legal_word_list = new ArrayList&lt;String&gt;();&lt;br /&gt;   &lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;       &lt;br /&gt;        String[] sentence_to_check = new String[args.length];&lt;br /&gt;        int Breath_analyzer_number; // the result we are looking for&lt;br /&gt;       &lt;br /&gt;        //read the sentence which has to be tested from command line/file etc&lt;br /&gt;        if (args.length &gt; 0) {&lt;br /&gt;            sentence_to_check = args;            &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        //create an instance and determine the Levenshtein distance&lt;br /&gt;        Word_distance sentence_LD = new Word_distance();&lt;br /&gt;       &lt;br /&gt;        Breath_analyzer_number = sentence_LD.sentenceAnalysis(sentence_to_check);&lt;br /&gt;        System.out.println("The number for the given sentence is " +Breath_analyzer_number);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public Word_distance() {&lt;br /&gt;        String filename = "C:\\tempfiles\\word_list_Levenshtein.txt";&lt;br /&gt;        String line_read;&lt;br /&gt;        try {&lt;br /&gt;            FileReader word_list_file = new FileReader(filename);&lt;br /&gt;            BufferedReader word_buffer = new BufferedReader(word_list_file);&lt;br /&gt;           &lt;br /&gt;            while ((line_read = word_buffer.readLine()) != null) {&lt;br /&gt;                //so reading the list of "legal" words into the ArrayList&lt;br /&gt;                legal_word_list.add(line_read);&lt;br /&gt;            }&lt;br /&gt;            word_list_file.close();&lt;br /&gt;           &lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            System.out.println("Exception is " +e);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public int sentenceAnalysis(String[] sentence) {&lt;br /&gt;       &lt;br /&gt;        // get each word of sentence and determine Levenshtein number for word&lt;br /&gt;        //have to iterate the given word over entire legal_word_list&lt;br /&gt;        //and determine lowest value; if zero then break, repeat for all words&lt;br /&gt;        int total_distance =0;&lt;br /&gt;        int[] word_distance = new int[sentence.length] ; //minimum word_distance for each word in the sentence&lt;br /&gt;        int temp_distance;&lt;br /&gt;       &lt;br /&gt;&lt;br /&gt;        for (int i=0;i&lt; sentence.length; i++) {&lt;br /&gt;&lt;br /&gt;            for (int j=0; j&lt; legal_word_list.size();j ++) {&lt;br /&gt;                temp_distance = getLevenshteinDistance(sentence[i], legal_word_list.get(j).toLowerCase());&lt;br /&gt;//                temp_distance = LD(sentence[i].trim(), legal_word_list.get(j).toLowerCase());&lt;br /&gt;               &lt;br /&gt;                if (temp_distance ==0) {&lt;br /&gt;                    word_distance[i] = temp_distance;&lt;br /&gt;                    break;&lt;br /&gt;                } else if (j==0) {&lt;br /&gt;                    word_distance[i] = temp_distance;&lt;br /&gt;                } else if (word_distance[i] &gt; temp_distance) {&lt;br /&gt;                    word_distance[i] = temp_distance;&lt;br /&gt;                } else {&lt;br /&gt;                    //DO NOTHING as new word distance is larger than what we had&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            total_distance = total_distance + word_distance[i];&lt;br /&gt;        }&lt;br /&gt;        return total_distance;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    // the following code copied from http://www.merriampark.com/ldjava.htm by Chas Emerick&lt;br /&gt;    public int getLevenshteinDistance (String s, String t) {&lt;br /&gt;          if (s == null || t == null) {&lt;br /&gt;            throw new IllegalArgumentException("Strings must not be null");&lt;br /&gt;          }&lt;br /&gt;               &lt;br /&gt;          /*&lt;br /&gt;            The difference between this impl. and the previous is that, rather&lt;br /&gt;             than creating and retaining a matrix of size s.length()+1 by t.length()+1,&lt;br /&gt;             we maintain two single-dimensional arrays of length s.length()+1.  The first, d,&lt;br /&gt;             is the 'current working' distance array that maintains the newest distance cost&lt;br /&gt;             counts as we iterate through the characters of String s.  Each time we increment&lt;br /&gt;             the index of String t we are comparing, d is copied to p, the second int[].  Doing so&lt;br /&gt;             allows us to retain the previous cost counts as required by the algorithm (taking&lt;br /&gt;             the minimum of the cost count to the left, up one, and diagonally up and to the left&lt;br /&gt;             of the current cost count being calculated).  (Note that the arrays aren't really&lt;br /&gt;             copied anymore, just switched...this is clearly much better than cloning an array&lt;br /&gt;             or doing a System.arraycopy() each time  through the outer loop.)&lt;br /&gt;&lt;br /&gt;             Effectively, the difference between the two implementations is this one does not&lt;br /&gt;             cause an out of memory condition when calculating the LD over two very large strings.         &lt;br /&gt;          */       &lt;br /&gt;               &lt;br /&gt;          int n = s.length(); // length of s&lt;br /&gt;          int m = t.length(); // length of t&lt;br /&gt;               &lt;br /&gt;          if (n == 0) {&lt;br /&gt;            return m;&lt;br /&gt;          } else if (m == 0) {&lt;br /&gt;            return n;&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;          int p[] = new int[n+1]; //'previous' cost array, horizontally&lt;br /&gt;          int d[] = new int[n+1]; // cost array, horizontally&lt;br /&gt;          int _d[]; //placeholder to assist in swapping p and d&lt;br /&gt;&lt;br /&gt;          // indexes into strings s and t&lt;br /&gt;          int i; // iterates through s&lt;br /&gt;          int j; // iterates through t&lt;br /&gt;&lt;br /&gt;          char t_j; // jth character of t&lt;br /&gt;&lt;br /&gt;          int cost; // cost&lt;br /&gt;&lt;br /&gt;          for (i = 0; i&lt;=n; i++) {&lt;br /&gt;             p[i] = i;&lt;br /&gt;          }&lt;br /&gt;               &lt;br /&gt;          for (j = 1; j&lt;=m; j++) {&lt;br /&gt;             t_j = t.charAt(j-1);&lt;br /&gt;             d[0] = j;&lt;br /&gt;               &lt;br /&gt;             for (i=1; i&lt;=n; i++) {&lt;br /&gt;                cost = s.charAt(i-1)==t_j ? 0 : 1;&lt;br /&gt;                // minimum of cell to the left+1, to the top+1, diagonally left and up +cost               &lt;br /&gt;                d[i] = Math.min(Math.min(d[i-1]+1, p[i]+1),  p[i-1]+cost); &lt;br /&gt;             }&lt;br /&gt;&lt;br /&gt;             // copy current distance counts to 'previous row' distance counts&lt;br /&gt;             _d = p;&lt;br /&gt;             p = d;&lt;br /&gt;             d = _d;&lt;br /&gt;          }&lt;br /&gt;               &lt;br /&gt;          // our last action in the above loop was to switch d and p, so p now&lt;br /&gt;          // actually has the most recent cost counts&lt;br /&gt;          return p[n];&lt;br /&gt;        }&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;      // following code also from web site; not my code&lt;br /&gt;      //*****************************&lt;br /&gt;      // Compute Levenshtein distance&lt;br /&gt;      //*****************************&lt;br /&gt;&lt;br /&gt;      public int LD (String s, String t) {&lt;br /&gt;      int d[][]; // matrix&lt;br /&gt;      int n; // length of s&lt;br /&gt;      int m; // length of t&lt;br /&gt;      int i; // iterates through s&lt;br /&gt;      int j; // iterates through t&lt;br /&gt;      char s_i; // ith character of s&lt;br /&gt;      char t_j; // jth character of t&lt;br /&gt;      int cost; // cost&lt;br /&gt;&lt;br /&gt;        // Step 1&lt;br /&gt;&lt;br /&gt;        n = s.length ();&lt;br /&gt;        m = t.length ();&lt;br /&gt;        if (n == 0) {&lt;br /&gt;          return m;&lt;br /&gt;        }&lt;br /&gt;        if (m == 0) {&lt;br /&gt;          return n;&lt;br /&gt;        }&lt;br /&gt;        d = new int[n+1][m+1];&lt;br /&gt;&lt;br /&gt;        // Step 2&lt;br /&gt;&lt;br /&gt;        for (i = 0; i &lt;= n; i++) {&lt;br /&gt;          d[i][0] = i;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        for (j = 0; j &lt;= m; j++) {&lt;br /&gt;          d[0][j] = j;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // Step 3&lt;br /&gt;&lt;br /&gt;        for (i = 1; i &lt;= n; i++) {&lt;br /&gt;&lt;br /&gt;          s_i = s.charAt (i - 1);&lt;br /&gt;&lt;br /&gt;          // Step 4&lt;br /&gt;&lt;br /&gt;          for (j = 1; j &lt;= m; j++) {&lt;br /&gt;&lt;br /&gt;            t_j = t.charAt (j - 1);&lt;br /&gt;&lt;br /&gt;            // Step 5&lt;br /&gt;&lt;br /&gt;            if (s_i == t_j) {&lt;br /&gt;              cost = 0;&lt;br /&gt;            }&lt;br /&gt;            else {&lt;br /&gt;              cost = 1;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            // Step 6&lt;br /&gt;&lt;br /&gt;            d[i][j] = Minimum (d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1] + cost);&lt;br /&gt;&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // Step 7&lt;br /&gt;&lt;br /&gt;        return d[n][m];&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;//****************************&lt;br /&gt;// Get minimum of three values&lt;br /&gt;//****************************&lt;br /&gt;&lt;br /&gt;private int Minimum (int a, int b, int c) {&lt;br /&gt;int mi;&lt;br /&gt;&lt;br /&gt;  mi = a;&lt;br /&gt;  if (b &lt; mi) {&lt;br /&gt;    mi = b;&lt;br /&gt;  }&lt;br /&gt;  if (c &lt; mi) {&lt;br /&gt;    mi = c;&lt;br /&gt;  }&lt;br /&gt;  return mi;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-1878430619135573981?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/1878430619135573981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=1878430619135573981' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/1878430619135573981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/1878430619135573981'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/12/breathalyzer-facebook-puzzle.html' title='Breathalyzer -- Facebook puzzle'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-6884871210855901845</id><published>2009-12-06T20:49:00.000-08:00</published><updated>2009-12-06T21:25:25.301-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='puzzle'/><category scheme='http://www.blogger.com/atom/ns#' term='LiarLiar'/><title type='text'>Liar, Liar -- Facebook Puzzle</title><content type='html'>This was an interesting puzzle from Facebook. See the code below; i do not include unit test code here.  You should be able to create a project in an IDE such as Eclipse (which is what I use) and create a class with the code below in the class.  Similarly, you can use Eclipse to create the unit test code.&lt;br /&gt;&lt;br /&gt;By the way, the code below is not completely  robust though it works in several cases; a few more TODOs to be addressed that you see in the code. I got tired and so have put this code out without completing it. &lt;br /&gt;&lt;br /&gt;For preciseness, the situation that the code does not address is when you lack commonality while processing each group of accuser and accused people leading to a disjoint group of liars and non-liars.  The code works fine otherwise.&lt;br /&gt;&lt;br /&gt;PUZZLE&lt;br /&gt;As a newbie on a particular internet discussion board, you notice a distinct trend among its veteran members; everyone seems to be either unfailingly honest or compulsively deceptive.  You decide to try to identify the members of the two groups, starting with the assumption that every senior member either never lies or never tells the truth.  You compile as much data as possible, asking each person for a list of which people are liars.  Since the people you are asking have been around on the board for a long time, you may assume that they have perfect knowledge of who is trustworthy and who is not.  Each person will respond with a list of  people that they accuse of being liars.  Everyone on the board can see that you are a tremendous n00b, so they will grudgingly give you only partial lists of who the liars are.  Of course these lists are not to be taken at face value because of all the lying going on. &lt;br /&gt;&lt;br /&gt; You must write a program to determine, given all the information you've collected from the discussion board members, which members have the same attitude toward the telling the truth.  It's a pretty popular discussion board, so your program will need to be able to process a large amount of data quickly and efficiently. &lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------------------&lt;br /&gt;CODE:&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * THIS PROGRAM SOLVES A PUZZLE THAT WAS GIVEN ON FACEBOOK; DETAILS BELOW.&lt;br /&gt; *&lt;br /&gt; * Your program must take a single command line argument; the name of a file. It must&lt;br /&gt; * then open the file and read out the input data. The data begins with the number of&lt;br /&gt; * veteran members n followed by a newline. It continues with n chunks of information,each&lt;br /&gt; * defining the accusations made by a single member. Each chunk is formatted as follows:&lt;br /&gt; * &lt;accuser&gt; &lt;m&gt;&lt;br /&gt; * followed by m lines each containing the name of one member that the accuser says is a&lt;br /&gt; * liar. accuser name and m are separated by some number of tabs and spaces. m will&lt;br /&gt; * always be in [0, n]. All member names contain only alphabetic characters and are&lt;br /&gt; * unique and case-sensitive.&lt;br /&gt; *&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;package com.farooq;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.FileReader;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * @author fanjum&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;public class LiarDetection {&lt;br /&gt;    // a few TO DO's remain before this can be called robust code&lt;br /&gt;    //The basic algorithm works and has been tested.&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @param args&lt;br /&gt;     */&lt;br /&gt;   &lt;br /&gt;    private ArrayList&lt;string&gt; realGroupOne = new ArrayList&lt;string&gt;();&lt;br /&gt;    private ArrayList&lt;string&gt; realGroupOneOpposite = new ArrayList&lt;string&gt;();&lt;br /&gt;    private ArrayList&lt;string&gt; dummyGroupOne = new ArrayList&lt;string&gt;();&lt;br /&gt;    private ArrayList&lt;string&gt; dummyGroupOneOpposite = new ArrayList&lt;string&gt;();&lt;br /&gt;   &lt;br /&gt;    boolean doneWithAll;  // to check if all people have been categorized&lt;br /&gt;    int lineNumber;    // to maintain info about the number of lines read from file.&lt;br /&gt;    static String fileName;  // the file which contains the detailed info&lt;br /&gt;    int numberOfPeople;&lt;br /&gt;    FileReader fileToRead;  // file reader to be kept open until done&lt;br /&gt;    BufferedReader filebuffer;&lt;br /&gt;    int dummyCounter; // to split groups in the dummyGroup&lt;br /&gt;    final int DUMMY_INIT = 1000;&lt;br /&gt;   &lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;&lt;br /&gt;        // get the file name;&lt;br /&gt;        fileName = "C:\\tempfiles\\file_liar_liar.txt";&lt;br /&gt;       &lt;br /&gt;        // get the object initialization done&lt;br /&gt;        LiarDetection LD = new LiarDetection();&lt;br /&gt;       &lt;br /&gt;        //now divide the people into two arrays associated with created LD object&lt;br /&gt;       &lt;br /&gt;        LD.dividePeople();&lt;br /&gt;       &lt;br /&gt;        System.out.println("WE ARE DONE");&lt;br /&gt;        //PRINT TWO REAL ARRAY LISTS IF YOU WANT and check.&lt;br /&gt;        for (int i=0;i &lt;LD.realGroupOne.size(); i++) {&lt;br /&gt;            System.out.println("next in this group is " +LD.realGroupOne.get(i));&lt;br /&gt;        }&lt;br /&gt;        for (int i=0; i &lt; LD.realGroupOneOpposite.size(); i++) {&lt;br /&gt;            System.out.println("next in opposite groups i " +LD.realGroupOneOpposite.get(i));&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public LiarDetection() {&lt;br /&gt;       &lt;br /&gt;        String first_line, next_line;&lt;br /&gt;        String first_part, second_part; // to read the accuser name and number accused&lt;br /&gt;        int space_index; //to determine where accuser name ends and number accused begins&lt;br /&gt;        int numAccused; //to determine number accused&lt;br /&gt;        dummyCounter =DUMMY_INIT;  // initializing dummyCounter to 1000;&lt;br /&gt;        //open the file and keep it open&lt;br /&gt;       &lt;br /&gt;        try {&lt;br /&gt;            fileToRead = new FileReader(fileName);    &lt;br /&gt;            filebuffer = new BufferedReader(fileToRead);&lt;br /&gt;           &lt;br /&gt;            //read teh file and get the number numberOfPeople;&lt;br /&gt;&lt;br /&gt;            first_line = filebuffer.readLine();&lt;br /&gt;            numberOfPeople = Integer.valueOf(first_line).intValue();&lt;br /&gt;&lt;br /&gt;            // read the first block with member name, number accused m and accused names&lt;br /&gt;            lineNumber = 1; // to signify that one line was read   &lt;br /&gt;            next_line = filebuffer.readLine().trim();&lt;br /&gt;            space_index = next_line.indexOf(" ");&lt;br /&gt;            first_part = next_line.substring(0, space_index);  //name of accuser&lt;br /&gt;            second_part = next_line.substring(space_index).trim(); //number of accused in String&lt;br /&gt;            numAccused = Integer.valueOf(second_part).intValue(); //convert to int&lt;br /&gt;            realGroupOne.add(first_part);&lt;br /&gt;           &lt;br /&gt;            for (int i=1; i&lt;=numAccused; i++) {&lt;br /&gt;                //put all this in one of the two real ArrayLists;&lt;br /&gt;                //associate lineNumber with number of lines read so you know where to start next&lt;br /&gt;                next_line = filebuffer.readLine().trim();&lt;br /&gt;                realGroupOneOpposite.add(next_line);&lt;br /&gt;            }           &lt;br /&gt;        } catch (Exception e) {       &lt;br /&gt;            System.out.println("have an exception" +e);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;       &lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public void dividePeople() {&lt;br /&gt;        // we start to divide people into two camps&lt;br /&gt;        // we start with 2 since we have read the accusation of first member&lt;br /&gt;        for (int mem_number=2; mem_number&lt;=numberOfPeople; mem_number++) {&lt;br /&gt;            //make a call to see if we are done;&lt;br /&gt;            doneWithAll = checkIfDone();&lt;br /&gt;&lt;br /&gt;            if (!doneWithAll) {&lt;br /&gt;                //not divided all, so go to read accusation of mem_number&lt;br /&gt;                //A. read name of next member and the accusation list as String and String[]&lt;br /&gt;                //B. put the String and String[] in proper ArrayLists real or dummy and return here&lt;br /&gt;                //next method does both A and B above&lt;br /&gt;                divideNextGroup();&lt;br /&gt;            } else {&lt;br /&gt;                //we have divided all and so we are done&lt;br /&gt;                //close FILEREADER&lt;br /&gt;                try {&lt;br /&gt;                    if (fileToRead != null)&lt;br /&gt;                        fileToRead.close();&lt;br /&gt;                } catch (Exception e) {&lt;br /&gt;                   &lt;br /&gt;                }&lt;br /&gt;                break;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;       &lt;br /&gt;    }&lt;br /&gt;    public boolean checkIfDone() {&lt;br /&gt;        // check if realGroupOne and realGroupOneOpposite have all n members with no dups&lt;br /&gt;        //if dups then a problem&lt;br /&gt;        //also the dummyGroupOne and its pair should have no members.&lt;br /&gt;        if (realGroupOne.size() + realGroupOneOpposite.size() == numberOfPeople) {&lt;br /&gt;            // we are done&lt;br /&gt;            return true;&lt;br /&gt;        } else {&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public void divideNextGroup(){&lt;br /&gt;        String next_line;&lt;br /&gt;        String accuser_name, number_accused; // to read the accuser name and number accused&lt;br /&gt;        int numAccused; //number accused as an int&lt;br /&gt;        int space_index; //to determine where accuser name ends and number accused begins&lt;br /&gt;        String [] accused = new String[numberOfPeople];&lt;br /&gt;        boolean dividedIntoGroup; // true when the group members are put into one of four arrayLists.&lt;br /&gt;       &lt;br /&gt;        try {&lt;br /&gt;            //read next member into String accuser_name&lt;br /&gt;            //read list of accused into String[] accused; accuser_name and accused go into different groups&lt;br /&gt;            next_line = filebuffer.readLine().trim();&lt;br /&gt;            space_index = next_line.indexOf(" ");&lt;br /&gt;            accuser_name = next_line.substring(0, space_index);  //name of accuser&lt;br /&gt;            number_accused = next_line.substring(space_index).trim(); //number of accused in String&lt;br /&gt;            numAccused = Integer.valueOf(number_accused).intValue(); //convert to int&lt;br /&gt;            for (int i=0;i&lt;numAccused; i++) {&lt;br /&gt;                accused[i] = filebuffer.readLine().trim();&lt;br /&gt;            }&lt;br /&gt;           &lt;br /&gt;            //check if accuser in realGroupOne or realGroupOneOpposite and if so&lt;br /&gt;            // ensure that all accused are in the other group; ensure no duplicates while adding.&lt;br /&gt;            dividedIntoGroup = isGroupInRealList(accuser_name, accused,numAccused);&lt;br /&gt;           &lt;br /&gt;            if (!dividedIntoGroup) {&lt;br /&gt;                // not divided into realList, so check dummyList&lt;br /&gt;                dividedIntoGroup = isGroupInDummyList(accuser_name, accused,numAccused);&lt;br /&gt;               &lt;br /&gt;                if (!dividedIntoGroup) {&lt;br /&gt;                    //still not divided into group, so we put this in the dummyLists separated by an ID&lt;br /&gt;                    putGroupInDummyList(accuser_name, accused, numAccused);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;           &lt;br /&gt;        }catch (Exception e){&lt;br /&gt;           &lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;        // when here the group has been divided in either the real group or the dummy group; so done&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public boolean isGroupInRealList(String accuserName, String[] accusedList, int numberAccused) {&lt;br /&gt;&lt;br /&gt;        boolean inList = false;&lt;br /&gt;       &lt;br /&gt;//        6. check if A is IN any of the two real ArrayLists;&lt;br /&gt;//        7a. If A in any of two real ArrayLists, add (B,C,...N) to the paired AL GO TO 4A.&lt;br /&gt;//        7b. If A in none of two real ArrayLists, GO TO 8.&lt;br /&gt;//        8. check if any of (B,C,..N) is in any of two real ArrayLists.&lt;br /&gt;//        9a. If (B,C,..N) in any of two real ArrayLists add others to same AL,&lt;br /&gt;//            add A to paired AL, GO TO 4A.&lt;br /&gt;       &lt;br /&gt;        // ALSO CHECK FOR INCONSISTENCY AND THROW AN EXCEPTION OR WHATEVER:&lt;br /&gt;        if (realGroupOne.contains(accuserName)) {&lt;br /&gt;            // accuser is in GroupOne, so add all in accusedList to other without dups&lt;br /&gt;            inList = true;&lt;br /&gt;            for (int i=0;i&lt;numberAccused; i++) {&lt;br /&gt;                if (realGroupOne.contains(accusedList[i])) {&lt;br /&gt;                    //this is a problem, should not happen&lt;br /&gt;                }&lt;br /&gt;                if (realGroupOneOpposite.contains(accusedList[i])) {&lt;br /&gt;                    //accused name is already in list and so go to next&lt;br /&gt;                    continue;&lt;br /&gt;                } else {&lt;br /&gt;                    realGroupOneOpposite.add(accusedList[i]);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;           &lt;br /&gt;        } else if (realGroupOneOpposite.contains(accuserName)) {&lt;br /&gt;            //accuser is in GroupOneOpposite so add all in accusedList to other without dups&lt;br /&gt;            inList = true;&lt;br /&gt;            for (int i=0;i&lt;numberAccused; i++) {&lt;br /&gt;                if (realGroupOneOpposite.contains(accusedList[i])) {&lt;br /&gt;                    //this is a problem, should not happen&lt;br /&gt;                }&lt;br /&gt;                if (realGroupOne.contains(accusedList[i])) {&lt;br /&gt;                    //accused name is already in list and so go to next&lt;br /&gt;                   &lt;br /&gt;                } else {&lt;br /&gt;                    realGroupOne.add(accusedList[i]);&lt;br /&gt;                    }&lt;br /&gt;            }&lt;br /&gt;           &lt;br /&gt;        } else {&lt;br /&gt;           &lt;br /&gt;            //so accuser is not in either of real lists; so check if accused names are in either&lt;br /&gt;            for (int i=0;i&lt;numberAccused;i++) {&lt;br /&gt;            //check if each accused in either of real lists&lt;br /&gt;                if (realGroupOne.contains(accusedList[i])) {&lt;br /&gt;                    //add all the rest of the accusedList to GroupOne without duplicates&lt;br /&gt;                    //and add accuser to other group&lt;br /&gt;                    inList = true;&lt;br /&gt;                    for (int j=i+1;j &lt;numberAccused;j++) {&lt;br /&gt;                        //add rest of group to GroupOne&lt;br /&gt;                        if (!(realGroupOne.contains(accusedList[j]))) {&lt;br /&gt;                            //add to this group&lt;br /&gt;                            realGroupOne.add(accusedList[j]);&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                    realGroupOneOpposite.add(accuserName);&lt;br /&gt;                   &lt;br /&gt;                    break;&lt;br /&gt;                }&lt;br /&gt;                if (realGroupOneOpposite.contains(accusedList[i])) {&lt;br /&gt;                    //add all the rest of the accusedList to GroupOne without duplicates&lt;br /&gt;                    //and add accuser to other group&lt;br /&gt;                    inList = true;&lt;br /&gt;                    for (int j=i+1;j &lt;numberAccused;j++) {&lt;br /&gt;                        //add rest of group to GroupOne without duplicates&lt;br /&gt;                        if (!(realGroupOneOpposite.contains(accusedList[j]))) {&lt;br /&gt;                            //add to this group&lt;br /&gt;                            realGroupOneOpposite.add(accusedList[j]);&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                    realGroupOne.add(accuserName);&lt;br /&gt;                   &lt;br /&gt;                    break;                    &lt;br /&gt;                   &lt;br /&gt;                }&lt;br /&gt;           &lt;br /&gt;            }&lt;br /&gt;       &lt;br /&gt;        }&lt;br /&gt;        return inList;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public boolean isGroupInDummyList(String accuserName, String[] accusedList, int numberAccused) {&lt;br /&gt;        int indexOfName, indexOfCounter;&lt;br /&gt;        int tempindex;&lt;br /&gt;        boolean indummylist = false;&lt;br /&gt;//        10. check if A in any of two dummy ALs.&lt;br /&gt;//        10a. If A in any of two dummy ALs, add (B, C,...N) to same block in paired dummy AL.&lt;br /&gt;//             GO TO 4A.    &lt;br /&gt;//        10b. check if any of B,C, ...N in any of two dummy ALs.&lt;br /&gt;//        10c. Merge all the blocks that contain any of B,C, ...N into one TEMPBLOCK with unique elements.&lt;br /&gt;//             also remove the blocks when you put them into TEMPBLOCK; &lt;br /&gt;//        10d. for every block that contains B,C,..N, merge the corresponding block in other&lt;br /&gt;//             AL into one TEMPBLOCK with unique elements.&lt;br /&gt;//        10e. get teh next counter, add to dummy AL and merge TEMPBLOCK back into dummy AL.&lt;br /&gt;//              each TEMPBLOCK should be in a different dummy AL.&lt;br /&gt;       &lt;br /&gt;        if (dummyGroupOne.contains(accuserName)) {&lt;br /&gt;            // accusername is in this; find index and add to same subGroup in other dummy group&lt;br /&gt;            indexOfName = dummyGroupOne.indexOf(accuserName);&lt;br /&gt;            indummylist = true;&lt;br /&gt;            for (int j=indexOfName; j &gt;=0; j--) {&lt;br /&gt;                // to go and figure out the counter index&lt;br /&gt;                try {&lt;br /&gt;                    indexOfCounter = Integer.valueOf(dummyGroupOne.get(j)).intValue();&lt;br /&gt;                    //so now indexOfCounter contains the counter number&lt;br /&gt;                    tempindex = dummyGroupOneOpposite.indexOf(Integer.toString(indexOfCounter));&lt;br /&gt;                   &lt;br /&gt;                    for (int i=0; i&lt;numberAccused; i++) {&lt;br /&gt;                        //have to check if the ith accused is in dummy list but we skip that now&lt;br /&gt;                        //TO DO --- SO THIS IS TO BE FIXED&lt;br /&gt;                        dummyGroupOneOpposite.add(tempindex+1,accusedList[i]);&lt;br /&gt;                    }&lt;br /&gt;                } catch(NumberFormatException e) {&lt;br /&gt;                    continue;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;           &lt;br /&gt;        } else if (dummyGroupOneOpposite.contains(accuserName)) {&lt;br /&gt;            //accuserName is in this; find index and add to same subGroup in other dummy group&lt;br /&gt;            indexOfName = dummyGroupOneOpposite.indexOf(accuserName);&lt;br /&gt;            indummylist = true;&lt;br /&gt;            for (int j=indexOfName; j &gt;=0; j--) {&lt;br /&gt;                // to go and figure out the counter index&lt;br /&gt;                try {&lt;br /&gt;                    indexOfCounter = Integer.valueOf(dummyGroupOneOpposite.get(j)).intValue();&lt;br /&gt;                    //so now indexOfCounter contains the counter number&lt;br /&gt;                    tempindex = dummyGroupOne.indexOf(Integer.toString(indexOfCounter));&lt;br /&gt;                   &lt;br /&gt;                    for (int i=0; i&lt;numberAccused; i++) {&lt;br /&gt;                        //have to check if the ith accused is in dummy list but we skip that now&lt;br /&gt;                        //TO DO --- SO THIS IS TO BE FIXED&lt;br /&gt;                        dummyGroupOne.add(tempindex+1,accusedList[i]);&lt;br /&gt;                    }&lt;br /&gt;                } catch(NumberFormatException e) {&lt;br /&gt;                    continue;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;        //now check if accused[] are in either of the groups, if so add accuser to other dummy group&lt;br /&gt;        //also ensure rest of accused[] are in the same subgroup&lt;br /&gt;       &lt;br /&gt;        //TO DO -- check on this and complete this.&lt;br /&gt;                                                &lt;br /&gt;       &lt;br /&gt;        // TO DO -- ALSO MERGE REAL AND DUMMY LISTS;&lt;br /&gt;        return indummylist;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public void putGroupInDummyList(String accuserName, String[] accusedList, int numberAccused) {&lt;br /&gt;//        11. If (B,C,..N) in none of four ALs add A to dummyAL_G1 and (B,C,..N)&lt;br /&gt;//        to dummyAL_G2 after counter&lt;br /&gt;       &lt;br /&gt;        //adding accuser to dummy Group One after counter&lt;br /&gt;        dummyGroupOne.add(Integer.toString(dummyCounter));&lt;br /&gt;        dummyGroupOne.add(accuserName);&lt;br /&gt;       &lt;br /&gt;        //adding accused to dummy Group OneOpposite after counter&lt;br /&gt;        dummyGroupOneOpposite.add(Integer.toString(dummyCounter));&lt;br /&gt;        for (int i=0; i&lt; numberAccused; i++) {&lt;br /&gt;            dummyGroupOneOpposite.add(accusedList[i]);&lt;br /&gt;        }&lt;br /&gt;        dummyCounter++;&lt;br /&gt;       &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-6884871210855901845?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/6884871210855901845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=6884871210855901845' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/6884871210855901845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/6884871210855901845'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/12/liar-liar-facebook-puzzle.html' title='Liar, Liar -- Facebook Puzzle'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2460691050807423015.post-3317295517861459369</id><published>2009-12-06T20:25:00.000-08:00</published><updated>2009-12-06T20:33:46.242-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='puzzle'/><title type='text'>Puzzles in Facebook</title><content type='html'>I came across &lt;a href="http://www.facebook.com/careers/puzzles.php"&gt;this page&lt;/a&gt; on Facebook's site. The page provides different puzzles with increasing level of complexity. Each puzzle requires both algorithmic as well as programming experience.&lt;br /&gt;&lt;br /&gt;Planning to solve these to get me back in my programming groove. Over this weekend I was able to solve 2 puzzles with a "snack" level of difficulty completely. Have the algorithm worked out for a third and need to code it.&lt;br /&gt;&lt;br /&gt;Now I plan to put the code up on the blog.  I also plan to take these as examples to post on Google's app-engine and also address scalability by leveraging concepts such as MapReduce, BigTable.  But all this planned for the future. Let us see how much I can get done in the "infinite" amount of free time that I have.&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-3317295517861459369?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/3317295517861459369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=3317295517861459369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/3317295517861459369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/3317295517861459369'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/12/puzzles-in-facebook.html' title='Puzzles in Facebook'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-8258593534720870032</id><published>2009-11-27T09:58:00.000-08:00</published><updated>2009-11-27T10:07:30.582-08:00</updated><title type='text'>Workforce telepathy</title><content type='html'>Nice to see some interest in how to enable a workforce to be more efficient; GigaOm has an article on a stealth startup in this area &lt;a href="http://gigaom.com/2009/11/24/asana/"&gt;Asana&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;To quote&lt;br /&gt;&lt;blockquote&gt;While intentionally vague about how the Asana software will work, the two are very clear as to what they want it to do: help people collaborate and better manage their time in an office (and eventually home) environment, where there are a lot of tasks and too much information coming at workers. Put another way, they want it to enable everyone on a team to read each other’s minds and act accordingly.&lt;/blockquote&gt;&lt;blockquote&gt;From an email attributed to Rosenstein:  --And still it felt like not a day went by that there wasn’t some miscommunication or misunderstanding that slowed down the project just a little, a death by a thousand cuts. You see it in every organization. One person will think that X is the most important thing they could be working on, but if they’d talked to their manager they would have gotten a different answer, and their teammates might think it was a third thing. These are all problems of information transparency. This problem has only gotten worse with the explosion of information that knowledge workers need to manage, often coming at them from a variety of tools and inboxes, none of which work together.&lt;br /&gt;&lt;br /&gt;Both Rosenstein and Moskovitz (a Facebook co-founder) admit this is a hard problem, which is why they’ve started small with a five-person team (one’s an admin) and lots of brand-name Silicon Valley advisers. The most recent funding, which comes on top of $1.2 million raised from angels including Facebook investor Peter Thiel, super angel Ron Conway, Lotus developer Mitch Kapor and Napster founder Sean Parker, could help the company hire more people to build out this magical software. But Asana doesn’t plan on hiring too many people.&lt;br /&gt;&lt;br /&gt;While the founders assure me that Asana’s product is completely different from anything on the market today, it comes across as mishmash of Yammer, Basecamp and Google Wave.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-8258593534720870032?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/8258593534720870032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=8258593534720870032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/8258593534720870032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/8258593534720870032'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/11/workforce-telepathy.html' title='Workforce telepathy'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-554954765166280456</id><published>2009-11-07T10:40:00.001-08:00</published><updated>2009-11-07T10:53:08.610-08:00</updated><title type='text'>Commoditization of cellular networks</title><content type='html'>We all have heard about how the wireless providers do not their networks to be dumb pipes. But developments lately seem to be moving towards making the cellular networks as dumb pipes. &lt;a href="http://www.forbes.com/forbes/2009/1116/technology-mobile-4G-telephony-metropcs_2.html"&gt;Interesting article in Forbes&lt;/a&gt; where the author points out how this is happening with cooperation of small operators such as MetroPCS.&lt;br /&gt;&lt;br /&gt;and this might be better for the consumers.  Of course, network providers can also provide services on such dumb networks and if these services are compelling, they can still make money.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;A decade ago there were three phone businesses: local, long distance and cellular. The first two have already collapsed, done in by advancing Internet and cellular technology and the cutthroat competition they unleashed. Americans paid $110 billion annually for long-distance phone calls nine years ago. It's now down to $55 billion and still shrinking. Local phone companies took in $126 billion at its peak eight years ago; that sum has fallen to $86 billion and is dropping fast.&lt;br /&gt;&lt;br /&gt;To date the cellular calling industry has been immune from the commoditization infecting the rest of the phone business. Today's Big Four carry more phone calls than ever (almost 2 trillion minutes last year) and took in more money doing it than ever before ($105 billion). Collectively they control 90% of the U.S. market, and this cozy oligopoly hasn't succumbed to ruinous price wars--yet. Over the past three years, for instance, the four giants hiked the price of single text messages from 10 cents to 15 cents, and then to 20 cents, despite the lack of any plausible link to their underlying costs.&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;When Linquist looks at that sort of pricing he sees not strength but weakness. Modern cell phones can do thousands of things, from downloading TV shows to finding the nearest Korean restaurant. Nevertheless, the cellular industry still makes almost all its money charging for just two applications: making phone calls ($116 billion) and sending text messages (roughly $12 billion, the carriers won't give exact figures). Everything else is considered generic "data." All of those thousands of other uses, many of which put much greater strain on the network than calling or texting, bring in the remaining $20 billion in revenue.&lt;br /&gt;&lt;br /&gt;Apple first loosened the industry's hold two years ago when it persuaded AT&amp;amp;T to let &lt;leo_highlight style="border-bottom: 2px solid rgb(255, 255, 150); background: transparent none repeat scroll 0% 0%; cursor: pointer; display: inline; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" id="leoHighlights_Underline_0" onclick="leoHighlightsHandleClick('leoHighlights_Underline_0')" onmouseover="leoHighlightsHandleMouseOver('leoHighlights_Underline_0')" onmouseout="leoHighlightsHandleMouseOut('leoHighlights_Underline_0')" leohighlights_keywords="iphone" leohighlights_url="http%3A//thebrowserhighlighter.com/leonardo/highlights/keywords?keywords%3Diphone"&gt;iPhone&lt;/leo_highlight&gt; owners download all sorts of software enhancements. AT&amp;amp;T consented, but didn't give up full control, requiring the software be screened before it went on sale. It banned applications that let customers make phone calls using their cellular Internet connection, and for an obvious reason: In both the local and long distance phone markets, customers' ability to route calls over the Internet helped new competitors savage prices.'&lt;br /&gt;&lt;br /&gt;In October AT&amp;amp;T caved in to consumer and political pressure and lifted its blockade of Internet calling software. The market chopped 2% off AT&amp;amp;T shares the next day, but Ma Bell's competitors followed suit anyway. Verizon announced it will release new phones that its subscribers will be able to customize in almost any way they please. Vonage, which specializes in shifting calls from traditional home phones to the Internet, unveiled similar software for the cellular world that can run on a BlackBerry.&lt;br /&gt;&lt;/blockquote&gt;and a few graphs in the article are also good. one of the graph shows how the average number of mins spent by a subscriber has gone up as the cost of each minute has come down although now it is reaching a plateau arguing for other services.  The other graph shows how the revenue from  local and long distance has come down over time.  Cellular revenue is at an all time high now but for how long?&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="file:///C:/DOCUME%7E1/fanjum/LOCALS%7E1/Temp/moz-screenshot.jpg" alt="" /&gt;&lt;img src="file:///C:/DOCUME%7E1/fanjum/LOCALS%7E1/Temp/moz-screenshot-1.jpg" alt="" /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-554954765166280456?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/554954765166280456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=554954765166280456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/554954765166280456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/554954765166280456'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/11/commoditization-of-cellular-networks.html' title='Commoditization of cellular networks'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-8214818557956525637</id><published>2009-10-30T19:41:00.000-07:00</published><updated>2009-10-30T20:01:20.063-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software tools'/><category scheme='http://www.blogger.com/atom/ns#' term='crucible'/><category scheme='http://www.blogger.com/atom/ns#' term='Teamcity'/><category scheme='http://www.blogger.com/atom/ns#' term='Clover'/><title type='text'>Software build tools</title><content type='html'>A tool that i want to explore is &lt;a href="http://www.jetbrains.com/teamcity/index.html"&gt;TeamCity&lt;/a&gt; -- a tool to enable continuous integration.  A professional edition is available free of charge.&lt;br /&gt;&lt;br /&gt;A tool for the purpose of code review is &lt;a href="http://smartbear.com/index.php"&gt;CodeCollaborator&lt;/a&gt; -- a tool for peer code review.  another similar tool is &lt;a href="http://www.atlassian.com/software/crucible/"&gt;Crucible&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Of course code coverage to be verified using &lt;a href="http://www.atlassian.com/software/clover/"&gt;Clover&lt;/a&gt;.&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-8214818557956525637?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/8214818557956525637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=8214818557956525637' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/8214818557956525637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/8214818557956525637'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/10/software-build-tools.html' title='Software build tools'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-5922623048501090289</id><published>2009-10-27T06:33:00.000-07:00</published><updated>2009-10-27T06:37:49.694-07:00</updated><title type='text'>QA automation tools</title><content type='html'>Long time since I posted; have been busy with the launch of the platform that will support the Personal TV devices. This is a new device to watch live mobile TV launched by FLO TV. The platform launch happened on 9/9/9-- an easy to remember date.&lt;br /&gt;&lt;br /&gt;Anyhow digressing from the main topic of this article.  Here I wanted to comment on some of the automation tools available for QA testing. The ones i have in mind are Selenium, DeviceAnyWhere, JUnit and JMeter.  I plan to comment briefly on each of these in future.&lt;br /&gt;&lt;br /&gt;Today, I got to go since I need to put the project plan together for the next release of the Project Plan together. Several ongoing discussions about the scope and design of features.&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-5922623048501090289?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/5922623048501090289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=5922623048501090289' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/5922623048501090289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/5922623048501090289'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/10/qa-automation-tools.html' title='QA automation tools'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-7508378430455981728</id><published>2009-08-16T12:37:00.000-07:00</published><updated>2009-08-16T12:52:49.458-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Posterous'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>Future of blogging</title><content type='html'>An interesting article that I read at GigaOm (no link -- too lazy now). This is about how to make blogging more social. Why is it that I have to log in to the blogger network to post articles? Why can i not do it more seamlessly? And why is it that comments can only appear after the article? Why can the comments not be jived into the article depending on the quality of the comment?&lt;br /&gt;&lt;br /&gt;Several challenges in making the above happen. A first step though is &lt;a href="http://posterous.com/"&gt;posterous&lt;/a&gt;. As I understand it it makes blogging seamless whereby i could post anything (photos, videos, files etc) to an email address.  and they set up a page with the content and reply back. Got to check it out.  This might address one small part of the first wish (post seamlessly) in the paragraph above.&lt;br /&gt;&lt;br /&gt; So went ahead and tried it. A problem though is that I cannot choose the URL that I want. they do provide a URL yourname.posterous but they seem to append random characters. Something that I do not like and not only that. Makes it difficult for me to remember the web site corresponding to me.  Would have liked a choice here if "myname.posterous" is taken.&lt;br /&gt;&lt;br /&gt;Of course, to get over the above problem, i got to log in and sign in. Hmm, they should have made this clear up front. &lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-7508378430455981728?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/7508378430455981728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=7508378430455981728' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/7508378430455981728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/7508378430455981728'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/08/future-of-blogging.html' title='Future of blogging'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-8212639709383266240</id><published>2009-08-16T11:32:00.000-07:00</published><updated>2009-08-16T11:35:39.446-07:00</updated><title type='text'>Future of Work:</title><content type='html'>The title here is the same title in a blog post &lt;a href="http://webworkerdaily.com/2009/08/13/the-future-of-work-noded/#more-17642"&gt;on the gigaom network&lt;/a&gt;. This post talks about the formation of groups to execute projects in the future. And what is interesting is how the group dynamics would help the execution. We need a way to help determine the group dynamics before a group is far down the road; in other words, a tool to help people determine if they can work easily with each other and avoid people who do not share chemistry.&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-8212639709383266240?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/8212639709383266240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=8212639709383266240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/8212639709383266240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/8212639709383266240'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/08/future-of-work.html' title='Future of Work:'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-498433432594708923</id><published>2009-07-19T17:46:00.001-07:00</published><updated>2009-07-19T17:49:52.175-07:00</updated><title type='text'>Cargo cult management</title><content type='html'>Recently learned of a nice way to describe some of the things we see happening at work; people carrying out actions hoping that these will lead to desired outcomes; confusing the necessary  condition for a sufficient condition.  The term for this "cargo cult management. Search on wikipedia for details.&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-498433432594708923?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/498433432594708923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=498433432594708923' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/498433432594708923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/498433432594708923'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/07/cargo-cult-management.html' title='Cargo cult management'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-5778518322295172553</id><published>2009-07-19T17:17:00.000-07:00</published><updated>2009-07-19T17:22:05.985-07:00</updated><title type='text'>Innovating through recession</title><content type='html'>Recently had a chance to attend a talk by AndrewR on this topic. A white paper from the same author&lt;a href="http://www.scribd.com/doc/7450921/Innovating-Through-Recession-Andrew-Razeghi-Kellogg-School-of-Management"&gt; is here&lt;/a&gt;.&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-5778518322295172553?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/5778518322295172553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=5778518322295172553' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/5778518322295172553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/5778518322295172553'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/07/innovating-through-recession.html' title='Innovating through recession'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-6075088388547932204</id><published>2009-07-19T17:08:00.000-07:00</published><updated>2009-07-19T17:11:54.908-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='todo'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>OpenSocial</title><content type='html'>Need to investigate OpenSocial; the &lt;a href="http://code.google.com/apis/opensocial/articles/tutorial/tutorial-0.8.html"&gt;link here&lt;/a&gt; seems to be a good place to start.  On my todo list.&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-6075088388547932204?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/6075088388547932204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=6075088388547932204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/6075088388547932204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/6075088388547932204'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/07/opensocial.html' title='OpenSocial'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-8071045669533619088</id><published>2009-07-19T16:48:00.000-07:00</published><updated>2009-07-19T17:15:17.473-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notepad++'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Editor for Python scripts</title><content type='html'>Recently have started on Python; using this to do some analysis of the integration and system testing process.  A problem that I see here though is with all the indentation rules that Python has especially with respect to the various looping and conditional constructs.&lt;br /&gt;&lt;br /&gt;By the way I was using Notepad for writing the scripts; have now downloaded &lt;a href="http://notepad-plus.sourceforge.net/uk/site.htm"&gt;Notepad++&lt;/a&gt;. Getting used to this new editor.  Why did i select this; well, there were several editors and I just picked the one based on the features.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-8071045669533619088?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/8071045669533619088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=8071045669533619088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/8071045669533619088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/8071045669533619088'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/07/editor-for-python-scripts.html' title='Editor for Python scripts'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-8384091739074713800</id><published>2009-07-19T16:20:00.000-07:00</published><updated>2009-07-19T16:36:15.673-07:00</updated><title type='text'>Bad behavior at work</title><content type='html'>One of the things I have been thinking of is the cost of incompatibility at the workplace.&lt;br /&gt;&lt;br /&gt;Came across this book "&lt;b&gt;&lt;i&gt;The Cost of Bad Behavior: How Incivility is Damaging Your Business and What to Do About It&lt;/i&gt; By Christine Pearson and Christine Porath" . &lt;/b&gt;Maybe something to read at some point in the future.  I wonder what the authors point of view on this is.&lt;br /&gt;&lt;br /&gt;The following is a brief review of the book &lt;a href="http://money.cnn.com/galleries/2009/smallbusiness/0907/gallery.july_biz_books.fsb/3.html"&gt;from cnn&lt;/a&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;p&gt;The Talmud says that embarrassing people in public is like spilling their blood, yet it's one of the many forms of emotional homicide that are common in the workplace. &lt;/p&gt;&lt;p&gt;The authors want the killing to stop. They make an earnest case that incivility on the job can wound your company by demoralizing workers and driving off customers. The book even offers a worksheet to help you put a dollar value on the problem. &lt;/p&gt;Don't bother. Workplace nastiness can't do anyone much good, including business owners. Take Pearson and Porath's sensible advice for heading it off and rooting it out. Doing so will make you richer or, at the very least, let you sleep the sleep of the just.&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-8384091739074713800?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/8384091739074713800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=8384091739074713800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/8384091739074713800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/8384091739074713800'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/07/bad-behavior-at-work.html' title='Bad behavior at work'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-5048290382587453884</id><published>2009-07-10T16:01:00.000-07:00</published><updated>2009-07-10T16:01:01.073-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LinkedIn'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>Architecture for LinkedIn</title><content type='html'>Was recently wondering about the architecture of LinkedIn. I guess the current atmosphere with a nearly 10% unemployment rate made me think about it.&lt;br /&gt;&lt;br /&gt;More details of the architecture are described &lt;a href="http://hurvitz.org/blog/2008/06/linkedin-architecture"&gt;in this blog&lt;/a&gt;. Links to two presentations also.  Thinking of putting my programming skills to the test by creating something similar.&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-5048290382587453884?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/5048290382587453884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=5048290382587453884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/5048290382587453884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/5048290382587453884'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/07/architecture-for-linkedin.html' title='Architecture for LinkedIn'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-1936917687630296267</id><published>2009-07-05T15:46:00.000-07:00</published><updated>2009-07-05T15:52:19.687-07:00</updated><title type='text'>Open source resources</title><content type='html'>A nice article on &lt;a href="http://ostatic.com/blog/over-40-free-must-have-open-source-resources"&gt;open source resources&lt;/a&gt;.&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-1936917687630296267?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/1936917687630296267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=1936917687630296267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/1936917687630296267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/1936917687630296267'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/07/open-source-resources.html' title='Open source resources'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-1077850403988193347</id><published>2009-07-05T15:06:00.001-07:00</published><updated>2009-07-05T15:24:37.941-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tipping Point'/><category scheme='http://www.blogger.com/atom/ns#' term='Sticky ideas'/><title type='text'>Sticky ideas</title><content type='html'>Communication is a very important tool of a successful systems engineer.  This is because a systems engineer has to be able to convey his/her ideas to several teams (Prod Mgt, Developers, testers, marketing etc).&lt;br /&gt;&lt;br /&gt;Along these lines, recently read a cool book on effective communications.  The gist of the book is very nicely &lt;a href="http://sourcesofinsight.com/2008/05/22/six-principles-of-sticky-ideas/"&gt;summarized here&lt;/a&gt;.  By the way, the book is &lt;a href="http://www.amazon.com/gp/product/1400064287?ie=UTF8&amp;amp;tag=thbosh-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1400064287"&gt;available here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The "stickiness factor" is one of the three rule of epidemics described in &lt;a href="http://en.wikipedia.org/wiki/The_Tipping_Point"&gt;The Tipping Point&lt;/a&gt;.  The other two being "The law of the few" and "The power of context".&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-1077850403988193347?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/1077850403988193347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=1077850403988193347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/1077850403988193347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/1077850403988193347'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/07/communication-is-very-important-tool-of.html' title='Sticky ideas'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-4972774670932777615</id><published>2009-07-05T12:44:00.000-07:00</published><updated>2009-07-19T17:37:44.357-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='password'/><title type='text'>MySQL password reset</title><content type='html'>Had a problem; I wanted to write some Java code leveraging the MySQL installation.  But before I did that I just wanted to use MySQL directly.&lt;br /&gt;&lt;br /&gt;With this in mind, I tried to fire up MySQL command line client but viola I had forgotten the password. Try as I might, I could not get the right password.&lt;br /&gt;&lt;br /&gt;Time to do something. Search the "internets" to figure out how to reset the password. It was not as difficult as I thought it might be. Details &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html#resetting-permissions-windows"&gt;given here&lt;/a&gt; made it a cinch.&lt;br /&gt;&lt;br /&gt;And so now I have a new password which is written down and not just saved in my brain.&lt;br /&gt;&lt;br /&gt;By the way, there seems to be good documentation on MySQL &lt;a href="http://dev.mysql.com/doc/"&gt;here&lt;/a&gt;. Also some good hints about database backups &lt;a href="http://dev.mysql.com/tech-resources/articles/mysql_intro.html"&gt;here&lt;/a&gt;; have to check these out.&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-4972774670932777615?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/4972774670932777615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=4972774670932777615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/4972774670932777615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/4972774670932777615'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/07/mysql-password-reset.html' title='MySQL password reset'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-3086051180824493619</id><published>2009-07-03T13:44:00.000-07:00</published><updated>2009-07-05T14:18:02.774-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wubi'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Linux on a Windows machine</title><content type='html'>Recently had a chance to install Wubi. It makes for such  easy installation of ubuntu on a Windows machine.&lt;br /&gt;&lt;br /&gt;From Wikipedia "&lt;b&gt;Wubi&lt;/b&gt; (&lt;b&gt;W&lt;/b&gt;indows-based &lt;b&gt;Ub&lt;/b&gt;untu &lt;b&gt;I&lt;/b&gt;nstaller) is an official &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Windows" title="Microsoft Windows"&gt;Windows&lt;/a&gt;-based &lt;a href="http://en.wikipedia.org/wiki/Free_software" title="Free software"&gt;free software&lt;/a&gt; installer for &lt;a href="http://en.wikipedia.org/wiki/Ubuntu_%28operating_system%29" title="Ubuntu (operating system)" class="mw-redirect"&gt;Ubuntu&lt;/a&gt;."&lt;br /&gt;&lt;br /&gt;A problem though is that I need to reboot the machine to access Ubuntu.  And that means all the windows I have open need to be shut down.  Virtualization is the answer I guess.&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-3086051180824493619?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/3086051180824493619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=3086051180824493619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/3086051180824493619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/3086051180824493619'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/07/linux-on-windows-machine.html' title='Linux on a Windows machine'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-6700584998945220471</id><published>2009-06-28T12:25:00.000-07:00</published><updated>2009-07-05T12:47:44.090-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CRs'/><category scheme='http://www.blogger.com/atom/ns#' term='Bugzilla'/><category scheme='http://www.blogger.com/atom/ns#' term='Bugs'/><title type='text'>Bugzilla installation</title><content type='html'>I have lately been working on putting together the various components that are used in the different phases of a software life cycle. Why do this?&lt;br /&gt;&lt;br /&gt;This was spurred by my current project where I am leading a team working on implementing the platform needed for realizing mobile TV. This based on Qualcomm's MediaFlo technology.  The problems with some of the components used here was the catalyst.&lt;br /&gt;&lt;br /&gt;We were using the Clearquest tool to log software bugs but there were several issues with that. That spurred my decision to install and deploy Bugzilla. Details of this installation are given for a Windows XP machine &lt;a href="https://wiki.mozilla.org/Bugzilla:Win32Install"&gt;here&lt;/a&gt;. As part of this I also downloaded MySQL, Perl and Apache on my machine.  A great description.&lt;br /&gt;&lt;br /&gt;Good use of a Sunday.&lt;br /&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-6700584998945220471?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/6700584998945220471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=6700584998945220471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/6700584998945220471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/6700584998945220471'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/07/bugzilla-installation.html' title='Bugzilla installation'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-502391807021266955</id><published>2009-01-07T02:59:00.000-08:00</published><updated>2009-01-07T03:01:32.393-08:00</updated><title type='text'>Emergency</title><content type='html'>Have a personal emergency and hence have not been able to post for a long time. Difficult times and hope to emerge stronger from this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-502391807021266955?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/502391807021266955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=502391807021266955' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/502391807021266955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/502391807021266955'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2009/01/emergency.html' title='Emergency'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-1735746737347202058</id><published>2008-12-16T18:32:00.000-08:00</published><updated>2008-12-16T18:37:14.551-08:00</updated><title type='text'>Carnival of Mobilists--154</title><content type='html'>Have made it to the Carnival of the mobilists 154. This is currently on at &lt;a href="http://weblog.cenriqueortiz.com/carnivalofthemobilists/2008/12/15/carnival-of-the-mobilists-154/"&gt;About Mobility&lt;/a&gt;. Several wonderful postings in this carnival.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-1735746737347202058?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/1735746737347202058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=1735746737347202058' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/1735746737347202058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/1735746737347202058'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2008/12/carnival-of-mobilists-154.html' title='Carnival of Mobilists--154'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-3725300998459272867</id><published>2008-12-12T16:28:00.000-08:00</published><updated>2008-12-14T12:15:01.840-08:00</updated><title type='text'>Seven Mass Media --A framework</title><content type='html'>&lt;div style="text-align: justify;"&gt;I like frameworks, frameworks that help you understand bigger issues. And I think the concept of seven mass media that Tomi Ahonen has been &lt;a href="http://www.communities-dominate.blogs.com/7thmassmedia/2008/09/why-is-mobile-c.html"&gt;explaining&lt;/a&gt; can be considered as a framework.  Why? Because this concept nay framework I believe can be used to understand many of the developments in this area of mass media. In this blog I attempt to explain this in some detail.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-style: italic;"&gt;Seven Mass Media&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;I start by considering the seven mass media as explained by Tomi Ahonen.  These are print, recordings, cinema, radio, TV, internet and mobile.  Details of these are given &lt;a href="http://www.communities-dominate.blogs.com/7thmassmedia/2008/09/why-is-mobile-c.html"&gt;in this post&lt;/a&gt; for those new to the concept. By the way, in this blog we do not consider enhancements on these media such as the DVR, cassette recorder etc. That would be the topic of a separate post.&lt;br /&gt;&lt;br /&gt;These mass media can be studied along several dimensions in order to understand the developments in this space.  In this post though I consider only the dimensions of content creation, content distribution, content discovery, content charging, content consumption, content modification and user interaction. The objective here is to understand some of the current developments in this space and possibly predict the characteristics of the next version of mass media.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Content creation &lt;/span&gt;&lt;br /&gt;This dimension considers the way content is created. The content creation has not changed much for all these media. In all cases, a human being is the originator of the content.  The transcoding of the content to enable the distribution though has changed drastically. Note that we use the term transcoding here loosely to refer to the translation of content from a human mind to a technical medium such as paper, analog, digital media as appropriate.&lt;br /&gt;&lt;br /&gt;For the print media, the created content is transcoded onto a paper. This process itself is not easy and requires access to printing presses etc.   Some of the current gadgets such as laser printers have made this process easier. The second media namely recording results in transcoding of media on to a "recording medium".  Not very easy in the early days but now very easy considering a cassette player and the corresponding tape.  So what we see here over a period of time are developments which make the transcoding process easier while the medium is still the same.&lt;br /&gt;&lt;br /&gt;On the other extreme consider the internet and the mobile. Content transcoding is definitely easy in the internet (you only need a device such as a desktop computer which can connect to the internet) but much more easier using the mobile. All that you need to do with a mobile is aim and shoot and viola the content is created.  A creative human can "create" a great picture and then transcode it easily using the camera, so easy that probably my grandmother can do it with some practice.&lt;br /&gt;&lt;br /&gt;But where will we go from here; can we think of a mechanism where a human does not have to be involved in content creation and transcoding at all? Maybe in the long run but for the immediate future we will possibly see more easier ways of transcoding possibly using voice commands. So I could take my mobile and order the camera on the mobile to capture what I am seeing or order the recorder on the camera to record my "off-key" singing.  Some of this such as voice activated dialing is already possible provided my accent is right. At this time though I need to "train" myself to get the right accent.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Content distribution&lt;/span&gt;&lt;br /&gt;This characteristic is about how the content is distributed from the creators of the content using the transcoded media to the consumers of the content.&lt;br /&gt;&lt;br /&gt;For print media, this involves distributing the books/papers etc.  This needs a physical infrastructure (press/printers to wholesalers to retailers) and a process for the distribution.  Recording and cinema has similar requirements though it can be argued that the physical size of the distributed media itself makes it easier to distribute "cinema medium" as compared to "print medium". Note also that the distribution infrastructure itself does not require any special considerations. I can open a warehouse or a shop and become part of the infrastructure.  Or I can open a cinema hall and become part of the distribution infrastructure.  Some local licensing rules might apply.&lt;br /&gt;&lt;br /&gt;Radio and TV use the TV/radio station transmitters and the electromagnetic waves to distribute content.  Cable connections can also be used to distribute TV. Both these cases are typically characterized by high fixed initial costs and possibly a lower recurring operating cost. (I guess the same can be said for the first three mass media)  Additionally, special organizations only (those with licenses to spectrum and which can set up the transmitters) can participate in this distribution. These licenses are more difficult to obtain than in case of the licenses for distributing the first three mass media.&lt;br /&gt;&lt;br /&gt;Internet and mobile make content distribution very easy. Additionally, any organization or person can easily participate in the distribution (without any special license) such as by setting up a web server where people submit content.   The cellular link for mobiles that makes long range connection (as opposed to short range for WiFi) though cannot be set up except by special organizations (called operators) who have licenses to use the spectrum needed for this.&lt;br /&gt;&lt;br /&gt;In the future though we might see all aspects of the distribution being open for all.  Thus we should expect unlicensed communication links with long ranges though I am not very clear about how this might happen from the technology aspect.  Still the concepts of real time spectrum auctions, white spaces etc seems to tie in here.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Content discovery&lt;/span&gt;&lt;br /&gt;This dimension is concerned with the way that content is discovered by the users of the content.&lt;br /&gt;&lt;br /&gt;With initial media such as print, recordings and cinema discovery was easier because of the limited (when compared to internet scale) quantity of content.  Discovery was also facilitated via recommendations from the social network.   Concept of search was limited to searching the indexing cards in a library.   Of course, as gadgets to make transcoding easier started appearing we started seeing a rapid increase in quantity of content. We have similar issues in case of the Radio and TV media.&lt;br /&gt;&lt;br /&gt;Internet and mobile is accompanied by a avalanche of content since it is very easy to create content. Therefore, this exacerbates the problem of discovery.  Search engines, recommendation engines etc  are all ways to address this problem.&lt;br /&gt;&lt;br /&gt;Yet, we are some ways off from solving this problem completely.  In the ideal case I would want  to know of all content and only that content that is according to my tastes.  Throw in audio/video content and you can see the amount of work that needs to be done to solve this problem.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Content charging&lt;/span&gt;&lt;br /&gt;This dimension looks at the ways in which the content creators are paid by the content users.  For the earlier media, we typically we have the content creators selling their product to middlemen who then sell it to the end users. We could have multiple tiers of middlemen.&lt;br /&gt;&lt;br /&gt;Of course, the role of middlemen has diminished or more precisely the dependency of content creators on middlemen diminishes as we go to radio, tv, internet and mobile.  With tv/radio, a content creator can purchase tv/radio time;  this is much more easier with internet/mobile. I just need an account (typically free) at a web server to start posting my content.&lt;br /&gt;&lt;br /&gt;In all these cases, the charging mechanisms have continually improved in terms of the level of difficulty for both the users and content creators.  While earlier it was cash and cheques, currently credit cards, paypal, eyeballs, operator billing etc make this much easier for me as a content creator to get paid.&lt;br /&gt;&lt;br /&gt;Where do we go from here? i guess we need mechanisms to root out wrongful charging but otherwise the basic charging mechanisms themselves seem to be fully developed. Efficient mechanisms for microcharging seems to be something that we could desire for.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Content consumption&lt;/span&gt;&lt;br /&gt;Here I look at the issues associated with the consumption of content after it has been discovered and purchased by the users.&lt;br /&gt;&lt;br /&gt;There was no requirement for a device with the print medium but then for all the other media we need special devices to consume content. For some such as cinema the devices (projector, cinema room) are very costly. The cost of the devices went down from cinema to radio, up again for TV and then down for internet devices and mobile devices. Of course, this has also resulted in participation of more people which increases the reach of the mass medium.&lt;br /&gt;&lt;br /&gt;Where can we go from here with respect to this dimension? In the long term probably towards a world without requirement for any special devices to consume content; any wall, any surface could be used to project and read/listen. In the short term though probably towards a pervasive all in one device much more affordable (and easier to use) than current mobile devices.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Content modification&lt;/span&gt;&lt;br /&gt;When considering this dimension, I want to focus on the level of difficulty for the content owners to modify their content after it has been accessed by the content purchasers.&lt;br /&gt;&lt;br /&gt;For print, recordings and cinema it is not possible to modify content once the genie is out of the bottle (content has been distributed).  In a way this is also true for radio/TV.  Although you can retransmit the modified content for radio/TV, it can be argued that this is similar to redistributing modified content for print/recording/cinema.  Thus modification of content is possible though not easy for these media.&lt;br /&gt;&lt;br /&gt;For internet and mobile though, though modification of content is very easy.  The content creator will have to modify the relevant files.  Notifying users of changed content is also easy if the users have registered for it.  Of course, this would require the users (content consumers) to re-initiate connection and consume content again.&lt;br /&gt;&lt;br /&gt;Where do we go from here in this dimension? Probably you the reader can help me here.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;User participation&lt;/span&gt;&lt;br /&gt;This last characteristic that we focus on in this blog is concerned with the participation and interaction of users with the content creators and with others who might be interested in the content.  The types of users who can consume the content is also considered here.&lt;br /&gt;&lt;br /&gt;Initial media such as print, recording,  cinema, radio and TV did not allow for user participation easily. In these cases the users would have to write letters or call the content creators/content distributors. Yet, this communication was not seamless.  With internet and mobiles we now have more efficient and real time two way communication between the consumers and the creators/distributors.  This communication is also much more personal when considering mobile devices.&lt;br /&gt;&lt;br /&gt;Are we at the pinnacle of achievement with respect to this dimension? I don't think so.  Going forward I believe we will have a conversation rather than just a two way communication.  This conversation would be used to personalize content delivered to me.  This personalization would require knowledge of factors such as location, context, preferences etc.&lt;br /&gt;&lt;br /&gt;Also in terms of users who could have purchased the content, the first media required people who could read.  Recording, cinema, radio and TV required nothing more than people who could understand the language. Internet requires that people have basic computer and possibly reading skills.  Mobiles require mobile skills which are much easier than computer skills and yet not something that is easy for all.  The touchscreen on mobiles though makes this easier.  Still it is not completely user friendly.&lt;br /&gt;&lt;br /&gt;For the future the participation requirements have to go down such as were needed for radio or TV.  I need to turn on my device (or better still wave my hands or speak the commands) and select content from the various channels; do not bother me about typing urls, clicking hyperlinks and all that.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Other&lt;/span&gt;&lt;br /&gt;There are several other dimensions also that can be considered such as ability for the medium to allow for time shifting, place shifting, ability for the medium to provide secure content and also to protect my information, purchasing models, content lifecycle management etc.  I hope to look at some of these in future posts.&lt;br /&gt;&lt;br /&gt;Have to point out here that I have tried to simplify the various dimensions; have also ignored the impact of one dimension on another.  Hope to look at all this as part of future posts.&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/2460691050807423015-3725300998459272867?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/3725300998459272867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=3725300998459272867' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/3725300998459272867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/3725300998459272867'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2008/12/seven-mass-media-framework.html' title='Seven Mass Media --A framework'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-5394845168467519870</id><published>2008-12-07T12:19:00.000-08:00</published><updated>2008-12-09T02:40:45.835-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google App'/><title type='text'>Google App Engine</title><content type='html'>Have been checking out details of the Google App Engine &lt;a href="http://code.google.com/appengine/articles/cf1-text.html"&gt;given here.&lt;/a&gt; So what is this idea?&lt;br /&gt;&lt;br /&gt;It is about simplifying all the processes associated with deploying applications. Once a developer finishes coding an application, the developer currently has to deploy and maintain it. If necessary, the problem of scalability also needs to be addressed. The LAMP stack could be used to minimize the costs involved but the costs will not be zero.&lt;br /&gt;&lt;br /&gt;With the Google App Engine, once a developer finishes coding a web application, the developer can just deploy it on the App Engine. No costs involved. Nothing to deploy and nothing to maintain.  And the Google infrastructure will ensure that your system will automatically scale when needed.&lt;br /&gt;&lt;br /&gt;Of course, this is only for web apps and this also assumes you hand over your code to Google to deploy on the web engine. This means that large enterprises might not be able to go this route since they might not want to hand over their code to Google. The resulting cost savings might not be enough to justify this.&lt;br /&gt;&lt;br /&gt;Of course, Google could provide this same service to enterprises but in this case the proper NDAs (non-disclosure agreements) and SLAs (service level agreements) need to be signed.  If done, it can make the life of many enterprises easier while also providing another revenue source for Google. Heck, the operations team in many enterprises would become unnecessary.&lt;br /&gt;&lt;br /&gt;This might still happen; what we see now could just be the first step towards generating revenue from a enterprise focused app engine. Hmm, but is that not what cloud computing is supposed to be about?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-5394845168467519870?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/5394845168467519870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=5394845168467519870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/5394845168467519870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/5394845168467519870'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2008/12/google-app-engine.html' title='Google App Engine'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</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-2460691050807423015.post-2653866760524738023</id><published>2008-11-01T17:02:00.000-07:00</published><updated>2008-11-01T17:43:48.964-07:00</updated><title type='text'>Purpose</title><content type='html'>The objective of this blog will be to take a systems view of companies with a major focus on technology companies although some non-technology companies will also be considered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2460691050807423015-2653866760524738023?l=sys-view.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sys-view.blogspot.com/feeds/2653866760524738023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2460691050807423015&amp;postID=2653866760524738023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/2653866760524738023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2460691050807423015/posts/default/2653866760524738023'/><link rel='alternate' type='text/html' href='http://sys-view.blogspot.com/2008/11/this-is-test.html' title='Purpose'/><author><name>fanjum</name><uri>http://www.blogger.com/profile/13052444924885209576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
