Wednesday, February 1, 2012

False arguments on Tithing

Pastors often mention Jesus affirmation of tithing to the Pharisees. However this overlooks a crucial fact - Jesus was under the law just like the Pharisees.
He observed the Sabbath, Passover and even at his baby dedication, sacrifices were offered.
In Acts 15, at the council at Jerusalem, it clearly says the law does not apply to us any more. This is also in Colossians 2:15 where the law was nailed to the cross. In Galatians, Paul is angry with the 'foolish' Galatians because they want to practise the law.
I have heard pastors and leaders preach things like: 'one must give at least 10%', 'give knowing that it is all God's', 'how much should God get for giving His life for me?'
Certainly it can be a personal principle but in churches today, it is closer to a command.Yet they overlook a simple fact - why wouldnt the Holy Spirit simply say through Paul in 2 Corinthians 9:6 and the other Bible authors in the other books, 'give at least the tenth of your income to your house church'? Yet, He didn't. So aren't today's leaders adding to God's Word things that are not there?

Saturday, October 15, 2011

Idea on security in Android.

Is it possible for software to automatically parse through a program that is about to be installed, and determine how it is using its resources, or its advertised permissions? Then it could, in simple English (or Hindi), describe to the user how the program will use the permission.

Sunday, July 24, 2011

Trouble using your eHome eh100 wireless router?

After ensuring that the cables are not mixed up, reset the router using a paper clip. The reset button is in a tiny, easy-to-miss hole at the right side on the back panel where the cables are. Keep your power to the router turned on when you reset it. Now from your computer, go to to bring up the router's admin panel (you are connected to it via an ethernet cable, right?).
The default username is admin, password is empty (nothing).
You will be logged into the admin console and will see buttons for wizards or to manually configure.
Run the internet wizard to assign a name and the passphrase key. For security, prefer WPA2.

D-link has abandoned the eHome router and it is hard to find information on the internet.

Sunday, October 31, 2010

titbits left out from the Android documentation

Excellent explanation by Dick Wall (from thread


This is a MIME type - MIME stands for Multimedia Internet Mail Extensions
and was created for email attachments to tell the receiving computer what
type of file was attached and give it a clue on how to deal with it. It has
since been adopted as a pretty well used standard for general typing of
files, e.g. it is common to see something like "audio/mp3" to indicate an
audio mp3 file.

There are generally two parts - a category (before the / ) and a specific
type (after the / ).

In this case, our category is an android cursor item - because this is
pretty specific, the vnd indicates that this is a "vendor" definition - i.e.
we defined it, and quite possibly other people don't agree with our
unilateral definition (although the IANA will register such things if asked
which makes it official - sort of...)

The means that this is a note type, for Google, and again
vendor defined

So, if your organization was and your item was a superthingy,
you might use: (the category is still an
android cursor item assuming you want to return it through a cursor...)

For more info on MIME, I can suggest the following links: (this one is a bit heavy, but contains
the actual RFCs that define the standards if you really want to know what
makes it tick - you don't need to read all this to get along with MIME types

2) In the line "
android:value="" />"...

The "" is just a string that
your manifest and your Java source code constants can agree on, that said
there is a convention in use here that should probably be adhered to in
order to avoid trouble.

In Java source code, source is organized into packages that look like:



The first two parts of the package usually correspond to an internet domain
name that the author owns or is associated with, so for example, Google owns, so many of our packages start with (note the reversal
- packages in Java source get more specific as they progress, so com being
the most general term is used first).

Going with the example, if you own that you could use


to put your source code in.

The actions follow this same convention, but tend to put an extra .action.
before the actual action name you want to use, so:

org.hepcats.bonanzanotes.action.EDIT_MY_STUFF might be something you used.
Alternatively it is not wrong to put android in there after hepcats as well
as a further categorization of what you are writing (as in "this is my
android code"), so you might use instead.

3) In the following lines, what do 'DEFAULT', 'ALTERNATIVE', and

These are convenience definitions provided for you by Android itself.
DEFAULT means that this action can be considered a default action for the
type of data specified - i.e. something requesting the default action for a
particular data item can get sent straight to this intent. It's like saying
"I know this one, let me handle it"

ALTERNATIVE means that this can act as one of the alternatives that the user
can select to handle a particular request or item. If there are several
alternatives, the user will (or may) be prompted as to which one to use.

SELECTED_ALTERNATIVE means that the action applies to something the user
currently has selected.

You can read a lot more about all this in the Intent class reference:

There is plenty of meaty documentation on this, and it should fill in any
gaps in my explanation.

Friday, July 9, 2010

Using gmail or Android marketplace without Data plan (T-mobile)

Just wanted to post this in case someone else finds it useful. Unfortunately, T-mobile reps incorrectly insist you cannot open the Android Marketplace without a data plan. Searching on the topic brings up lots of uncertain older posts

I bought a new HTC MyTouch Slide off ebay. I already have a Tmobile account but did not want the data plan. I connected to my home WIFI and was able to browse the internet. However when trying to go to
Android marketplace or login to gmail, it waits, "Signing in, need to connect with Google servers..." and then after 2 minutes says, "You dont have a network connection. .. your phone may not be provisioned
for data services. Please try again when connected to a mobile network, or connect to a WIFI network."

The solution was to go to Home, Menu, Settings and then disable the "Enable Always On Mobile Data".
Under Settings, 'Wireless and Networks' scroll to the bottom, 'Mobile Network settings' and uncheck "Enable Always On Mobile Data".

And it worked!

Thursday, July 1, 2010

How to duplicate a row of a database table, with foreign key dependencies

I was required to duplicate a row of a database table, with foreign key dependencies. It is not a trivial problem as the dependent rows of the foreign key tables have to be created, and then the values of these ids taken and the fields updated in the primary table. Of course, the dependent rows will likely also have foreign key fields so their dependent table rows have to be created first. This ripple effect can go on and on.

This is hard to do in sql and thinking about it, it would be easier to do using recursion in a programming language.


write a recursive method
NewId createRow() {
  for each dependent foreign key field {
   newId = dependent table.createRow()
   update foreign key field with newId

"for each dependent foreign key field": this list can be obtained using JDBC.

Wednesday, June 30, 2010

Using Model-View-Controller differently - to isolate volatile parts of your application

Even if your application does not have a GUI, you can benefit from MVC.
I was trying to write automated tests using JUnit/Cactus and it quickly got unmanageable.
Each test case involved creating several business objects, filling each with lots of data, and then invoking on business services. Since there were different combinations of the data, for each test case, one had to create a new class. Ridiculous!
The solution was:
View (interacting with the outside)
This was not a GUI, but simply a JUnit class.
TestCases contains the test methods, and inherits from JUnit’s TestCase. It has a reference to the concrete data set and instantiates the specific data set. TestDataSet0, TestDataSet1…
It invokes on TestDataSet0 to retrieve the BusinessObjects object to perform its testcases.

Model (Volatile part)
Interface TestDataSet has getter methods
BusinessObjects getBOCombination1()
BusinessObjects getBOCombination2()…
Concrete class TestDataSet0,1,2… implements this interface.
It has a reference to class BusinessObjects.
The data can be filled from the database, or simply hardcoded.

Class BusinessObjects contains methods to populate each Business Object.
populateBO1(), populateBO2()

So each time there is a different combination of data, create a class TestDataSet_N - yes, it is another class but all it is concerned with is the hardcoding of data, or retrieving of that data combination from the database.

The advantage of this design is, it allows reuse of methods, isolates the hard-coded data (that keeps changing from case to case) and enables more rapid progress.

Monday, June 21, 2010

What Next Android?

Just my 2 cents. Google will do its own thing regardless of all the
developers hanging from the Android train - our financial wellbeing is not its concern.

It seems to me that Google is yet to figure out, "What Next?".
Someone on the newsgroups said that Android and Chrome were built because Google didn't want to be shut out from the advertising platforms like Nokia, iPhone. I think they correctly saw it as a futuristic platform and wanted control of mobile platforms, just like M$ did on PCs. So they built this thing called Android and now that they control it, are not quite sure how to profit from it. It is just another mobile operating system with an app store, like Palm, iPhone, Nokia.

Can you write an app on Android that couldn't have been written on the
other OS'es? Does a user with an Android phone have a better day than
those with no-name phones? Good Advertising seduces us to perceive in
a new light what is 'cool' and that acquiring it will also make us

Friday, November 20, 2009

Can we use a computer from Nature to attack the Traveling Salesman Problem?

The traveling salesman problem ( tries to find the shortest route covering all points in a plane.

If all points are on a circle, it seems that the shortest route passes from point to point in the order that they are on the circle. Of course, not following the curve, but the straight line between two adjacent cities on the curve.

So I wondered if a general solution would be to find the circle that is a best fit for all points, and then travel along the circle picking the next point to visit - from the previous one.

How about a system from Nature that can simultaneously compute this?

Have a circular coil of wire on a sheet of plastic. The diameter should be in the approximate range of the points. The points are represented by small powerful permanent magnets each with a electromagnetic coil and a bulb - or an ammeter to measure current. The magnets are positioned in a vessel of water, and in the same relative coordinates as in the real world problem.

The sheet of plastic floats over the magnets below. Passing an electric current through the coil moves the floating sheet around and produces a best-fit position for the circle.

Now anchor the sheet so the coil does not move.

Now have a magnet travel around the track, the dog, at relatively high speed. It starts closest to the origin point. Mark this. A current is generated in each coil. The bulb that lights up first - the sensor that picks up the strongest reading - is the point to move next to. And so on.

Of course, you can do this in sophisticated ways, but this is all I know, and is easy to explain to a high school kid. The idea is to use a Natural computer.

(background: I wrote a toy program to solve the Robot Tour Optimization exercise problem in Steven Skiena's book, "The Algorithm Design Manual" and got this idea).

Friday, July 24, 2009

How to handle nested beans using Commons-dbutils

When we query data from the database, we fill it into objects. These objects are called beans and conform to certain guidelines to make them easy to manipulate automatically by the GUI and other components. The data fields of a bean are called properties and have a getter and setter method for each property.
We use the open source database utility software, commons-dbutils from the Apache Project, to query the database. Each field in the SQL query is aliased to have the same name as the bean property so that the bean can be automatically created and filled in when the query is executed.

Some of our beans contain object references to other beans. Those nested beans may have properties that are intended to be filled in by one or more fields from a query. However, since it is not on the surface, Dbutils cannot find where the property is and so the nested property remains unfilled.

Consider a table Moods to track our demeanor while we engage in an activity. So it has two columns; face (demeanor) and activity.

Face Activity
huffing Jog
smile Work
engrossed movie
sad Cry
distant distracted
bored waiting

Bean Foo contains an object reference to an instance – a bean- of class Bar. Foo contains data field or property ‘face’, and Bar contains the property ‘activity’, that we want to fill from this query:
“select face, activity from Mood”

public class Foo {
private String face;
private Bar bar;
public String getFace() {return face;}
public void setFace(String face) {this.face = face;}
public void setBar(Bar bar) { = bar;}
public Bar getBar() {return bar;}
public class Bar {
private String activity;
public String getActivity() {return activity;}
public void setActivity(String activity) {this.activity = activity;}

Old way:
QueryRunner runner = new QueryRunner();
BeanHandler bh = new BeanHandler(Foo.class);
Foo foo = (Foo) runner.query(connection,
"select face, activity from Mood", bh);

Result: is null and its fields are unpopulated.

1) For each nested bean, users will provide a mapping of property to nested object reference so that the property can be found. In the above example, that would be: “bar”ßà [‘activity’, Bar.class]
2) A new class, NestedBeanProcessor inherits from the BeanProcessor class in Dbutils. It overrides the toBean() method. When this method is called to populate a bean from a result set, it asks the superclass to fill in the data. Then it examines each mapping. Using Java Reflection, it retrieves the nested reference. If this is null, it creates the nested bean. Next, it retrieves the value of the field in the result set and calls the setter method on the bean.
3) To fill a list of Foo beans with singly nested member(s), use a BeanListHandler.
4) In the case where Foo contained a list of nested beans:
for example
ArrayList bar;
There is no way to specify this one-many relationship in Dbutils for automatic filling of bar.activity from the top-level query. Dbutils cannot discern whether a ResultSet row is a new instance of a top-level bean to be created, or whether it must retrieve the reference of a bean previously created and add a new bean to the nested list it contains.
In other words, you must provide an object reference for the level below it to be filled. We would in this case, fill in the fields of Foo and then use this instance to run a second query, using the BeanListHandler to fill in the bar list and any nested fields of Bar.

1) For now, we shall handle nesting that is one level deep.
2) As in 4) above,

New way: (How users will call it):

Hashtable ht = new Hashtable();
PropertyDescriptor prop = new PropertyDescriptor("activity", Bar.class);
ht.put(prop, "bar");
NestedBeanProcessor nbp = new NestedBeanProcessor(ht);
QueryRunner runner = new QueryRunner();
BasicRowProcessor burp = new BasicRowProcessor(nbp);
BeanHandler bh = new BeanHandler(Foo.class, burp);
Foo foo = (Foo) runner.query(connection, "select face, activity from Mood", bh);
System.out.println(foo.getFace() + " during this activity: " + foo.getBar().getActivity());

huffing during this activity: jog

Note: we used a BeanHandler. To fill in all the beans, use a BeanListHandler.


public class NestedBeanProcessor extends BeanProcessor {

…relevant methods shown…

Hashtable propertyForBeanMember;

public NestedBeanProcessor(
Hashtable propertyForBeanMember) {
this.propertyForBeanMember = propertyForBeanMember;
public Object toBean(ResultSet rs, Class type) throws SQLException {
Object bean = super.toBean(rs, type);
Enumeration keys = propertyForBeanMember.keys();
while (keys.hasMoreElements()) {
PropertyDescriptor property = keys.nextElement();
Class beanClass = bean.getClass();
try {
String fieldName = propertyForBeanMember.get(property);
String fieldNameCapitalized = fieldName.substring(0, 1)
+ fieldName.substring(1);
String fieldGetterName = "get" + fieldNameCapitalized;
String fieldSetterName = "set" + fieldNameCapitalized;
Method fieldGetterMethod = beanClass
Method fieldSetterMethod = null;
// we have to go thru all the methods because
// PropertyDescriptor doesn't seem to provide a way to retrieve
// the fieldClass
// i.e. we would have liked to simply do
// fieldSetterMethod = beanClass.getDeclaredMethod(fieldSetterName, Bar.class);
Method[] allMethods = beanClass.getDeclaredMethods();
for (Method m : allMethods) {
String mname = m.getName();
if (mname.equals(fieldSetterName)) {
fieldSetterMethod = m;
Field beanField = beanClass.getDeclaredField(fieldName);
Class nestedBeanType = beanField.getType();
Object nestedBeanValue = fieldGetterMethod.invoke(bean);
// nestedBeanValue is the value in the reference
if (nestedBeanValue == null) {
// create
nestedBeanValue = nestedBeanType.newInstance();
// set value to new instance
fieldSetterMethod.invoke(bean, nestedBeanValue);
System.out.println(" property :" + property
+ " target nested Bean: " + nestedBeanValue);
Class propType = property.getPropertyType();
Object targetValue = this.processColumn(rs, rs
.findColumn(property.getName()), propType);
if (propType != null && targetValue == null
&& propType.isPrimitive()) {
targetValue = primitiveDefaults.get(propType);
this.callSetter(nestedBeanValue, property, targetValue);
} catch (Exception e) {
throw new SQLException(e.getMessage());
return bean;

Sunday, June 7, 2009

Understanding why George Tiller performed partial birth abortions with an untroubled conscience

“These are the things we do,” he said, pointing to color snapshots of aborted fetuses. “Hydrocephalus, spina bifida, fused legs, open spine, lethal chromosome abnormality. Nature makes mistakes.”
George Tiller, Wichita abortion doctor, shot dead in June 2009.

Reading this quote in the newspaper article by Judy Thomas, I suddenly understood how someone who performed late term abortions could live with an untroubled conscience. Even though he was an usher at his liberal Lutheran church, he apparently believed that babies were created by Nature, not God. He believed that a woman, and the planet, should not be burdened by one of Nature's grotesque mistakes. In contrast, the pro-lifer believes that even deformed babies were created by God for a purpose, and that we do not have the authority to decide what the cutoff point should be - to grant life or death. Who knows what wonders God can do with a seemingly worthless lump of clay?
This is consistent with pro-life support for the death penalty. God, as described in the major religions, requires man to administer justice - even to the point of taking life.

Monday, May 11, 2009

Memories of Cedar Lake

"Fond memories from my boyhood..." (Chris said)

Sunday, March 8, 2009

iphone or android development?

For those wondering whether to chose iphone or android development, here is a great blow-by-blow narrative by Ed Burnette

He also has this website androidandme
Personally, I am trying to decide whether to switch to iphone development as I have lost much due to android, but there will be a significant learning curve as I have never touched MacOS nor Objective C.

Thursday, February 26, 2009

Before you startup, count the cost

Update: Praise God for a job offer I received from a company that is implementing a project
at the US Dept of Agriculture in Kansas City, MO. It is a web based project for farmers to apply for disaster relief.
Honestly, I was not looking to work in that domain area and server side but we see God's hand in it and know that I must fit in with His plan. Also, He sees things that I do not.

Jesus said, "Before you follow me, count the cost".

I found that none of the startup evangelists - Guy Kawasaki, Paul Graham etc. mention this aspect of counting the cost.

Can you get a decent job again if your startup fails?

"Oh, sure" you think, "My startup experience broadened my technical and business perspective and should be valuable to any employer". I am finding out it isn't true.

1. "I am suspicious of you"

No one says it so bluntly, but employers wonder if I will be "double-dipping" as a recruiter explained to me. They wondered if I would remain passionate about juwo and work it on the side. The problem is, it is on my resume and so when asked about it, I do explain what it does and then it goes downhill from there. Whether my belief in the validity of the idea it is a giveaway, I don't know. It is almost like marrying someone who recently had a girlfriend and still has feelings for her! I have since removed the website content at

2. Is the technology you use in your startup exactly the same as what employers use in your city?

juwo uses Java in general, and specifically: Swing for the desktop version, and Google Android for the mobile version. Employers in Kansas City are mostly back-end server side. So they need stuff like Spring, Hibernate, JSP, Struts, J2EE and Java Faces, Ajax for the server client. It is not sufficient to learn these from a tutorial; one must have actual project experience to be considered. My JSP/J2EE experience is about 4 years old. So as a contractor, employers prefer someone who worked in it just yesterday.

3. How old are you? or to put it another way, how many years of experience do you have.

The ideal age is someone with 5 years of relevant experience - someone who can be moulded and who will "grow with the company" as another recruiter said. I have 18 years of software development. Too old it seems, as an employee. As a contractor? As I said above, now my experience is too old.

So what now? As I search and wait, I have been reimplementing a new version of juwo and is a few weeks from completion. It will hopefully, be easier to use and also renamed to List Of Blocks.
I simply want to fill up this gaping hole of failure and at least get users who will use it and find it useful.

Friday, September 5, 2008

Android leftovers

The problem was Google's attitude. They love brilliant people, and despise people who are average.
Anyone who has gone through the hiring process with them, is struck by this realization.

While that attitude is unfortunately true for many of us, they carried it over into their Android effort which was supposed to be a community open source thing.

The community served more than as guinea pigs for their nascent alpha stage Android mobile platform. They wrote innovative applications to compete in the Android contest - 1786 applications! During this process they contributed good ideas which Google used, enhancement suggestions that were implemented, tested and reported bugs, helped each other in the forums and some even wrote tools to enhance the platform.

In return, Google loved on the 50 winners of the contest (after an unfair and hasty judging process) and spat upon the rest of us, the 1700 entrants and community. Once Google got what it wanted in a final version of Android, we were discarded like leftover food gone stale. As a result, most got disillusioned, felt used, and simply left. Now Android is just another platform. It has none of the magic and romance that Java and Linux had.

Monday, May 19, 2008

web advertising is Google's Achilles heel

I feel web advertising is Google's Achilles heel. How effective is an advertisement?
People don't really know. That is how Google profits. I have some nascent ideas (half baked).
If anyone is interested, we can collaborate. If my guess is correct and it proves to be Google's Achilles heel, then it has the potential to bring Google crashing down - but none of us would want such a horrible thing to happen - right? ;)

Sunday, May 18, 2008

juwo as a framework for other applications

juwo is misunderstood and much maligned - probably because of its non-intuitive and poorly designed user interface. Yet, it is powerful in concept and potential uses.

Recently, the prestigious and highly competitive Android Developer Contest concluded. Out of 1788 applications, 50 were picked as the winners (the list is here). juwo lost badly - in fact, it was likely disqualified at the outset because I never received my scores.
However I was amazed to see at least 3 winning apps that juwo could pretty much, do all that they could.

  • Breadcrumbz - navigation using pictures. This can be a juwo with each block, containing a photo or a voice note, and text.

  • Cooking Capsules - cooking instructions with a video. Again, this can be a juwo with each block as the step of a recipe. Even better than the original application, you can skip to the important parts of the video and replay.

  • TuneWiki - lyrics stream on the screen as music plays. Here is a juwo demo of American Idol. The lyrics could be - one verse for each block.

These winning applications show that juwo can be used directly or serve as a framework for other applications to build custom interfaces for their specific needs, on top of.

Think... multimedia lists.

juwo can be used for serious applications to benefit society. For the developing world - quicker diagnosis of diseases, better utilization of health care resources - doctors, midwives in rural areas. This is both for the developing world, and rural under served areas in the USA. (I shall release details of this after juwo is available on the actual handsets).

It is discouraging that few can see its potential.

Monday, May 5, 2008

To Google: please make your Android strategy win-win, not win-lose.

To Google - Dan Morill, Rick Miner, Google Android Advocates and Brin(?) - please make your Android strategy win-win, not win-lose.

In the history of software, no company has had 1788 applications for its pre-alpha platform in such a short time. This was propelled, largely by the work of the Android developer community.

Please recognize that most of the 1788 entrants (including myself) did so at personal and family sacrifice. Most of us were not paid a salary to do this. Any hopes of competing and winning will now be tempered by the results and a realization of the intense competition and the long odds.

Only one person can hope to win a prize in a contest, but this was different from other contests in two striking ways.

  1. if this were a desktop contest, we could be turning our apps into business startups right now. With Android, it will likely be 2 years before the common man on the street can afford an Android phone at sub $100 prices (per the Wireless week article).
  2. if this were an Ajax/Flash/J2EE contest, we could be picked up by a good number of local employers, who already use such skills. Contrast this to Android...
In other words, for Android, the payback for most of us, is not clear. It is win-lose.

Suppose there were no applications for Android except the usual boring suite of Google Maps, Mail, Search etc. Then Google would have to hire developers or outsource development to companies to create new mobile applications, or buy up mobile companies. It would have been very expensive for Google. At a minimum, would have cost hundreds of millions of dollars; instead, it is now a free win for them.

For Google, it is currently Win-Win for:

/........ \
OHA - Consumer

The Android developer is not in this picture. If they feel that they are being used and
exploited, then they will walk away. Sure, Android can still win, but it will be costly and

So please modify your triangle into a square and make it win-win for all of us.

Google - developers
| .............. |
OHA - Consumer

A few ways:

1) Allow hosting of projects with an Android component at, even if they are
closed source. Presently only open source is allowed.

2) Marketing. Free use of Google Adwords for our android applications for (say) six months.

3) Subsidize handsets to the developer community. They should be at the same price as a
mid-level GSM handset. e.g. $50.

Tuesday, February 5, 2008

I am in a serious struggle

I was laid off last week. It had something to do with my approaching the company founder - Augustus Grassis and offering him equity in juwo if he would allow me to work on it full time. I had previously asked my manager for vacation and openly told him I would be working on juwo for the Android contest. This rankled them. (I guess it would be fine if I spent two weeks on the beach, but not if I were programming on a personal project). Also juwo had been excluded in the non-compete agreement I signed when I joined them. They said they needed to cut jobs. They said my heart was not in my work. It was true; my heart was in juwo even though I met their project deadlines.

I failed before. Now I need more than ever, to make this entrepreneur thing work. To earn a living.

Wednesday, January 23, 2008

Android redesign - suggestions for Google

  • use a thick arrow anchored at the bottom edge to indicate when there is an overflow of data so that user must scroll down.

  • allow file names to have spaces

Don't simply bubble up Linux' restrictions!
This restriction will make things less interoperable.

[Note: I was apparently mistaken - the restriction was from Android. Linux allows spaces]

Use well known Design Patterns for callbacks, and use exceptions not return codes!

A) when calling an Activity:

startSubActivity(...,,[methodName or reference to Method]);
// for example Class.forName().getMethod("foo")

B) in the callback method foo().

foo() {

try {
Activity.checkActivityResult(); // throws exception if error
} catch(Exception1 e1) {


  • log filters should use approximate, not exact matches.
The tag in class Bar of my application Foo becomes "Foo Bar". This is
necessary so that I know where the message has come from - like log4j.

However if I want to see messages of my application and create a
filter: "Foo", then they cannot be seen because they match exactly, no
wild cards, and so the filter must be specified: "Foo Bar".

Hence it would be a simple and small but useful change if Google were
to match using startsWith() and not equals().

Saturday, December 29, 2007

focus on money rather than novelty

I realized something recently; In Science, Inventing and Engineering, we look for and celebrate what is novel, ingenious and revolutionary. In Technology, Consumers and as geeks, we search for and laud what has the coolest features.

For an entrepreneur, the focus should be... "what makes money?" The twain may never meet.

Perhaps this explains companies that make pots of money doing dull, boring, primitive work. It might also explain why so many innovative startups fail.

Sunday, November 18, 2007

Simple idea suggestion for Google - make Android available for the desktop

Android is Google's new baby - an open mobile development platform.

As developers, we are developing applications for android, running them in a cell phone emulator which looks like a cell phone on the desktop screen.

But most of these applications are better tested - by the market - if they can be distributed and run as independent applications on the desktop. Just as Java is, today.

This is the key piece that is lacking from Google: the means to distribute and run Android on the desktop (keeping the basic screen, but getting rid of the silly cell phone buttons).

An interesting thought: Can it leverage off the vast base of Java runtimes already installed?

When installing, the Dalvik virtual engine from Google would have to run instead of the one from Sun.

Will this make Sun angry? Perhaps. However here is one scenario bound to make Sun happy. Since Android is simply Java 1.5, it could exist as libraries and run on the JVM - for the desktop version only.

How will an Android application be distributed? Ideally, as a Java Web Start application. This will allow updating of the libraries within the Java framework.

Either way, this will go a long way to making us developers feel more secure; that we are not developing vaporware. (see this article also, containing a remark from juwo :) )

Updated: (3/25/2008)
If the Android platform runs on both the desktop and on the mobile phone, then there are significant benefits:
It will be seamless for users and developers. Users will have the same
familiar look and feel across mobile and desktop. Developers wont have to develop two versions. For Google, it may be the biggest win of all - increasing clout on the desktop.

Friday, August 24, 2007

My Status Report Template

I have a status report by week and updated daily in a simple text file. It rolls over, day by day. It should work for small startups. Strangely enough, the defects/bug list is integrated into it. Is there a better method you would recommend?
juwo status - 4-26_31-07

0) Work planned for today

1) Work accomplished

2) Work planned for tomorrow

3) Issues/concerns

4) Longer Term

[for example]
1. Milestone - get users
- effective demos that show benefit and how easy it is to use.
- explain how it benefits them.
- control FLV video
- youtube video clip about juwo
- google widgets

A) New Functionality or Ideas
a) Necessary
b) Nice To Have

B) Refactoring for Improvement

C) Deployment

D) Defects

E) Cannot reproduce these defects

F) Resolved (updated each week)

Tuesday, July 31, 2007

How does one break out of the customer-investor-team-product conundrum?

I have found it to be worse than catch-22, a pyramid.

We are starting at one or more apexes and building to a third, which we then use as a base to conquer the fourth peak. If we do, we are a successful company. Then we start growing the pyramid outward or moving up in scale to become hugely successful.

But potential partners (team) will not show more than an interest without investor money to pay their salaries and paying customers or at least users to validate the concept. Investors want to see users. None (especially users) are interested in a product that is not complete and slick. To produce it, one needs partners. Even going it alone to get the product leg in place, one needs investment to pay the bills.

But many pyramids were built, and many are the successful startups that create meaningful products - not simply dot-coms that are flipped for $millions.

I can feel your bored gaze while you think: Sell Your Idea To The Right People.
Assuming this is the answer, what concrete steps can I do to 'sell'; and to the right people?

Wednesday, June 6, 2007

On the stress of being an Entrepreneur

Just noticed these thoughts written by me, a year ago. On the stress of being an Entrepreneur.

June 2006.

- Trying to find partners who will also see the dream.
- Getting beta clients.
- Having to do everything - and things I have no expertise in.

and also this:

Someone politely asked me how I was and I replied, "overworked, unpaid,overstressed, but fulfilled".

Saturday, May 12, 2007

You will succeed when you execute Powerful Advice

We think of advice as a suggested course of action coming from other people, from our environment. However we are most often our own advisors - we talk to ourselves before we reach a decision.

People think that the Decision is important; rather, it is the advice that precedes it.

We judge advice. It comes in four flavors: Neutral, Bad, Good, and Powerful.

Let us consider advice that is executed to reach a desirable outcome.

Neutral Advice is outside our taste buds. It is yet to be evaluated even if it is in our field of view; is floating outside of our zone. It can turn into Good, Bad, or Powerful.

Bad Advice is inappropriate and causes failure. We know it too well to dwell on it further.

Good Advice is wisdom, or wise rules. Good advice can turn out to be bad advice.

Powerful Advice is appropriate advice or "right" advice. When executed, it causes a multiplier effect. Fits exactly for our situation, fits exactly for our ability to execute. Aligns favorably with future events. Fills our sails to push us to Victory. You will succeed when you execute Powerful Advice.

For example: President Roosevelt received Powerful Advice from his advisors when they told him to risk devoting precious resources to develop the atomic bomb. From the American point of view, the war was over in days - but more importantly, America and other nuclear powers became dominant and unassailable from that point onwards, even today. Hitler ignore the same advice from Von Weizsäcker, his scientist.

Powerful Advice is always judged to be Good in hindsight. Good Advice if inappropriate, can turn out Bad and is not always Powerful. Neutral Advice can turn into Powerful Advice.

For example: President Bush was advised to go it alone in Iraq after they swept through in 19 days. The huge oil fields would free America forever from dependency on the Arab world. It was Good Advice, but inappropriate. So became Bad Advice. My advice was (in a rubbished letter to the local Editor but with no one to listen), turn it over to the United Nations so they would enlist muslim nations as peace keepers. End of Insurgency. This was from observing India's eerily similar and failed adventure in Sri Lanka in the 1980s - which resulted in Prime Minister Rajiv Gandhi's assasination by a suicide bomber. It was likely appropriate advice and so may even have been powerful - if executed.

From my earlier lament: Good Advice is a storehouse of wisdom. Individual or Collective. Our minds try to make sense of the past and try to function in the present to maximise selfish survival and prosperity by generating rules. These rules are based upon our experiences, education, upbringing, beliefs etc. Good Advice is simply rules and patterns extrapolating into the future. Because the future is unpredictable, so Good Advice may not always be right.

Powerful Advice is hard to recognize and is not the domain of the clever, educated, or even successful. Ordinary people may possess it at times.

For example: Wilma was a poor, black girl with polio, growing up in segregated America in the 1950s.She could not walk without braces until age 11. Good Advice would have told her to find fulfillment in the Arts or to be content with her lot in life. However from accounts, she watched her sister run on the track, and Powerful Advice within her, told her to run, too. Wilma Rudolph won the title of the "World's Fastest Woman" and became the first American woman to win 3 gold medals in the Olympics.

So, what are your thoughts on how to recognise and sieze Powerful Advice?

Thursday, May 10, 2007

The exasperating problem with advice

the right advice when executed well

can turn around a company
can prosper you
can diagnose a disease correctly
can prevent mishaps
can save lives
can better communities and organizations and even nations

but how to tell if it's the right advice except from hindsight?

the right advice doesnt always wear a suit, nor dresses up in the right educational degrees and qualifications.
the bearer may be clumsy, tattered, unintelligent, stupid to all.
the bearer may even be a failure.
may be experienced, or not at all.
on the other hand, being clumsy, unintelligent, tattered and uneducated, may be just that - and wrong too!

carefully analysed advice proffered up by a brilliant mind may be just as stupid if it lacks a key perspective or insight.
the right advice is crowned 'good advice', only in hindsight.
Before the final bell, the rest are mere hopefuls and pretenders.

talk is cheap, advice easy to offer.
an advisor without "skin in the game" (personal investment at risk), is just opinionating to puff up his ego; blowing smoke circles from his cigar into the face of a young inexperienced sap.

with so many newspapers, magazines, cheaper publishing, the internet and blogs (including this!), everyone is a pundit. Pretenders all?

advice that is general, "get lots of users for your beta product", or truisms like, "hire the brightest" or even "implement [current management or technical fad here]" will always be easy to dish out. But specific tailored advice on how to "get lots of users" takes effort, wisdom and thinking - and may in the end - be wrong.

right advice = powerful advice.

In the meantime, we are simply confused with this over-abundance.

Can you hedge your bets with advice - take some of this and some of the other? That may dilute your executing and lead to failure.

My current explanation: our minds try to make sense of the past and try to function in the present to maximise selfish survival and prosperity by generating rules and patterns. These rules are based upon our experiences, education, upbringing, beliefs etc. Advice is simply rules extrapolating to the future. The future is unpredictable (why?). So advice may not always be right.

(Why is the future unpredictable? Is there any link with Heisenberg's Uncertainty principle - or is it simply the large number of interacting variables?).

what are your thoughts about how to recognize the right advice?

Friday, May 4, 2007

Ideas are Worthless? Wrong! Ideas can solve problems

Some Venture Capitalists (VCs) and investors are keen to promote the idea that Ideas are Worthless. (for example, see Graham or Kawasaki)

Officially, this is so that they (investors in general) do not have to sign Non Disclosure Agreements (NDA) because they see many ideas and don't want to have their hands tied.

It is true also that many of the ideas they do see are indeed worthless, and an unobvious twist to a worthless idea can make it valuable. So we dont want the originator of the worthless idea to profit from the valuable twist.

Sometimes though, I also wonder if it is because they do not want to be held liable for any leaks, unintentional or deliberate.

For instance, if they have funded a startup which is working on the same problem, or in an overlapping area, then the temptation to 'help' their own venture by divulging the secrets of the outsider, is probably overwhelming.

By definition, you can only 'steal' something if it has worth and does not belong to you.

An idea is a seed; many ideas have to be discovered and implemented along the way for it to grow up. The initial fertilisation is essential, but differentiation into organs, the "other ideas along the way" must come along.

I know how true this was for juwo. In May 2005 when I decided to implement a prototype fulltime, I fully expected the initial seed - "skip to the important parts of an audio lecture" - to be done within one month. So I told my wife, "two months!" to manage expectations, and went to work.

It took me a full 10-12 months of fulltime work (60 hour weeks at a minimum) and 3 iterations to implement juwo. Perhaps I am really slow, or as I hold true, a saying I since developed - The Invention is in the Prototyping. In other words, no one could have seen the full concept of juwo at the outset. The journey had to be undertaken.

Well, what if I had implemented only the original scope (to meet my deadline)? Answer: the concept would have been stillborn. It would have remained an embryo.

But suppose, a team is trying to solve the same problems as juwo has solved. How long would it take them now? I am reluctant to write this. All they have to do is to play with juwo and figure out the key concepts. Which is why, I was fearful to release it for another year; until I found that no one will likely bother with it until it is successful.

Another example.

We replaced our dishwasher recently. The earlier model was only 4 years old and was put in by the builder of the house. However it did not wash dishes clean. This is because there was one rotating arm and one spindle that sprayed water on dishes that were placed in two racks. So dishes in the top rack often had sediment on them because dishes in the lower rack often blocked the spray. In other words the dishwasher would wash only dishes that were already cleaned by hand, and if there were only a few dishes loaded - and even then, took 1.5 hours to do it.

So this was a real problem for any dishwasher manufacturer.
When we shopped recently, I observed that all the models we saw, had done away with the spindle, and introduced 3 rotating arms - that would sandwich the 2 racks. This enables all 4 surfaces to be covered.

A simple solution in hindsight. But apparently, many models of dishwashers were manufactured, probably billions of dollars spent until someone had a bright idea to solve the problem. And then what happened? Apparently all the manufacturers copied or stole the solution. To avoid patent lawsuits, they all likely came up with variations on the same theme.

Conclusion: An idea can make all the difference.

Friday, April 20, 2007

juwo beta is released

Exhilarated? No.
Tired. Very.
Released it with the demos. Announced it on the YCombinator newsgroup.

Was roasted - scathing feedback, but some of it was really good, and which I promptly implemented.
Disappointed? Yes. I dont know if anyone even watched a demo - they were simply commenting on the website.

Friday, April 6, 2007

How to make your software easier to use?

"juwo, in its present state, is not easy to use". I have heard this enough times that I am taking it very seriously. I have been thinking about this everyday because I really need to make juwo, easier to use if anyone is to use it!
(If you need a demo or wish to run it and give me suggestions, feel free to email me. Anil AT juwo DOT com).

The KISS (Keep It Simple Stupid) principle is useful, however you also need to balance it with Einstein's dictum: "Make it as simple as possible, but no simpler".
This thought popped into my head yesterday as I was pondering how to make juwo easier to use.
My dog KC, has 4 legs. To make it simpler, one could cut out (ok, ok, not literally!) two legs. After all, many mammals, birds etc have two.
Would that be better, or worse?

important principle:

understand and identify the core concept before attempting to strip off layers you think are unnecessary.

Any suggestions? (on juwo!)

Thursday, April 5, 2007

Our Plan B

- release juwo/NP on Cnet with 'donate' button and 'feedback' button

- do (task0, task1, task2, task3,task4,task5,task6) in parallel

if(has enough user base caught on free version?)
implement Viewer/Editor
charge $5 to upgrade to Editor

get multimedia content juwo-ed.
save the juwo on server
publicize the juwo some

for each feedback from user
sieve, prioritise and put on TODO list

for each $ from user
- allocate, save and spend

use customers to sell prospective business partners
if(enough revenue)
quit day job

implement task(s) on TODO list

Friday, March 30, 2007

The new startup. young-old teams

'I wish I had the boy' the old man said aloud. 'To help me and to see this'
(The Old Man and the Sea)

Sorry but I am on a roll here! I am going to blog this idea when I finish some stuff on juwo. I think this can potentially be an answer to the peculiar employment problems in the software industry.

Tuesday, March 27, 2007

A better business model for incubators - innovation by collaboration? (orphanage vs. foster parenting)

My employer (he is an entrepreneur himself with a bootstrapped and established startup) is interested in my product, juwo (or so he says he will be, when his business stabilizes - and I dont know when).

I am applying to YCombinator. Since I have not found a cofounder - a serious disadvantage, I am wondering if I should list him as a cofounder - my boss is quite willing. He said so.

But then it struck me. What if an established company were to consider prototyping an idea. Starting a Startup for the purpose of launching a new product. They wouldnt mind giving up 6% - of the new company. What better avenue than something like YC? With all the connections, guidance and advice - much better than doing it in-house.

Is this unfair?

I am sure YC too would prefer this since the risk is greatly reduced. An established company can shoulder the gruntwork and paperwork.

Or instead of looking at is as abuse, could this be a new business model for tech-savvy VCs and gurus?

For example, companies could send their teams to Silicon Valley for 3 months to build a prototype, overseen by YCombinator or Wozniak, Godin etc. (lets call it 'Cubator'). They would even pay living expenses for their own teams and give up 6%.
This is a win-win situation for all! The gurus get to 'advise' a larger number of projects thus ensuring success, putting their eggs in many baskets.

To put it another way, incubators like YCombinator are running an orphanage; get a batch of orphans, grow them and then release them into the world. The 'Cubator' way calls for them to become foster parents. Look after them for short periods, and then release them back to their parents.

Companies will have to pick nicknames to protect confidentiality - but they will have to accept that their idea will be known among the teams - the collaborative part.

Questions: How is this different from the traditional incubators? Will the traditional startups with only founders plus an idea be the losers? Will this 'Cubator' spawn a new burst of innovation by collaboration?

Thursday, March 22, 2007

idea-team matchmaking. The shore is crowded; get into the boats!

'I worked the deep wells for a week, and did nothing', the man
thought. (The Old Man and the Sea)

With that random quote from Hemmingway to give my post respectability :)
let me begin.

A few days ago, Subbu, a former coworker called and we chatted. He still works at the cellular telco. Subbu told me that someone wrote a test simulator for Wireless Local Number Portability or WLNP and it has become the industry standard; that the telco had purchased it. (Background: when you switch cellphone carriers, you retain your old number. The new carrier must receive the phone number and subscriber details from the old carrier. This is usually done through a Corba or XML interface).

As a struggling, burning out, entrepreneur, my first thought was, "What a stupid idea!". My next thought was, "What a great idea!". It seemed stupid because when the client part of a server is being written, a server stub must be tested against - to simulate the server. Usually the worst programmer in the team gets tasked to write this because it is throwaway code and doesnt really do anything. Unimpressive.

However... when you have different companies that must test together and they are actual competitors where one has persuaded a customer to switch e.g. from Verizon to Sprint, then the testing issues become testy. (think of wife and ex-girlfriend communicating!).
So the simulator is a great solution to the problem. It does not take much brains to write one, but the point of being an entrepreneur is not to dazzle people with your brilliance. It is simply to sense where there is pain and to write something, even stolid, that will reliably ease the pain.

But what does this have to do with my post?

When I look at the list of companies that are being funded nowadays, there is a sameness to them. for example, a cursory look at a few of the companies YCombinator funded with their taglines:

Kiko - online calendar
Loopt - find your friends fast
ClickFacts - software for Internet advertising to prevent 'click fraud'.
Thinkature - online whiteboarding
Likebetter - ? (had fun playing it but couldnt figure it out)
Buxfer - track your money online
Pollground - online surveys
Wufoo - online HTML forms

The founders are undoubtedly highly intelligent, talented, young and hard-working. However one cannot help getting the feeling that the ideas they have developed have come from their consumer experiences. Online, music/video, checkbook, advertising. Even the names are 2 syllable! (like juwo, but I coined it in 1994 before the dot-com era). Look at what famed Fred Wilson (of Union Square Ventures) has funded...

In other words, the shore is getting crowded. Too many fishermen clumped together trying to catch the little guppies near the shore. Time to get into the boats and go out to the deep waters where the marlin, dolphin and sharks are.

Now back to the main thread.

I am sure there are many workers, managers, secretaries, programmers, janitors in dull and boring industries who have noticed some specific pain in the areas where they work. they even have jotted down something they think is a solution. But they dont know what to do with them. They cannot implement them. Even less incentive to pass them along for free.

Ideas are closer to earth than dreams, but they need executors to make that final connection with earth. With intelligence, youth, talent, energy and knowledge.

Can we come up with a site that will perform matchmaking for these two? What does the originator of the idea get? a 2% stake in equity as advisor. What do the teams get? a deep water idea that just might grow into a whale.

So an online, 2 syllable, matchmaker for ideas and teams (and if you implement this idea, I fully expect my 2% share!).

Saturday, March 10, 2007

co-founder match making?

I see many people searching for cofounders.
Here is a nascent idea that I just had. May be stale, I dont know (I am embarrassed to write something down without more than a perfunctory google search):

As part of signup at YCombinator, FounderFinder and other entrepreneur sites, ask a large number of direct questions. The answer should be a simple yes/no.

Do you have a prototype? Y/N

Do you have a large number of contacts in the domain? Y/N

Are you easy to get along with? Y/N

Is it a web app?

Do you already know VCs? Y/N

and so on...

  1. Then you can use some kind of mathematical function to come up with a match-making arrangement.

    So for example, if I answer

    Y N N Y Y N N Y N

    And John is

    N Y Y Y Y N N Y N

    And Joe is

    N N N Y Y N N Y N

    Then John is closer to my profile.

    On the other hand, I can specify that I am looking for

    N Y N N Y N N Y N

    and then be pushed to the profiles of those people.

  2. Another thing (I find cool):

    During signup, I should pick my questions from a bucket, and in the order that is important to me. So the above can actually be a binary number! Or it can be a vector.

    So then we can now make comparisons.

  3. One can come up with so-called "personality" types and the quantitative number associated with them.

    Then a person browsing can ask:
    Show me all entrepreneurs within a 'personality vector distance' of 2 from type E.

The vectors rather than numbers are now a self-assessment. We can have mutual-assessment numbers where these 'scores' become dynamic. This is not a am-i-hot-or-not rating scale from 1 to 10, but a measure of how close you are to a 'type' in vector space. For example, the Bill Gates type =(4,5,12,6).

There can be online 'dates' or interviews where potential cofounders assess each other using the same questions as guidelines. these meetings take place via Instant Messenger chat - or if in the same city, a face-to-face meeting.

The more 'dates' or interviews you have, the more other people can assess you and presumably, the more accurate your score. The mutual rating scores would have to be combined in some way.

Is this just an application of vector spaces?

Friday, March 2, 2007

I need your advice! Startup Failing. Should I simply release the product?

I need your advice! Startup Failing.
Should I simply release the product?
(See my last post on where I am.

What is juwo?
A "Swiss Army knife" piece of software that gives more power to consumers to structure audio, video and text as a bullet list, to more easily index and annotate them, and to share the lists with others. Its benefits extend to multimedia as related to more enriching broadcasts, collaboration and organizing.

In October 2005, when the initial prototype was finished, nothing came close to juwo. Now, I find several, with quite a few of the same features. It still has an advantage - the concept is still unique and (In My Humble Opinion), powerful. It has many potential applications and uses.

The more I delay, the more likely someone else will catch up and move ahead. And then it will really be wasted breath, sweat, years, money.

Potential competitors:,, supcast, abazab, wiki,, podcasts, filenotes organizer, Media Matrix.
Sure, there's overlap. I have done a competitive analysis matrix, and feel that juwo has its own niche. It can be a useful tool for the layperson.

The problem is: It took me 12 months, full-time, to iterate through and develop a prototype, plus another 6 months to unsuccessfully try and build a business.
I calculate that, conservatively, $120K was sunk into this. How?
Cash used up + missed regular salary = $120K.
All of my Savings. Will I lose all this if I give it away?

I needed about 2 months of full-time effort to do thefollowing
  • to make it more user friendly (help wizards etc) as people said it wasn't.
  • support other media players (right now, only Windows Media Player supported).

But even so, I lack co-founders, customers and investors.

Now I have a job, and can barely do it on the weekends.
Should I just release what I have?

So I am thinking of adding a legal disclaimer screen, and a feedback form and then releasing it.

However, here is the conundrum:

I am sure potential competitors will download it and perhaps copy any concepts they didnt think of.

But on the other hand, I have always been profoundly impressed by those who follow this saying, "Cast your bread upon the waters, for after many days you will find it again".

Is it lose-lose?

How can I make it Win-Win? (get some money out of it).

P.S. I can share a percentage of any profit from juwo - for a certain time eg. 1 year with those who will help out with concrete help.

Friday, February 16, 2007

Has juwo failed or how can it turn around?

May 2005 till May 2006, two iterations of prototyping.
May-December 2006, one further iteration and then trying to find business partners, investors, customers. All failed.
Money ran out. Jan 2007, took a job.

I recently dissolved the advisor group. Advisors are a fixture of startups. Advice is nice, but I much prefer effort - because Talk is Easy but Effort shows Commitment.
Here was my email to them:

I wanted to update you on what has happened with juwo.Since our only advisor meeting in June 2006, I have tried very hard todevelopjuwo/Nodepad into a beta product, get a beta customer(s), business partners so that investors could be
approached and the business built.
I explored probably 20 income/customer opportunities, and about 13 potential business partners.I could not do it all
single handed and I found it to be a catch-22 situation.
Potential partners would not show more than an interest without investor money to pay their salaries and paying customers to validate juwo technology.
Investors are not interested in investing in a product before
Investors want to see users. None (especially users) are interested in a product that is not complete and slick. To produce it, one needs partners. Even going it alone to get the product leg in place, one needs investment to pay the bills.
I needed to do some more revamping of juwo to make it user friendly and work with media players besides Windows. It would have taken about 2 months more.
However, I ran through my savings completely and have taken a job since.
My current employer has a successful startup in the small
wireless provider area.I showed him a demo to see if there was a potential to juwo becoming another line of his business. It seemed he was interested and initially appeared to move inthat direction, but has since said he "is interested but it is low on his priority list... areality of our business". This has been the typical scenario.
Hence, I am dissolving the informal advisor group. I shall continue product development on theweekends and still explore ways to bootstrap juwo - as long as I believe it has potential.

Please continue to maintain confidentiality of any juwo documents,demos, software,tech secrets, ideas etc.
Again, I want to thank you for your time,
advice and the ways in which you have tried to help get juwo off the ground.
I wish you all the best.

Anil Philip

juwo LLC