EDA, Software and Business of technology
Greek, 'loxos: slanting. To displace or remove from its proper place
da·tums A point, line, or surface used as a reference

                        ... disruption results in new equilibria

[Business] The New Art of Bootstrapping

This great post by Tim Oren, about the new generation of software startups, made me sit up and start thinking...again.
Now we've taken a step back closer to those early days, as the combinations of open source and standards, and commoditization of hardware and software, once again make a low rent market entry feasible.

How true. Even in the mathematical and formulaic world of design automation, people prefer to work via open standards and tools (GCC, Flexx, etc. ). Which is why a move by Cadence to release an OpenSource circuit database library (OpenAccess) is a very cool thing.

I'll try to adapt Tim's opinions and views to the EDA industry. For a new company to break into the EDA industry, it has access to open standards like the SDC (Synopsys Design Constraints), SDF (Standard Delay Format) and now - OpenAccess. Therefore, it becomes quite possible (not easy) for a new company to build tools for validation, cleanup, verification, housekeeping, etc. on the basis of these standards.
However, while on the one hand, building a product first and then searching for customers is quite an easy proposition for those in the web-app domain, I do not believe that is quite easy in the chip-design domain. The trend has always been to have contacts first and products later. For example, while a two grad-student team can beat out a google, by sitting in their garages, I do not believe Intel will even take a second look at me, if I do that. I think that's because EDA customers are concentrated in a particular cities, companies...even buildings. The target population is not a anywhere-anytime kind. Primarily this is because of the need for powerful hardware for processing tasks (read server farms). What I cant still understand is - Can I find a way to offload processing tasks from the CPU to the GPU? The GPU is a vector processing architecture, however there could be a way.
The second important task would be to have a way of making access to my technology, a path of least effort.
Is web enabling the answer, I do not believe so - primarily because of the horrendous computation power required. What is the magic bullet?
The second alternative is to already have a reputation in the industry. Not unlike every other industry there is. Look at Sierra Design Automation, Magma, etc. They were founded, and hence gathered credence, from the prowess (real or imagined) of their founders.
In any case, I think Tim hits it on the mark when he says
Build as little as possible, as fast and cheaply as possible, while demonstrating some unique value.
This would need to be done in association with a pre-customer. Else, such fine-grained precision to hit the requirements on the dot, is simply not possible.
And once I have VC investments - well that's another story, I dont know anything about...yet.
del.icio.us Tags:

Read more!


[Business] Mousedriver chronicles

I swear I did'nt just make that name up. It is a name well known, apparently, to entrepreneurs and VC insiders alike. The Mousedriver Chronicles are a series of newsletters written by two just-out-of-Wharton graduates - Kyle Harrison and John Lusk. It was supposed to be a honest and humorous take on their life as first time entrepreneurs making... computer mouses shaped as golf drivers.
These were the heady days of the dot com boom, when every fresh faced grad with an MBA was opening a portal (I would know some of them too). But these two grads built a company making a cool product, but without any dot-boom sexiness.
The Mousedriver Chronicles is now available as a book, and the much hallowed Brad Feld has it on his read-recently list.
All in all, a good read.

Read more!


[Business] Incidental Prices, Software and Degrees-of-Freedom

There is an interesting story in the Journal of Marketing Research. It talks about the effect of incidental prices on purchasing habits. But are these relevant for software ?
The paper talks about a study about the effects of incidental prices - price of a shirt - on a customer's purchasing decision - purchase of a CD. Both products have nothing in common, but they still affect purchasing decisions.
I was reminded of this feature by Joel Spolsky, software guru extraordinaire. I have written another article,which uses the same source, however in a slightly different context.

As Joel says, software purchases are very dependent on their complements. I like to think of complements as...degrees of freedom. Given a certain product, what are its degrees of freedom. For example, a portable mp3 player can be used to store mp3s and store Powerpoint presentations. So, it has two degrees of freedom. Imagine that I write a piece of software which compresses and encrypts data as it is being downloaded onto my iPod. That introduces a third degree of freedom.
People buy software, when they can increase their degrees-of-freedom at lower prices. How is this relevant? I'd like to take it further by suggesting that people buy software when they can perceive an increase in degrees-of-freedom at lower prices.
So, I may not really have a need for encrypted mp3s... I may also never buy this software. But because I know, that I have an extra degree-of-freedom available to me , that knowledge has an impact on my purchasing decisions - I may actually buy something more expensive, because something else was priced lower. Merchant may be adjusted according to this.
While we are on the topic, we could also analyse another aspect. This is relevant in the context of marketing because the paper suggests that this could be a good way of targeting online customers.
While opening a browser with the intention of buying a book at Amazon.com, a pop-up advertisement that touts flights at Orbitz.com “starting at $124,” could make shoppers less price sensitive.

This trend, if indeed used, could very well backfire. Because, directing airline ads at a book shopper are indeed a poor way of targeting. Moreover, it is not fair to the airline. A much better option would be to identify the book's complements. But, in my limited experience, a textbook can also have degrees-of-freedom. For example, if you finish the First book of Calculus, you may understand the Second Book of Calculus.And , if you buy them both together, not only do you get two degrees-of-freedom, you get a discount!!
P.S. A good article on pricing strategies primer is a feature by Heidi Cohen.
del.icio.us Tags:

Read more!


[Software] Thread and register level debug using Solaris adb

gdb is a good tool..usually that it. But my experience has shown that gdb has issues when the problem is in symbol resolution, traps, etc. which occur at load time.

For example, given an application that actually loads a shared library at run time. If for some reason, there is an issue in symbol loading itself, gdb will not be able to instrument the code properly. Such an issue is not very common, but it occurs in certain cases. For example when you link a static library into a loadable library, there might be issues.

Then there is adb itself. It is not as easy and well documented as gdb. First of all, commands are not stuff like "run", "debug", "break", etc. For example, the command to quit an adb session is $q . Secondly, it has no prompt by default. (You could give it one using the $P command. )

To start adb, you use
adb [binary file]

To run the binary, you use the command

:r [command line args]
On crash, the backtrace comes up using $c


Breakpoints can be set using
function-name + offset :b

The offset is the number of bytes after start of function.
On hitting a breakpoint, the program may be stepped using :s or ,10:s(to step 10 instructions). Program execution may continue to next breakpoint by :c.
At any breakpoint, the program execution trace may be examined by $c. When doing so, often we can see function calls and the arguments passed to them in hex. To view the contents of the address pointed to, by the hex, use (hex value)?s (for address) and (hex value)/s for data. the s modifier at the end denotes values should be shown as string. You could as well use d (decimal), x (hex), etc.

Examining data

To examine the next 10 instructions from current location (breakpoint or abnormal termination point) is <pc,10?ia. The < modifier actually denotes that you are operating on individual registers (in this case the program counter - pc). Now, for example, if you do <o3,10?ia, adb will pick up the value in register o3, look at that address in memory and check if there are program instructions at that memory location. so we are looking at the contents of memory pointed to by o3. To look at the contents of o3, you need to use <o3=x. This will print the value contained in o3.
To print the next 10 addresses , starting from address of function f1 is to use f1,10/ia.

Usually, during debugging, its sometimes good to remember the following info about typical registers:
%l0 %l1 %l2 %l3 %l4 %l5 %l6 %l7 (not affected by function calls)
%o0 %o1 %o2 %o3 %o4 %o5 (used for passing arguments into functions, usually by moving something in them)
%i0 %i1 %i2 %i3 %i4 %i5 (used within a function to access arguments and return values)
%g0 %g1 %g2 %g3 %g4 %g5 %g6 %g7 (globally accessible registers)

At any time contents of some typical registers can be seen using $r or $?
del.icio.us Tags:

Read more!


[Personal, Business] Powerpoint and the art of VC presentations


Office clipart
stock.xchng - for lots of free slide images (wow!!)
Beyond Bullets - for all your un-bulletizing

Brad Feld's article(reproduced here for fear of losing it!!) (also by Seth Levine ??)

- What is your big vision?
- What problem are you solving and for whom?
- Where do you want to be in the future?

- How big is the market opportunity you are pursuing and how fast is it growing?
- How established (or nascent) is the market?
- Do you have a credible claim on being one of the top two or three players in the market?

- What is your product/service?
- How does it solve your customer’s problem?
- What is unique about your product/service?

- Who are your existing customers?
- Who is your target customer?
- What defines an "ideal" customer prospect?
- Who actually writes you the check?
- Use specific customer examples where possible.

- What is your value proposition to the customer?
- What kind of ROI can your customer expect by using buying your product/service?
- What pain are you eliminating?
- Are you selling vitamins, aspirin or antibiotics? (I.e. a luxury, a nice-to-have, or a need-to-have)

- What does the sales process look like and how long is the sales cycle?
- How will you reach the target customer? What does it cost to "acquire" a customer?
- What is your sales, marketing and distribution strategy?
- What is the current sales pipeline?

- What is your cost to acquire a customer?
- How will this acquisition cost change over time and why?
- What is the lifetime value of a customer?

- Who is the management team?
- What is their experience?
- What pieces are missing and what is the plan for filling them?

- How do you make money?
- What is your revenue model?
- What is required to become profitable?

- What is your stage of development? Technology/product? Team? Financial metrics/revenue?
- What has been the progress to date (make reality and future clear)?
- What are your future milestones?

- What funds have already been raised?
- How much money are you raising and at what valuation?
- How will the money be spent?
- How long will it last and where will the company "be" on its milestones progress at that time?
- How much additional funding do you anticipate raising & when?

- Who is your existing & likely competition?
- Who is adjacent to you (in the market) that could enter your market (and compete) or could be a co-opted partner?
- What are their strengths/weaknesses?
- Why are you different?

- Who are your key distribution and technology partners (current & future)?
- How dependent are you on these partners?

- How does this fit w/ the investor’s portfolio and expertise?
- What synergies, competition exist with the investor’s existing portfolio?

- What assumptions are key to the success of the business?
- What "gotchas" could change the business overnight? New technologies, new market entrants, change in standards or regulations?
- What are your company’s weak links?

NWVenture Voice's 5 golden tips (again reproduced here.... apologies..but would hate to lose it)

1. Outline
First, have an outline. Be organized. The best top level outline I have heard it from one of the super masters of presentations, Jerry Weissman. Before you focus on all the snazzy charts, make sure you do the following:
• Tell them what you are going to tell them: Show them where you are going to take them, on the title slide.
• Tell them how you are going to tell them: Have an agenda slide and stick to it.
• Tell them: make sure the body of your presentation always reinforces your opening point.
• Tell them what you told them: wrap up, recap and go for the close.

2. In a nutshell
One great tool for making this organzation stick is what I call the "in a nutshell" slide. This is using your agenda slide to tell the skeleton of your whole arguement. When presenting to Steve Ballmer it often happened that you never got off the first slide after the title, so make sure it really works for you.

Normally, I like to see In A Nutshell slides that act as a template. On one side they highlight, even number the key elements of your story/pitch/arguement and in parallel on the other side they give the top support points in summary. As you then move through the deck you keep the left hand template to reinforce the whole arguement and help people remember where you are in it.

3. Clear, simple case
Show why your company/investment should exist in the first place. Do the simple case using what we call your ABCs or situation/gap analysis. Where:
• A = Today: the current situation in the market/big growing
• B = Tommorrow: the place the market should be/juicy opportunity
• C = Gap: what's missing to get to B/the special play you are poised to make to fill it and win

4. Simple positioning and proposal
Then tell why your way of filling this gap is better than everyone else's. One simple outline for this is what we call the XYZs - "We are the only X company/product that solves Y customer problem in Z unique way," where
• X = your category: critical for VCs, we need to put you in some box, to make comparisons; never invent a category, improve one.
• Y = the target: the buyer, the person who actually writes the check, great if you actually have some.
• Z = your differentiation: your advantage, or the key positive distinction you have over your competition.

It also helps if you can back all this up with real support, like your team's track record, customer traction, a real competitive analysis (thier ABCs), etc. A demo is not enough. Proof is better than claims.

5. Best foot forward first and strongest
Tune the organization of your story to the stage of your company. And always put the strongest stuff upfront.
• An EIR: It's all about YOU and the market opportunity/competitive gap.
• A seed: It's all about initial market validation (quotes from friends with important job titles in your target customer's industry), then about the product spec, the team and the above.
• A round: It's all about initial customer traction and economics - some demonstrated willingness to try and pay - show the best real numbers you have, then about the product itself relative to others, then the above/
• B round: It's about momentum - show the sales numbers, the trends and the economics, then all the above.

Then of course have a well thought out and agressive enough ask.

del.icio.us Tags:

Read more!


[Personal] Media Lab Europe to close down...

One of the places, I so wanted to work at. Great and eclectic bunch of people. Which is always a good thing. Except for one thing.

Leaders and Vision

Media Lab Europe R.I.P
Read more!


[Business, Asia] CIA's strategic 15-year vision document

The National Intelligence Council's document on Project 2020 highlights the possible growth of Asia, and especially India, in the next 15 years, in all fields including .

As expected, China will become the second biggest defence spender after the USA. However, the most interesting aspect was the future of global and asian business. China will continue to be the engine for world business growth. However the existence of strong domestic capital markets in India coupled with a strong knowledge based economy will cause India to retain stability in growth.

To justify my assertions, I decided to take a look at Manufacturing News. An interesting news was the relocation of chip manufacturing fabs from Taiwan to China. Since, I have an insiders knowledge of that particular industry, I know that Taiwan is famous for its reliant chip fabs. TSMC is well known for its Reference Flows which validate approved design flows for tape-out. Which makes this move all the more surprising. Why?

Another news source I found, refers to a proposed 2.4 billion USD investment by the Chinese Govt. in power. Fabs are ultraclean environments, and extremely power hungry. Enchancements to infrastructure by the Chinese govt. come as a lifesend to the chip manufacturing industry.

Simultaneously however, a parallel news item listed the growth of the Bangalore Intel design centre as the largest design centre outside the US. What does this imply in terms of economic stability?

A chip manufacturing plant is much more human-resources intensive than a design centre. Any fluctuations in global technology markets will be much more pronounced in China, than India. According to Goldman-Sachs, India-China business is projected to rise fast from the 7.6 billion USD, it is now. This growth has to be in conformance with the synergy of knowledge and manufacturing industries working together.

One of my earlier posts makes a case for startups in India. What worries me about China is the manufacturing base. In a good year, their capital returns would dwarf India's. However, this capital may be used to power their own knowledge economy. There's only one thing we can do - never stop running.

del.icio.us Tags:

Read more!


[Business, Software] Developers, Open Source and Complements

Ed Sim of Dawntreader has a post about roping in developers as a "buzz"-generating mechanism for new projects. He says
While it is imporant to court developers and technologists in the sales process since they typically have to give the technical buy-off and can just as easily squash an opportunity, it is not a great and economical use of time to have your most expensive direct sales resources and sales engineers doing this.
Enter the web and the open source movement.

Interesting. However, going through his post reminded me of another post by software guru Joel Spolsky. In his article, Joel talks about substitutes and complements. For example, consider a graphics card by nVidia. The sales of this card will go up, when its complements (read computer games) become cheaper. What's the point, you ask...

Using the web as a platform for building community is well and good. But, what are the complements of a brand new product - nothing. For example, I could develop a device which connects my iPod to record my radio shows. Will it sell? I dont know..even though in itself it is a complement to iPod, I still have to create its own set of complements.

Can I depend on the developer community to do it for me. Nope. There has to be a momentum, which has to be created by the creators. So for example, if I had used a hackable linux kernel in my device - I could write modules to compress the stream on the fly/encrypt it/broadcast it to multiple receivers. Can I now depend on the deveopers? That depends on how much you maintain the momentum.

One of the best lessons I learnt from my Big Boss was "respond fast and release often".

Which brings us to a quote by Joel:
..when an economist considers price, they consider the total price, including some intangible things like the time it takes to set up, reeducate everyone, and convert existing processes.

Creating a web based community is well and good. But a community withers out fast if there is no training/support. Companies may think that they have a cheap medium of the internet for marketing/sales. But customers now expect faster and faster responsiveness to issues. That does add on to cost.

The web can never equal an attentive salesman who can sense body language. Its what I have learnt from deploying applications at customer sites.

del.icio.us Tags:

Read more!


[Software] Functors and expression templates

Consider a scenario in which, given a graph, you have to traverse it. How do you do it - write a function. Now consider a situation, in which only those nodes of a graph have to be touched which have a weight of say 8. Again, very simple - just pass an argument to the function (of value 8).
But what if, the function is actually a callback. That is, the function is passed to another function. In such cases, it becomes difficult in terms of maintainability and performance (more on that later). Now, if you could somehow create a function with state, the above becomes so much easier. Enter functors....
Functors are also frequently better performing than functions.
Stroustrup says:
"A suitably-defined object serves as well as - and often better than - a function. For example, it is easier to inline the application operator of a class than to inline a function passed as a pointer to a function.
Consequently, function objects often execute faster than do ordinary functions." Stroustrup, TC++PL (3d. ed.), Sec. 18.4, p. 515.

Functors can also be used in recursion. It took me a while to figure out the correct syntax to do this:

class sssFactorial{
int operator() (int val){
if(val==1) return val;
else return (val*this->operator()(val-1));

This is well and good, but as we can see it is not exactly very trivial to construct functors as compared to plain vanilla functions (writing those extra lines will put a strain on your poor fingers).
There are two ways of handling this - generating functors by using:
  1. Functor binding
  2. Expression templates
Functor binding essentially binds a binary functor (which takes 2 arguments) into a unary functor (which takes one argument). How is this good you ask - how can reducing the degrees of freedom be any good, right?
Binding may reduce degrees of freedom, but it makes a new functor from an old one.
Suppose you were given two functors prod (to find the product of two parameters), div (to find quotient of two parameters)- how would you make a functor that creates (x*b)/c
f=bind1st(bind1st(div(),b),c) ;
Now, f(x)=(x*b)/c

(The C++ Standard Library also has the compose functor which is powerful still)
Expression templates is a C++ technique for passing expressions as function arguments. A compliant compiler would be able to inline all the expressions (without the need for temporary variables), thereby speeding up code.

Expression templates are one of the most powerful features available in C++. Consider a matrix or vector operation of the form

X=Z*Y + Y,
Where X,Y ans Z are matrices.

In this case, at each step of the computation of the mathematical expression, temporaries are created, each of which is of matrix size, which hogs the available memory. However, it is possible to decompose this complex operation into mathematical expression involving primitive ints/floats (i.e. actually determining the matrix formula for calculating each element of the resultant matrix). This is good, very good...but..not very maintainable (the horror..the horror)
Enter expression templates.
Expression templates allows the compiler to generate a compile time tree of expressions. No more trying to write large expressions, the compiler does it for you.
Along with inlining most of the functions/functors used - producing faster code.
For a valid, compilable code - see below...way below.
For example several high performance libraries for matrix operations use expression templates (for example, MET ).
Expression Templates are a great way to calculate matrices, with great performance.

In EDA, matrixes are used for simulation, for functional verification, petri nets and hundreds of other applications. Cool..or what!!

Code for a sample expression template - just gives value of x*4

#include <iostream>

#include <stdio.h>
using namespace std;

template<class A>
class Expr{

Expr(const A& a):_a(a){}
//needed for variable
int operator() (int x){
return _a(x);
int getVal(){return _a;}

private :
A _a;

class Variable{
//no constructor needed, since this is a variable
public: int operator() (int x){ return x;}

class Constant{
Constant(int a):_con(a){}
int operator() (int a){return _con;}

int _con;

template <class A, class B, class Oper>

class BinaryExpression{
BinaryExpression(const A& a, const B&b): _a(a),_b(b){}
// The functor calls a static inline function

int operator() (int x) {
return Oper::apply(_a(x), _b(x)) ;
//remember _a and _b need not be constants, they may be expressions.

A _a;
B _b;

class Multiplier{
static inline int apply(int a, int b){
return a*b;

template <class A>
Expr <BinaryExpression<Expr<A>, Constant, Multiplier> >
operator* (const Expr <A> & e, int val){
//The most important line. This creates BinaryExpression object,

//wraps it in a Expr and returns it.
//While doing so, it wraps the constant operand in a "Constant" object.
//The Multiplier functor is passed to BinaryExpression for evaluation.
return Expr <BinaryExpression< Expr<A>, Constant, Multiplier> >
( BinaryExpression<Expr<A>, Constant, Multiplier > (e,Constant(val)) );

//the evaluation function.
template <class anything>
int evaluate(Expr<anything> e, int val){

int main(){
//We create a variable and use it.
Expr <Variable> x;
evaluate(x*4, 5);

del.icio.us Tags:

Read more!


[Business] Stanford Edcorner

Found this great site on stanford :
21 lectures by Vinod Khosla!!! wow
Read more!


[Business] Financing for startups

Brad Feld has a great post on venture financing and term sheets for startup funding. He calls it ne of his super-top-secret VC magic tricks .
Brad writes about pre- and post-funding valuations of startups. An important point he made was that increase of a stock pool would reduce the valuation. A stock pool is increased at valuation time to make accomadation for employee compensation. I can understand how this can dilute the investors share of the pool, but I dont understand why the overall pool must drop. Here's an excerpt from his post
...note that the size of the pool is taken into account in the valuation of the company, thereby effectively lowering the true pre-money valuation.
Another piece of advice that he wrote about was about steering clear of warrants in first round of funding. Which made me really curious as to why. On further study of other sources, I encountered other jargon - bridge loans . Putting it all together, I understood that all these are becoming more commonplace these days with VC's demanding "staged investment". I can personally identify with these VC's since technologies like mine (EDA) are very niche and customer driven. Without proof of a concept on core technology, or milestones in terms of actual deployement in companies, it is very difficult to part a VC and his money. However, there is a variation to this concept, wherein the VC invests the full capital in a given round, but may require anti-dilution warrants that are triggered if certain targets are not met by the management.
In certain cases, the VC's may extend loans, as a stop-gap measure in between series of funding. For these types of investments, warrants are issued which give the lender the option to make an additional investment (at terms which are established in the next round). This is beyond the fact that the principal and accrued interest are converted to stock in the next round.
I suppose that complexity is the real hurdle here. But at the risk of sounding juvenile, is accepting a lower valuation in exchange for no warrants a good thing. Previous valuation act as a benchmark for the next rounds of valuation. I would rather say that warrants would be necessary if both you and your VC's want a closely knit family. Personally, I would rather issue warrants to VC's who get what I am doing, rather than worrying all the time about valuation. I believe there is plenty of money for everyone.
I think Feld hits the nail on its head in his last paragraph - choose your early investors wisely, they can hurt next stages of funding.

del.icio.us Tags:

Read more!