James Frullo’s Posterous

Computing, the Internet, finance, and being married with children...in other words BORING 

C++0x makes me want to vomit

I know I've been coding C++ for too long, or perhaps just long enough, because it was only recently that I realized what a horrible language it really is. And I'm pretty sure it was r-value references in C++0x that put me over the edge. That was when I realized that an incredibly complicated language, one that is so utterly fraught with programming perils, was about to get even more complicated.

C++ allows for infinite variation in programming style. The only way to effectively code in C++ is to live by some (often ad hoc) set of rules. Because the language is like a labyrinth. There are so many possible paths, almost all of them leading to certain doom. This is great for authors and "language lords" who love nothing more than to bloviate and pontificate on the most minute details of template meta-programming and parameter passing conventions. But for those of us who use programming languages to get work done, to satisfy real-world requirements of money-making enterprises that contribute to the growth the world economy, this sort of complexity is a productivity killer. We only have to read 10 to 20 books and practice for 2 to 3 years before we acheive mastery of the language. Those of you who have actually acheived that level of mastery know I'm not exaggerating. Those of you who haven't are probably writing code that works most of the time, but fails catastrophically and inexplicably in some small set of cases.

If you go and read about r-value references and move semantics, you'll see what I mean. Is this something you're going to be able to easily design into your next API? The truth is you are best advised not to touch such new features until the very best experts in the field are done figuring out some rational design patterns that make use of them. If you're not in an industry or company that's an early adopter of technology, C++0x won't really affect your development until 2020 anyway.

C++ is still lauded as the best language for writing high performance software. But far too many put an impractical emphasis on performance, and don't spend enough time considering the trade offs. How much time do C++ programmers spend debugging memory leaks, stack corruption, and heap problems (including, ironically, poor performance surrounding memory allocation)?

Comments [0]

Jeopardy Answer

Contestant: I'll take feminine hygeine for $100.

Trebek: That's the video daily double! Take a look at this picture.

Contestant: What is the world's biggest douche?

Comments [0]

Wolfram Alpha proves that search isn't just about web pages

I've been using Wolfram Alpha since it came out. I used Google Chrome to make a special application shortcut for it. I find I've been using it on a regular basis to look up facts, and just facts. As one might expect, the mathematical capabilities are top notch and not something that any other web search application could easily match. Alpha is useful as a Mathematica in the cloud that doesn't cost $1000. Just for that, this application is worth "installing" (I the cloud.). But sometimes I'll pop it open to lookup the distance between 2 cities (and I just noticed the other day that when you do this, it also gives you the time for light to travel that distance through fiber and through vacuum), or the capital of a country (yes Google can do this, but it doesn't show a map of the country along side the answer letting me know where in the country the capital is located).

So although Google is my search engine of choice, I use Alpha for some particular things. That's all that Alpha was trying to do in the first place - not be a Google killer - just be a "knowledge engine". (As an aside, Bing calls itself a "decision engine" to entice people to start using it for certain tasks, but it is certainly a web search engine.) Alpha does not exist to search the web or even to find information that exists on the web. It exists to be a knowledge base. It exists to provide answers to quantitative or objective-fact questions. It does a competent job at this.

Wolfram Alpha certainly reminds us that search isn't always about finding web pages. Google has known this for long time, and that's why when you search "weather in new york" you get an answer as the first result. However, Alpha takes this several steps further. Searches on Alpha don't even yield links to external sites. The idea is that if Alpha can answer your question, you don't need to search the web; and if it cannot, then we still have Google and Bing.

But even beyond that, Alpha goes much further than just providing the information you were looking for. It often provides much more than you were looking for, and sometimes opens your mind to the depth of the topic. When you search "new york weather" on Alpha, you do get the current conditions, but you also get a historical graph of intraday temperatures for the last week as well as historical highs and lows. This is where Alpha's value as a learning tool becomes clear.

So I definitely recommend Wolfram Alpha, but don't expect it to be a search engine. I'm really excited to see where Alpha will go.

Comments [0]

How about conserving labor?

15% of all jobs are destroyed each year in America (economist.com "Creative destruction"). Isn't that horrible? Isn't our country in trouble?
 
But before you panic, let's entertain the idea that this job destruction is a good thing. I mean with all the talk of going Green, haven't we learned to conserve our scarce resources? Of course I'm talking about labor as the scarce resource. What's so bad about conserving labor?
 
Okay, okay, a person loses his job. That's only bad if it actually happens. You'd have to assume that destroying a job means laying someone off. Actually, that person might be laid off, and that sucks. But he might also be kept, retrained, and repurposed to a new task. If he did get laid off, then he'd very likely be retrained and repurposed anyway at some other organization. After all the goal of conservation is not to eliminate the use of a resource, it is putting the resource to the most efficient use (or at least that should be the goal).
 
What makes me so sure that person wouldn't just go homeless and finish out his life under a bridge somewhere. Because even though on average 15% of all jobs have been destroyed each year for the past 25, the economy hasn't collapsed and my mom, dad, family, and friends all still work (okay my dad's retired).
 
Many more jobs are created each year than are destroyed, as it turns out. So as far fetched and difficult to grasp it is for some to imagine how human beings can learn to do new things and then do them and sometimes even get better each day, it's happening constantly at each moment of the work day in America. Thing is, a lot of people won't just take initiative and learn another trade because they perceive the market has a greater need for that new trade than their current one. It sometimes takes a little push, like getting laid off, to provide the incentive to learn more about the job markets and invest in retraining.
 
Shouldn't we care about those temporarily harmed by all of this "creative" destruction? Yes, of course we should. But let's recognize all of the great things about the dynamism of the American economy. It is incredibly efficient when a business can turn around tomorrow and decide to stop making parts for coal burners, and start making parts for wind turbines. This flexibility means people will have to laid off sometimes. But what we as responsible citizens can do about is to push for subsdies for worker retraining so displaced workers can learn a new trade while they collect unemployment. That would just make our economy even more efficient.
 
Just don't believe that conserving labor is a bad thing.
 
Sent via BlackBerry by AT&T

Comments [0]

Update: Google Voice IS available on my phone

Gee, Google must be following my updates. They released their mobile app today!

Comments [0]

Google Voice Screenshot

A screenshot of my Google Voice inbox (with phone numbers removed for my protection).

Comments [0]

I'd like to Google Voice my concerns

Last week, Google invited me to try out their new Google Voice service (previously known as Grand Central). I was really excited to get this invite. After trying it out, I like it, but I really want more.

First, I got to choose my own phone number. This was really easy to do. I was given the choice to get any available number in the area code of my choosing. And they make it easy to find a memorable number by letting you use letters to select.

Once I secured my number, I had to set up a phone to forward calls to. This was pretty seamless too. Mind you all of this was happening interactively in the browser, including different buttons being enabled upon answering my phone when Google placed its number verification call. Sometimes I'm amazed how far the browser has come. In fact, I pretty much expected it would work at that time. The UI feels pretty solid and responsive.

After setting up my phone I immediately tried calling my new number, and tested my new voice mailbox. That all went smooth. Finally I got to the innovative features, like the speech to text voicemail transcripts that appear in your voice inbox, and also get sent to your GMail inbox. The transcript feature worked perfectly for the voicemail I left myself. However, when I asked my wife (who has an accent) to try, transcription failed completely. I just saw a message saying the transcript was unavailable. That is probably a good thing. I'd rather not have a transcript than have a butchered one. Seems like they've got some quality score filter.

I did appreciate the GMail integration. They even integrated with my Google contact list. So I got to see my wife's and my icon next to messages in my voice inbox. But where this is really useful is in the personalization features. With Google Voice, the killer feature is personalization. I can set up custom voicemail greetings for individuals or groups, like "Friends" and "Family". That's pretty sweet. But you can also route calls depending on person or group. So if you want your mistress to ring only your mobile number, or go only to voicemail, Google can help you hide your tawdry behavior. You can even listen in to voicemail as it's being recorded to screen calls.

Note that you can set up many phones with your Google Voice and set up forwarding to any number of them. So I can make it so calls from family go to my landline, my mobile, and my wife's mobile.

On top of those features, Google Voice gives you a cash account that you can fund to make international calls. And you can set up calls, operator style, from the browser console. You can also text message from the browser console.

All in all, I was quite happy with it just trying it out. How it holds up to real day to day use remains to be seen. But I do wish they had a mobile app. There's clearly a need to manage the account from your mobile phone, and they could easily do "visual" voicemail like the iphone. I guess that'll come to android phones first.

It's surprising when you consider that this sort of innovation doesn't come from the telecom companies. How ironic that Bell Labs came up with many of the great ideas of the information age, but it takes a dot com to rethink voicemail and call routing. Go figure.

Comments [0]

Screw Unix, Windows rocks

And you've already labeled me an idiot. Yeah, all you Unix zealots
that love your precious zsh more than your spouse, you think I'm a
moron for liking Windows better than Unix. While I'm at it, I'd rather
listen to Britney Spears' Circus album than The Beatles' Sergeant
Pepper. Admittedly, I'm not a great music connoisseur, but I am a
software expert. So while my lack of taste in music could be chalked
up to ignorance, what should you make of my taste in software?
 
I can hear that smug tone and see that arrogant grin. "The design of
Unix has stood the test of time. It's beautiful in its simplicity and
elegant in its uniformity. What can you say about your ugly,
complicated, bloated, slow Windows operating system?"
 
The truth is I can say a lot of things to defend Windows against the
most common criticisms, much of them ill-informed or ridiculously
idealistic, but I'll save that for another time (besides, it would
fall on deaf ears). The reason I like Windows is not because of an
elegant design that stood the test of time, but because of its
practical design that stood the test of the market. I can already hear
the geeks, "that's only because of Microsoft's anti-competitive
practices." Microsoft deserves criticism for that, but I don't agree
with the view that Unix would have triumphed on the desktop if not for
anti-competitive business practices. I've used desktop Unix products.
I cheered them on. But I was always relieved to return to the comforts
of my Windows install after vacationing in Unix land.
 
The main problem with the "Windows sucks" attitude is that it's
dangerous intellectually. I have seen Windows haters make dumb
mistakes developing for Windows because they failed to understand how
some things are fundamentally different. Like using a named semaphore
and running into problems with 2 copies of their process running. They
meant to have one semaphore per process, but didn't understand how the
name was used. In fact, they probably should have used a critical
section, but again, they don't understand the difference. Any
difference from the way Unix works is because "Windows sucks".
 
Some developers fail to accept that although some things about Windows
are less than ideal, that doesn't mean the whole thing sucks. Most of
those same developers go to work every day creating software that
attains an entirely new level of suck, and makes the design of Windows
look positively sublime.

Comments [0]

If you like it, you shouldn't put a ring on it

As I watched "Single Ladies" while on the cross trainer at the gym today, it occurred to me how ironic that song is.  What is so amazingly cool and compelling about that song and video is that it features these three gorgeous, confident, powerful, single ladies. Single ladies. That's crucial, isn't it? If it were three plump married ladies, the song wouldn't quite have the same effect. It's hard to escape the fact that being single provides a significant incentive to staying attractive to the opposite sex. So if you "put a ring on it", you might just kill it.

My advice then: if you like it, you shouldn't put a ring on it.

Comments [0]

Start planning version 2 now!

Corporate finance teaches us that one should choose to undertake a
project if it has positive net present value. How does this help to
answer the question of when to start planning for version 2 of a
flagship product? It's simple really, and the answer is you should
always have version 2 in the pipeline.
Any software manager ought to know that as after a prduct is released,
the cost of fixing bugs increases significantly. As soon as version 1
goes out maintenance cost begin climbing. Then, as incremental
features and functionality get tossed in through minor releases, the
cost of adding more features tends to rise because the system is
growing more complex as it is stretched to do more and more it was
never originally designed to do. That increased complexity, I promise
you, will result in ever increasing maitenance costs.
Many software vendors will keep the lights on for version 1 for as
long as they can, as if it were their old childhood home. These
vendors are generally mature and well established and so
understandably conservative and risk averse. However it is my
contention that they are often irrational in their level of risk
aversion.
If the costs of continued development of version 1 is continually
increasing, as I claim it is, then the net present value is
decreasing. Version 2 of the product MUST have positive net present
value because (if designed correctly) it is essentially the same
product except with more features and flexibility (although likely
somewhat less performant ;) ). So there is some point at which
version 2 has a bigger npv than continued version 1 development. This
is the part where some firms display irrationality, because at some
point, the only way continuing with version 1 can only make sense if
we assume a huge discount factor for version 2 npv. In other words
the assumed risk involved for developing version 2 would have to be
ridiculously large.
So if you agree with my analysis so far, you still aren't convinced
that now is the right time to plan for version 2 because I've only
argued there exists some date when it makes sense to develop version 2
(even this seemingly obvious point is denied by plenty of myopic
managers). Now I have to try to persuade you that it makes sense to
begin planning version 2 immediately. For this, I won't talk npv, but
I will talk economies of scope. If you are already going to pay the
fixed cost of designing version 1, there is savings to be achieved by
also doing some design work for version 2. We almost always think of
features we know would be a stretch to include in the current version,
but could go into the next, so to some degree this is always being
done. But since we know we one day will develop version 2, there is
bound to be some savings realized if planning begins immediately
thanks to scope economies.
Far too many software managers don't have a long-term strategy and
simply live for the next minor release. That's a trap. If the
manager is lucky, the same kind of crappy management exists at the
competitor.
 
-- Sent from my mobile device

Comments [0]