Wednesday, February 1, 2012
False arguments on Tithing
Saturday, October 15, 2011
Idea on security in Android.
Sunday, July 24, 2011
Trouble using your eHome eh100 wireless router?
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
1) vnd.android.cursor.item/vnd.google.note...
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 vnd.google.note means that this is a note type, for Google, and again
vendor defined
So, if your organization was hepcats.org and your item was a superthingy,
you might use:
vnd.android.cursor.item/vnd.hepcats.superthingy (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:
http://en.wikipedia.org/wiki/MIME
http://www.mhonarc.org/~ehood/MIME/ (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
though)
2) In the line "
android:value="com.google.android.notepad.action.EDIT_TITLE" />"...
The "com.google.android.notepad.action.EDIT_TITLE" 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:
com.google.android.mysubpackage...
or
org.flyaway.myapp.mylibrary
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
google.com, so many of our packages start with com.google (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 hepcats.org example, if you own that you could use
org.hepcats.myapp.mysubpackage
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
org.hepcats.android.bonanzanotes.action.EDIT_MY_STUFF instead.
3) In the following lines, what do 'DEFAULT', 'ALTERNATIVE', and
'SELECTED_ALTERNATIVE' mean?
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:
http://code.google.com/android/reference/android/content/Intent.html
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)
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
This is hard to do in sql and thinking about it, it would be easier to do using recursion in a programming language.
Steps:
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
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.
Controller
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?
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
'cool'.
Friday, November 20, 2009
Can we use a computer from Nature to attack the Traveling Salesman Problem?
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.
Problem:
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.
Example:
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) {this.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:
Foo.bar is null and its fields are unpopulated.
Solution:
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
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.
Constraint:
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
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());
Result:
huffing during this activity: jog
Note: we used a BeanHandler. To fill in all the beans, use a BeanListHandler.
Design:
public class NestedBeanProcessor extends BeanProcessor {
…relevant methods shown…
Hashtable
public NestedBeanProcessor(
Hashtable
super();
this.propertyForBeanMember = propertyForBeanMember;
}
@Override
public Object toBean(ResultSet rs, Class type) throws SQLException {
Object bean = super.toBean(rs, type);
Enumeration
while (keys.hasMoreElements()) {
PropertyDescriptor property = keys.nextElement();
Class beanClass = bean.getClass();
try {
String fieldName = propertyForBeanMember.get(property);
String fieldNameCapitalized = fieldName.substring(0, 1)
.toUpperCase()
+ fieldName.substring(1);
String fieldGetterName = "get" + fieldNameCapitalized;
String fieldSetterName = "set" + fieldNameCapitalized;
Method fieldGetterMethod = beanClass
.getDeclaredMethod(fieldGetterName);
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;
break;
}
}
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) {
e.printStackTrace();
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
Sunday, March 8, 2009
iphone or android development?
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
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 juwo.com.
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
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
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
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.
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.
- 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).
- 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...
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
slow.
So please modify your triangle into a square and make it win-win for all of us.
| .............. |
OHA - Consumer
A few ways:
1) Allow hosting of projects with an Android component at code.google.com, 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 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.
see http://groups.google.com/group/android-developers/browse_thread/thread/c3fe7eda6f564d4d/f7d9ca5b7e702d63#f7d9ca5b7e702d63
[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
doSomething();
} catch(Exception1 e1) {
e1.printStacktrace();
}
- log filters should use approximate, not exact matches.
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().
see http://groups.google.com/group/android-developers/browse_thread/thread/d528d6c810a18647
Saturday, December 29, 2007
focus on money rather than novelty
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
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
--------------------
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
Assumptions
- effective demos that show benefit and how easy it is to use.
- explain how it benefits them.
Tasks
- 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?
Wednesday, June 6, 2007
On the stress of being an Entrepreneur
June 2006.
Stress.
- 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
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
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
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.
Conclusion: An idea can make all the difference.
Friday, April 20, 2007
juwo beta is released
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?
(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
- do (task0, task1, task2, task3,task4,task5,task6) in parallel
task0:
if(has enough user base caught on free version?)
then
implement Viewer/Editor
charge $5 to upgrade to Editor
endif
task1:
get multimedia content juwo-ed.
save the juwo on server
publicize the juwo some
task3:
for each feedback from user
do
sieve, prioritise and put on TODO list
done
task4:
for each $ from user
- allocate, save and spend
task5:
use customers to sell prospective business partners
if(enough revenue)
quit day job
task6:
implement task(s) on TODO list
Friday, March 30, 2007
The new startup. young-old teams
(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)
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!
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
http://ycombinator.com/faq.html 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...
- 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. - 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. - 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?
What is juwo?
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: dabble.com, veotag.com, supcast, abazab, wiki, click.tv, podcasts, filenotes organizer, Media Matrix.
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.
- 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-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
launch.
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.
sincerely,Anil Philip
juwo LLC