Is it possible for the traditional startup / venture model to succeed when building community products? I don't know.
Looking past the bubble-inducing imagery seen in the link below, I think the "bloggers" in the following Big Idea broadcast ask interesting, albeit potentially misguided questions: http://search.redlasso.com/ClipPlayer.aspx?id=55176735-b7cc-4661-899f-f02317734444
They ask and assert:
How do you get it to the mass market? How many to sell the first year to survive? How many friends will own one? A lot will depend on pricing. The market's not big enough.
Most of these questions are off the mark, since the premise is that differentiated consumer products address a long tail of needs (not mass market). The one point I tend to agree with is pricing, since the community of DIYers tends to be very price sensitive.
After watching the video, I walked away with three impressions:
1) Hubris - why is it that every time I watch an entrepreneur, they're super confident and egomaniacal? What happened to the charismatic leaders in Jim Collins' "Good to Great"? Where are the closet geniuses, the garage tinkerers, and the purely curious?
2) Disconnection - why is it that I somehow do not "connect" with the personalities in that video? I'm a voice in the community, and I can say this much; I don't feel motivated to join them just to be another cog in the "crowd".
3) Disappointment - I work hard for my money, and I want it to support a real cause. Spending money to satisfy price premiums imposed in order to fulfill venture investor return requirements doesn't get me as psyched as it used to.
Something is missing. I wish I knew what it was. I think it's a structural problem. And somehow, I have this nagging suspicion that traditional VC isn't the right way to go for community-oriented companies. I'm inclined to think other models may be more appropriate. I wish this entry had a solution, but at the least I'm now motivated to find one.
Wednesday, February 20, 2008
Tuesday, February 19, 2008
Arduino Software Serial Correction
Looking through the Arduino libraries, I found "Software Serial" to be very useful. Serial communications in software (bit banging) should be checked for correct bit timing especially if multiple baud rates are used. Optimizations in the compiler, 16 bit numbers, and interrupts can create bit timing errors that will reek havok in communications.
So I decided to check out the Arduino's (receive) bit timing on a scope.
The picture below shows the receive routine (incorrect) timing,
When receiving, you try and read the pin at the middle of the bit. Which is, once you see the start bit, wait 50% of the bit time, then take a reading. Notice the middle of the scope pic above how the pin is being read incorrectly. It sampled off the edge of the bit resulting in an incorrect read on the 3rd bit.
With the corrected (fixed) bit time,
Notice the reads much more closer to the center?
That was for 9600 baud. The following code should receive correctly for bauds up to and including 14400
So I decided to check out the Arduino's (receive) bit timing on a scope.
The picture below shows the receive routine (incorrect) timing,
When receiving, you try and read the pin at the middle of the bit. Which is, once you see the start bit, wait 50% of the bit time, then take a reading. Notice the middle of the scope pic above how the pin is being read incorrectly. It sampled off the edge of the bit resulting in an incorrect read on the 3rd bit.
With the corrected (fixed) bit time,
Notice the reads much more closer to the center?
That was for 9600 baud. The following code should receive correctly for bauds up to and including 14400
int SoftwareSerial::read()
{
int val = 0;
int bitDelay = _bitPeriod;// - clockCyclesToMicroseconds(50);
// one byte of serial data (LSB first)
// ...--\ /--\/--\/--\/--\/--\/--\/--\/--\/--...
// \--/\--/\--/\--/\--/\--/\--/\--/\--/
// start 0 1 2 3 4 5 6 7 stop
while (digitalRead(_receivePin));
// confirm that this is a real start bit, not line noise
if (digitalRead(_receivePin) == LOW) {
// frame start indicated by a falling edge and low start bit
// jump to the middle of the low start bit
delayMicroseconds((bitDelay/2)-25);
//digitalWrite(3,LOW);
//digitalWrite(3,HIGH);
// offset of the bit in the byte: from 0 (LSB) to 7 (MSB)
for (int offset = 0; offset < 8; offset++) {
// jump to middle of next bit
delayMicroseconds(bitDelay-14);
//digitalWrite(3,LOW);
//digitalWrite(3,HIGH);
// read bit
val |= digitalRead(_receivePin) << offset;
}
delayMicroseconds(_bitPeriod-8);
return val;
}
return -1;
}
Labels:
Liquidware
Subscribe to:
Posts (Atom)