December 26, 2006
Time-wise, its all about the same - the only posts that take more time than the average e-mail (or two, maybe) are the coding-type posts, which are few and far between. Verbosity has never been one of my personal challenges :)
Still, I'd rather be concise - "Brevity is the soul of wit", and all that. There's some positive reinforcement that you'd think would help me: my smaller articles and posts tend to generate more comments and discussion - seems to be less interest in my more wind-bag-y dissertations.
On balance, that's probably because (a) the smaller posts get read more - "economy of motion" in action, and (b) they get misunderstood more - that is, people read what they want into them, which always makes for good fun. Or it could be because (c) my "insights" are, well, a bore :)
And that's all I have to say about that.
(Except to mention that this post title is not SEO friendly :P)
December 20, 2006
I was looking for a 3D appplication to play with some things, and noticed that (it appears) Amapi 3D is no longer on the market.
Amapi was a Mac 3D modeler (from back in the day), with a killer innovative "workbench" UI and a gestural interface. It was a enjoyable, useful product, but got squeezed quite a bit (along with a lot of other rich authoring tools) as people moved from productive to consumptive behaviours with the explosion of the Internet (not to mention the time-coincident shift from Mac to Windows - a move from which many Mac products never recovered).
Amapi survived though, moving through various acquisitions and continuing to improve and innovate through the years- its a little sad to no longer be able to find it.
But as good as the product was (and I loved it), the best part was the name. It was (originally) developed and marketed by a French company called Yonowat.
(or, in English: You know what? I'm happy)...
It's the little things, you know :)
December 19, 2006
So.... not bad.
I've been playing with the Microsoft WPF/E CTP a little over the last week-ish (its a slow time of year), and I thought I'd post some early thoughts. These are mostly a ramble - no particular point that I'm making, and it might not be entirely coherent.
Appears to be a pure software rendering pipe (that is, there appears to be no Hardware acceleration in this CTP). Good antialiasing quality - appears to 4X oversampled in the y-direction and analytical in the X. As with GDI plus, I think they botched the texture sampling rules. Its a little better than GDI plus was, but still wrong (IMHO) for resolution independent UI - which of course, is a big part of the goal. Macromedia got this right (at least, starting with Flash 8). Although its a software rendering pipeline, it also looks like WPE/E employs a front-to-back display (or some form of overdraw prevention, at least), and performance is pretty decent - though I haven't stress tested complex shapes or the like yet (Updated: I tried, and failed, to load the simplest benchmark - must be a point limit, though I couldn't find any documentation/info on that).
And no 3D support.
No controls (buttons, menus, text edits, etc.) are present in this CTP - you get events, and you get shapes and images (textures), so... hard to say much about this yet. Startup time for the WPF/E plug-in appears good - the header of theWPFblog (appropriately) is WPF/E, for example, and loads nicely/quickly - WAAAAAY better than .NET 3.0/XBAP (e.g. try this sample).
Still, I think the packaging streaming model, although goofy in Flash, makes it much easier for developers to explicitly control and manage assets loading. It will be interesting to see how important this becomes in the real world for building larger scale applications - I think Microsoft is at major experience deficit in this one key area.
Animation is a bit odd still, and the property/element "." syntax rules still throw me a bit...
Documentation and SDK - really nice.
Pretty much most of them could have been built trivially in Flash, or even DHTML. Even the Page-turn example is mostly about clever content (for example, the shading is a part of the ARTWORK). Not one example shows the expressiveness potential of the runtime. Most of these HTML samples are more inspirational. I realize this is just the first CTP - but *ONE* killer sample would have been nice.
The language is nice and expressive - its pretty easy to get started and build "rich" interactive content. If you're starting from scratch, much easier than Flash, Flex, or DHTML even. The browser integration and support for multiple platform (browser and OS) right out of the gate is a good move. CLR integration (and the release of the mini-CLR) is the big "FUD" thing we're all waiting for, I think. The code-behind model really leverages the excellent "first class" host DOM integration. Plug-in size and updating may be an issue, but its early enough that I'll reserve judgment on that. Currently, the IE control is 1.1 MB - the other variants (browser and OS) are quite a bit bigger.
All in all... a decent first CTP - looking forward to more... and some clearing up of the massive general confusion about how WPF, .NET 3.0, XBAP and WPF/E are supposed to fit. Everything I've seen so far seems to be after-the-fact rationalizing of internal competition and overlap.
December 14, 2006
December 13, 2006
Its a tough thing, but it is a [media] business... and costs have to trail revenues :/ - though knowing that doesn't make the human component any more palatable, and I do feel AOL tried to make it as right as possible, all things considered.
I was also sent this today (I don't know who the original source was - I got it from someone no longer at AOL) ... It's in clearly poor taste (but still funny) - some employee's reaction (that last one had me in stitches) - in the category of gallows humour, I suppose.
December 12, 2006
Though I intuitively understand it (and believe it), I've still yet to see a reasoned justification as to why we need scripting languages? Is the compiler that much a barrier to productivity?
Otherwise - some nice additions to Java 6 (especially the XML APIs, which, like E4X, are critical for easing web services development - nice), but despite them, I think Java 6 moves it further away from a credible client-side computing platform - too much increasing complexity, which creates distribution issues. I think Microsoft's mini-CLR is a better step in that direction. Open source and mobile/phone development may change that for Java, but I think a variety of factors will continue to impede relevance in that space.
December 11, 2006
(Armughan has a picture).
Everyone keeps asking me what I'm up to next. I have some definite plans... but none concrete at this time, and I hope to keep it that way for a little while yet. At a minimum, not even close to ready to discuss it yet :)
Meantime, you can find me here.
1) They say all truths go through 3 phases - first ridicule, then violent opposition, and then self evidence. AOL's getting through its truths, and that's a healthy thing. Good luck and good wishes. I think the company has the assets to be successful. I hope that it will.
2) Always good to remember: At software companies, the intellectual capital is in the people, not the code, and not the products. At software companies.
December 6, 2006
(Note: The Wii clip below is a spoof - but be warned, its a little sexist/sexual)
December 4, 2006
Adobe's Apollo is due early next year, as is a more functional (read: useful) XULRunner from the Mozilla foundation. But first out of the gates is Microsoft with their cross platform web content runtime framework: you can now try out WPF/E. Read more here.
At least from a "promise" perspective, WPF/E more squarely what Avalon - now WPF in Vista - or even ChromeEffects (for you old-timers) was going to offer, but, significantly, this is cross-platform from the get-go. The "E" is for "Everywhere". And just to prove it, the CTP is available for Windows and Mac OS X (well, Safari on OS X anyway).
I'll post some thoughts later this week after playing with it. As I've mentioned before, the evolution is towards general purpose computing technologies to make rich application distribution instantly ubiquitous. There are some significant and interesting technology choices that imply certain classes of applications and uses... more on this in the future. Confusingly, WPF will ALSO run in your browser and enable web applications but only on Windows, and its, uh, somehow different than WPF/E, and, uh, richer (?) somehow... though neither is a subset of the other... yeeeeahhh.... quick over there! Linux is eating your IP!!!! .....
Of course, still an open question is what "rich" really means and if people really care at all ... :)
My (biased) guess is that it does, but our current generation of applications and infrastructure (not to mention imagination) just isn't there yet. After the fact, I think we'll go "of course!" (iPod anyone?)
(and oh, btw, this was the idea with Boxely and the OCP, too, but... cie la vie :))
The closest thing I could find for C/C++ was the ICU library from IBM. While its VERY complete and functionlly rich - oh my god is it huge and complicated!
In the past, I've had to write my own (simple) functions to deal with really exactly the cases I needed, but, this being 2006, I thought I could find some nice publicly available routines to deal with this.
Not so much.
There's definitely code out there, but either by license or implementation, its bound up in ways that make it not so useful... so...
...I think I'm going to have to roll my own on this (again), which I'll then release source code for publicly - something simple, but hopefully more useful than what I've seen. Anybody have/use anything they like better that's already out there, let me know please... save me the hassle :)
As far as I can tell, here's what it takes to decode a single UTF-8 character:
Ouy!! ...and its not even "fully" right for the invalid/stict case - there are invalid bit distributions within the byte group ranges.
And UTF-16 isn't much better... it's a little less code, but FAR more complicated in logic. Originally, it was intended to be 1 code point per unit (an unsigned short), but that become untenable over (a short amount of) time, and so they introduced support for multibyte surrogates, just like UTF-8. But because it had not orginally been designed for UTF-16, it used some odd ranges to support them (one of many reasons I don't like it). So THAT code, to decode a code point from a UTF-16 stream, looks like this:
And all this just to decode ONE codepoint... of course, if you've ever actually looked at the algorithmic complexity of converting a floating point number to a string (even most veteran code monkeys haven't)... well, you start to appreciate the value of a good code library.
Anyway, I want length, count, cat, copy, compare (case sensitive and not), at least, and probably one or two other classes of functions (conversions betwixt UTF types certainly, but that's reasonably there already, if a little "stricter" than necessary). Locale code pages I can do without .... I'm looking for "pure" Unicode functionality in a lightweight package.
November 30, 2006
Again, sounds dumb to say, but change doesn't mean "well really kind of the same"... so, kudos - to both Vista and Office launching (well, sorta), on the same day no less. Both products genuinely are a major achievement that balance familiarity with forward movement pretty well. I don't love the real estate compromise(s), but I'll get over it - it does bring forward a LOT I didn't tend to remember to use in the Office Suite.
Interesting in all of this is MS's attempt to proactively control the IP surrounding the product's "look and feel" with their Office UI licensing program - I particularly like how they're willing to "share their invesment". Thanks guys! (*cough* zune *cough*)
I also particularly like the last answer in this interview with the PM for MS Office:
"A: Historically, most of the more substantial UI breakthroughs have happened in Office and later moved to Windows. We continue to talk to the Windows team about what aspects (of the new Office UI) would make sense for them."
That guy MUST have read How to Win Friends and Influence People :P
(kidding! - we knew what he meant... at least, I'm sure the Window team does :D)
November 29, 2006
November 28, 2006
Its seems like the car horn has basically become an instrument of anger. I don't think you can honk it without seeming mad. Even a tap is a sign of impatience, not communication (think about whenever you're on the receiving end).
I guess CB radios were an attempt to create transient communities for commuters and the like - and cel phones have taken their place for fixed communities, but wierd to me that there's no good way to communicate with the folks around you when driving... maybe this will be one of the emergent expressions of location based services?
In of itself that's surprising - you'd think geography and technology would be a great(er) fit; look at the success of GPS. Like wireless computing, once you do it, you'd can't go back. So why is it so hard finding a behaviour pattern for location enabled computing that's more than a techno-fad?
Important factors (I think): ease of setup, discovery, of course, but more than that - what's the new behaviour eco-system this enables?
November 27, 2006
Microsoft officially launches Vista to businesses Novemeber 30 (Thursday). Pretty big news, considering the length of time since it was first previewed and number of reboots of what Vista is (heh :)). Its been 5(ish) years since the last major OS upgrade from Microsoft and though I think this will be a better upgrade than the technogeeks expect, there's no way it will live up to the hype.
Bottom line: its way overdue, so its going to be hard to be impressed.
That's OK though, in the scheme of things, but... can someone tell me what "release to businesses" means exactly? From what I can tell, there'll be nothing at retail; I guess people (IT folk that is) will be expected to download it from MSDN?
Its a shame - this OS launch strategy is really turning the Vista release into a limp whimper. Perhaps that's on purpose (worred about negative press?), but I don't think so - I think Microsoft is schizophrenic about what to do now (big-picture), and its coloring what, warts and all, ought to be a major event for them.
November 21, 2006
As I look back on my time at AOL, here's how I view the technology "periods" we, as a once-but-no-longer technology-team, rode through:
- Year 1: Stablize the base (and prepare for the future)
Basically, we cleaned up some significant technology architecture and cleared the ground for AOL on the web. Among many other things, the process slowed (too briefly) from feature competition to clean-up and we improved core business and product metrics (for example, what we call "Abnormal Disconnects" or "AD"s significantly; 25% to 60%) across the board. This is particularly significant when you imagine that in previous years the company struggled for every single percentage point gain (every percent of AD mapped to [EDITED FOR PUBLIC CONSUMPTION] difference in membership churn). Particularly, important in this was disconnecting Identity and Connectivity (capitalization intentional) throughout our application and content stack - one of the key things to prepare for the future.
- Year 2: Unwall the garden
In 2005, we went from one major product ship (with one slipstream update) to shipping a signficant number of new products, both on the desktop and on the web, including AOL.com itself. Though it still required deep cross-coordination, AOL built out significant new infrastructure, transforming as well as just force-fitting a lot just to gain the opportunity to learn, and have our products be available for the first time on the web-at-large. A lot wasn't right, but was necessary to learn what the company didn't yet know it didn't know.
- Year 3: Embrace the web
There is/was a lot that this idea implies, both technically and... karmically (for lack of a better word). Its why I had accepted the added responsibilities over the last year - to renew the soil of our core services (i.e., mail and IM), publishing and search infrastructure, and business technologies platform. This year has been about really embracing and evangelizing what the Web means from a development, deployment, and infrastructure perpspective. Its been not just about technology change (even the old in-client AOL "Welcome Screen" is - finally! - in HTML), but embracing the change in role implied by embracing the the web eco-system.
Overall, slower than I would like (and loooong overdue: as I tell my folks all the time - "not Rocket Science, barely Computer Science"), but ultimately valuable - growing pains and all.
From the product side of things, I'd say things were more muddled than I would like. Not that it wasn't enjoyable, but I had influence more than authority, and I've learned a few things in my time at AOL about that.
November 20, 2006
As this blurb in Tech Crunch mentions, its not without its substantial risks, but ultimately I think you want people rowing the boat with you, not against you. I think its why Yahoo still struggles, and Apple, despite flashes of brilliance, will always be (end up? :P) an underdog.
I think the biggest risk, in this area, is that your utilities get commoditized. Without some sustainable differentiated value, either in data services, user base, functionality, etc., its very tough over even the medium haul. Its great that Amazon is providing cheap storage for example, but more unique value propositions will be needed to create dependencies - otherwise their margins will get crushed.
Got to say this for Bezos - he rides the edge of the curve...
November 17, 2006
Yes, I'm leaving AOL, and, no, its not connected to Jon Miller's departure, except in the zeitgeist-of-the-Company-atmosphere/sign-of-the-times kind of way.
I had first resigned some time ago, but was asked to help stabilize through a significant company transition and "keep an open mind through the process". I think I did that (really, I tried) - even running the Open Services Developer's conference, creating participation opportunities with external developer communities and helping accelerate the Company's (metaphorically and literally) thinking around what embracing the Web means.
That said, it became clear some time ago that where I'd want to invest and direct our technology and efforts just didn't align quite enough. I was offered some very generous senior opportunities inside the transforming organization - for which I'm very grateful - but after 7 bosses in three years, and having participated in and initiated quite a bit of transormation at the Company - I think its just time to move on, professionally and personally.
Officially, I'll be wrapping up next month - so don't be surprised to see me still wandering the halls. I had also been asked to ease the change - to make the transition smooth, and that's been going on for the last few months.
I'll still be blogging here, so don't expect any particular change in that arena - you'll see here what develops as I'm ready to talk about things.
Important footnote: My choice isn't a reflection of AOL's opportunity. I genuinely do believe that AOL can be signficant, relevant, and successful again as a leader on the Internet - I hope that it will. People like Jim Bankoff, Kevin Conroy, Mike Kelly, Joe Redling - these guys aren't dummies.
Anyhoo - it was a good time: met some great people (many of whom are also gone :P), took away some things, contributed some things, and hopefully left a positive wake.
Time for the next thing :)
November 16, 2006
I had resigned from AOL, back in June of this year (no surprise for AOL insiders), for professional as well as personal reasons (which still stand - I'll elucidate in the near future). But I had stayed on in my role because the (then) CEO and the (then) CTO personally asked me to help through the significant transition immediately ahead - and to keep an open mind about the future through that process. I am/was senior enough, and had been entrusted with enough responsibility, that that seemed more than reasonable.
He certainly taught me, personally, a lot about what it takes to run an organization at scale, through significant transformation - I think people forget how differently the Company operated 3 years ago. For example, when I started we had 300+ developers still working on the upkeep of an aging AOL client and hitting quality targets for our Dial network. Now its a dozen or so, from our Bangalore development center, no less - and all core development is about embracing the Web.
And more than that, Jon's a professional, in every positive sense of the word - and in culture of personalities and politics, that's refreshing. I appreciate the time I got with him - as well as the growth opportunities he offered me during his tenure.
Although it became clear by the fall that I was not long for AOL, and though I feel I've been able to positively impact the Company's fortunes, this kind of leadership change is a big deal. I hope they know what they're doing... and more importantly, what they're trying to accomplish. This level of turmoil without clear direction seems a little... I dunno, desperate - and, in my view, furthers AOL from the battle field in which in needs to compete. I hope that's intentional, and that they have a plan (Good luck Randy :))
If I had one complaint of Jon, it would be that he was not able to be involved enough in the day-to-day execution and operations of the Company - AOL would've been better for it. I imagine his responsibilities with Time Warner made that difficult.
You can read more here. Jason sums up the somber surprise well...
Updated: Some clarification on my status at AOL.
November 13, 2006
Not not that one... I meant that, apparently, Justin Long is no longer "the Mac". Hopefully that doesn't mean the end of the ad campaign - which was just frikkin' funny... though, (as the Wired guy points out) not sure where it goes from here without being a little wierd.
Bad call! Bad call! (though I reserve the right to change my mind... :))
November 8, 2006
It still all effectively proprietary (i.e. the direction is controlled by a very small few) ... but that's mostly OK.
November 6, 2006
There's a lot of prognistication about Vista's impact on the market (mostly negative for Microsoft) - the pricing structure and broken promises make it tough, even though the OS itself (not to mention the new Office) really have some very nice (somewhat overdue) features and robustness that will get overshadowed.
But there's an elegance and desparation that Apple finally shed before making its turn around which is instructive, I think, to lots of companies somewhat trapped by their own past success - it doesn't come quick and requires persistent commitment.
Its not that OS X or Apple are perfect - there's a lot that stinks and/or just doesn't work, and I don't think I'll be switching permanently anytime soon (and honestly, I think Safari's kind of poop-ish).
But... the video below is an oldie, but a goodie - and it embodies the "karma" of what I mean... If design is the new black of business - and it takes a leap to embrace, then its also requires more a holistic approach to the consumer; it's not just about the product itself. And, as always (and obviously), you can't lead by following.
And before you laugh too hard at those "MS losers" - remember that Microsoft commissioned the video; so there's not a self awareness gap, lack of intellect, or even a lack of humour there - doesn't make it much easier to actually do.
November 1, 2006
Previous posts on this: RIA innovation?, Disruptive trends, Content Engineering, Orbit and Java, and RIA Battlelines.
Of course it could all end up like this...
October 31, 2006
I was visting a friend last week, to see some of the VERY interesting new work he's doing, but, as an aside (nothing to do with any real project), he had just been playing around with OpenGL on his manly MacTel box. He wrote this fun little particle system thing that treated every pixel in an image as a particle... it was very fun, but only ran on the Mac.
So (being me) I did a version for Windows - no OpenGL, DirectX, or other (though those would help), of course, just code. Its not very optimal (its only 9kb compressed) - but kinda fun to play with. You can download it here. Click and drag in the image to see it work; press the 'o' key to load a new image.
Remember, its just a little app I compiled on my computer: there's been no QA, and it probably has a bug or two - other than that, its harmless :)
October 30, 2006
Its really a bit more of a pain than it should be - its easy to publish galleries; tougher to make sites for this type of thing. Somebody should do something (or recommend something) on that...
Whether its Flash, AJAX, WPF, OS X, etc. - haven't really seen any new interaction paradigms (that aren't fun, but useless) - it just looks prettier; you could have presented the same utility with the original Mac OS user interface, more or less. That's not the case with the transition from DOS/command line apps to GUIs.
Heck look at the Firefox 2.0 UI...
That's not a bad thing or anything, but a little surprising I guess - its been more than 20 years (at least 15, if you want to give it a few years). Evolution, not revolution...
Updated: Reminder - some "older tech" examples of richness (in Flash, DHTML, Java); some adding value - some not so much :) ... And speaking of useless but fun - here's a image/photo "sand" simulation in plain old C code :)
October 26, 2006
In particular, co-routines (in the form of the "yield" operator) are the key big improvement (IMHO). The rest is mostly syntactic sugar - and in fact, most of those are indeed enabled by co-routines (which they label as "Generators").
I have to admit, though, to being a little disappointed with trying to use them in practice, for "programming in the large" with JS type things. As always, I might be missing something - but what I'm finding is that most of the time I don't want to necessarily yield to just the calling function; I want to yield waaaay up the stack. I think what I'm really looking for is a "resumable" exception of sorts- where I can yield all the way up somewhere, take some action, and then continue execution back to the yield - ALMOST there with JS 1.7 generators - but the implementation seems to be more about keeping up with Python superficially... ah, well.
Adobe has much less of that particular adoption problem - being a single vendor monopoly for core technology has its advantages.
October 23, 2006
So they (the Foundation) have made a few pointed requests to Linux distros like Debian, with regard to how they may distribute work product from the Mozilla Foundation, particularly with regards to their key successful product, Firefox.
The problems are basically this, as (I interpret) the Mozilla Foundation sees it: (1) All distributions using their name must include exactly their artwork and logos and (2) they wish to review and approve "substantive" patches for distributions using their trademarked names. The rationale is pretty straight-forward: consumers have come to know and recognize the Firefox brand, and the Mozilla Foundation has invested in building that brand - and they don't want to see its value eroded by confusing imagery or shoddy product.
Straight from the horse's mouth, I'd have to agree these are fine and reasonable things when you're running a business. And now that Firefox is generating real revenue and market share, apparently many in the open source movement seem to be unhappy their new web browser overlords.
They should remember though, money's important - and it may not flow if its too far from "core" Firefox.
So the counter plan is to branch Firefox and ship "IceWeasel" (fire=ice, fox=weasel) - of which there are two variants already: Debian and GNU. The whole point, they argue, of "free software" is to enable EXACTLY the type of customization of products the Mozilla Foundation is arguing to prevent under the Firefox brand. So they're going to fragment in response...
What's funny is both sides aren't wrong - and a good example of where being right (on either side) is to the detriment of both. Maybe they should try a brand family strategy to compromise - something like "Firefox Prime" (but, uh, better... :P) for the "official" Mozilla distributions, and "Firefox Debian" for branches/changes... ah, whatever.
Let's hear one for those young whipper snappers "stickin' it to the man!"... oh wait... who was who again?
October 19, 2006
October 18, 2006
I prefer milk chocolate.
In other news, Mark Cuban did a funny bit why GooTube is going be a legal nightmare - but I still think its possible that DRM, at least as currently envisioned, is NOT the "end state" solution for content creators.
And, this is also a bit old, but J2ME's evolution is interesting to watch in the distributed application runtime game. They've had some success on devices, tons and tons for server development and none to really speak of on the desktop (yet). Nevertheless, they continue to flog the "write once/run anywhere" banner with this news with Lazlo Systems about "Orbit" and application portability. Like Microsoft, Sun is attacking this market from a developer perspective - and as application execution context boundaries blur, that may become more effective in the marketplace. I still think they're a dark horse vs. the "top 3" in this space, but it is still an emergent technology space, so who knows.
October 11, 2006
October 10, 2006
I guess they can afford it, and its nice to extend the brand (if you're hunting for some rationalization - which we all are :)), but still - it's a bit nutsy (and they're potentially risking more than the invested cash).
Well, no matter how you slice it , its a bold move in the citizen video space - and it should be interesting to see what Google make of it, if nothing else. In particular, if they can stick to their new mantra ("features, not products") seriously with this acquisition - well, could be very interesting. All in all, I'd say: crazy deal, but probably not a bad idea for the involved parties.
Let the good times roll - :) remember this? Dot-com-2.0 craz-azee-zaniness (and some background).
October 6, 2006
When people wonder what possible chink there could be in Google's armor: this is it. Specialization of presentation - of interface - tends to win over time. This is at once less of a chink and more of chink than I think people generally think (I think :)).
That is, although I do believe in the power of specialization over consolidation, from a UI perspective, that doesn't necessarily speak to economies of scale, from an execution perspective - it only addresses user fickleness and opportunities for behaviour disruptions.
On a minor note, I'd wish they'd be a *tiny* bit more consistent with the root URLs for their products - as a user, its annoying. For example, their code search product is at http://www.google.com/codesearch, while you reach their blog search at http://blogsearch.google.com or http://www.google.com/blogsearch. For a company that pays attention to the little details of experience, you'd have hoped they'd have codified that at least.
Updated: I take it back (I did say that Google cares about details :)) - http://codesearch.google.com works now; it didn't until well after my post.
October 4, 2006
Very different product, uh, vectors, for lack of a better term, but both are interesting because they're DIFFERENT (yay!). Good to see some products that are not just cloning the marketplace from AOL... whether they're great or just flops I guess the market will tell us, but certainly they're not attempts to produce "good enough".
October 3, 2006
Problems with Integer Overflow Math and Detection, pt 3:
Easy overflow arithmetic, no assembly required.
Continued from Part 2. Inspired by this post from Google.
I think I'll do a full article on this shortly - covering the full range of mathematical operations, because this is fairly simple but important (for example). Oddly, most of the default answers seem to be 64-bit math (Microsoft and Linus/Linux) or assembly (everybody else). I'm not sure why - perhaps I'm missing something? But first, some performance results:
--------- Testing Addition
--------- Math requiring no overflow detection, but still testing for it
-------------------- This is for speed (overhead)
Test Simple........... total: 100000001 Time = 651.314 ms (1)
Test ASM Safe......... total: 100000001 Time = 1799.14 ms (2)
Test MS Safe.......... total: 100000001 Time = 1205.74 ms (3)
Test ASM SETTO Safe... total: 100000001 Time = 706.609 ms (4)
Test Sree C Safe...... total: 100000001 Time = 694.44 ms (5)
(1) is a+b, just for a baseline
(2) is the common Assembly solution I've seen a few places on the web
(3) is the Microsoft SafeInt class
(4) is the assembly recommended by Eric, following Mike
(5) is my C version (below)
The basic idea is really simple, and pretty obvious for the unsigned integer case, as everyone points out. If you add two positive numbers, and the result is smaller than either number, your addition overflowed.
It gets a little more complicated for the signed case, but not really THAT much more complicated. Basically, if you want to test if the result of an addition is supposed to be greater or less than a specific number, you only have to look at the sign of the OTHER number. That is, if you're testing if "a+b" overflowed, the unsigned test is "a is greater than c" and the signed test is "(a greater than c)!=(b less than zero)" (we can optimize that "b is less than zero" test, such that this becomes two compares and one jump).
So the code for my fast C version - you can plug it into the benchmark source I posted yourself:
__forceinline long __sreeSafeadd(long a, long b)
long c = a + b;
if ((a<=c)==(unsigned long(b)>>31))
Its not what I might call "maximally" portable, in that it presumes two's-complement and basic processor oveflow arithmetic, but its basically as good as it gets (IMHO). It also uses one of my favored "mini-patterns" - using comparison as a computation value, as opposed to just as just a branch variable. This pattern extends fairly well to all the common overflow arithmetic math operations, amongst other things, though being a graphics guy, I really just want the stuff to clamp - I'm not sure that people are prepared to deal with integer overflow exceptions. I only used that in these examples because that's how the MS stuff worked that I started with as a benchmark for performance - I think exceptions are generally bad for most programmers and should not be used.
But what suprised me about all this, was (a) lack of "first order" information online, with real benchmarks, and, relatedly, (b) the assumptions folks tended to make about performance (particularly the "its Assembly so its faster"). This is a pretty basic simple (but important) thing, but the error propagation of information on the web was quite high - seems like people have just pushed around the same code and ideas from site to site, as opposed to actually investigating from first principles.
This assumption driven "error propagation" seems like a common problem that I'd hope at least technologists would be more immune from - not so much. I wish I saw more stuff like this for developers.
October 2, 2006
Funniest (to me) were #6 and #7 (Hah! Lisp sux because it is SO productive it makes you anti-social - brilliant!).
Courtesy of Slashdot, naturally (news for nerds).
Somebody should produce the counter - top ten business-guy business myths; any doofus who starts quoting "Good to Great" should Google "logical fallacy" and "appeal to authority"... :) (you know who you are... :P)
September 26, 2006
Just remember - just because your sh#@ is a different color, doesn't mean it doesn't stink :)
If you really want users to be "safer" tell them to use Opera - though I still think all those plug-ins and extensions that are (essentially) shared across all the desktop browsers makes that choice all more moot than people think...
And of course, the report was produced by a party with an interest in the world being unsafe - read it for yourself and see what you think.
September 25, 2006
And the movie ROCKS.
Not just that it clips from fight-to-pause-to-fight in a frenetic cycle - though it does slow down before the third act begins to allow us to catch our breath. And not just that the movie is a parable of accepting change, grounded in friendship and loss. And not just that even the standard "revenge" motive for such films is upended (just enough for freshness), as our hero Huo Yuan Jia transforms his battles from a journey of divisiveness, destruction, and strength to one of unity, purpose, and the strength of body, mind, and soul.
Really, the back story (grounded in just enough history and truth to make the movie work) is there only to ensure we're emotionally invested in the combat.
And it works.
And the comabt! Wow. Just: wow.
There are a few moments where you see "cracks" in the cinematographical firmament - where the wire fighting or camera tricks break the framework of disbelief. But those are fleeting execptions. Whereas the other movies (of the metaphysical nature) I referenced above embraced the uncanny valleys their special effects created as a part of their storytelling fabrics (to generally good effect), in Fearless you're seeing astounding fighters in deeply physical, real, painful, solid and astoundingly unbelievable yet believably natural battle.
It's good - very good. Go see it - its a spectable that benefits from the big screen.
September 22, 2006
Continued from Part 1 - following some discussion in the comments
Michael Herf and Eric O'Laughlen suggested I try a bit of x86 assembly to salve my problem (a good suggestion - at least to establish a performance baseline; I still ultimately want C), but I must be doing something wrong...
Here were my time tests:
-------------------- Math requiring no overflow detection
-------------------- This is for speed (overhead)
Testing Simple..... total: 750201700 Time = 484.331 ms
Testing ASM Safe... total: 750201700 Time = 1370.02 ms
Testing MS Safe.... total: 750201700 Time = 872.027 ms
Testing Sree Safe.. total: 750201700 Time = 523.12 ms
-------------------- Math requiring overflow detection
-------------------- This is for correctness - ignore timings for 'Simple'
Testing Simple..... total: -120255288 Time = 482.925 ms*
Testing ASM Safe... total: 2147483518 Time = 222.645 ms EXCEPTION
Testing MS Safe.... total: 2147483518 Time = 141.048 ms EXCEPTION
Testing Sree Safe.. total: 2147483518 Time = 101.048 ms EXCEPTION
Simple is just "a+b" whereas ASM is the code others suggested, and MS is from Microsoft's MSDN article on the subject. I fully expected the ASM one to be faster than the MS case - so its gotta be me (or that just is the fastest/cleanest way?). I think the conditional is killing it. My C case is I think as good as it gets, and a nice replacement for Microsoft's, but I should verify validity before I go shooting my mouth...
(*btw, Simple is there just for reference for perf and correctness. In particular, since it DOESN'T throw an exception in the bottom tests, it is "slower" because it COMPLETES the test - the other two do not; they throw an exception part way through, as noted by "EXCEPTION".)
You can grab the benchmark executable or the source, and try it for yourself.
I had added both of their suggestions (Mike's and Eric's), but neither passed the correctness test. They didn't toss exceptions in the right cases, or (in Eric's case) were much slower than MS and ASM both once I added an exception-toss-on-overflow-flag-set test - though both were faster so long as you didn't want to actually look at the overflow result immediately, which unfortunately, I think you usually do.
As Herf points out - I think the branch prediction kills the assembly attempts.
I have a (probably too) simple idea in just C, but want to validate it (perf and correctness) before I post - hopefully I'll get a chance to do something this week. This so seemed like an already well solved problem to me?
And Python's got some nifty things going for it (check out Yahoo's Python center). In particular, I've a new found appreciation for their language evolution model of late.
Most of the time, (Perl 6 is a good counterpoint) classic CS design philosophy suggests if you're going to make changes, make them once (and complete), so that everyone can get over it and get on board. Enh.
Python's been more incremental - generally they break you just a *little* with each regular-ish rev, though some 5 revisions down the road it might not be so compatible. Basically, they create an incentive for people to stay on the upgrade chain.
September 21, 2006
Continued in Part 2.
Updated: I see Linus Torvalds (of ye verily Linux fame) crying about the same problem way back when - did he ever find a better solution than the MS one?
I was checking out a new blog site that the Microsoft Vista Shell team has (a former friend of mine runs that group there), and, digging around, happened upon an old post from Raymond Chen (that guy is amazing - LOVE his blog)
This particular post was about integer overflow and resultant subtle problems. Its a trickier thing than most people think, and has all sorts of well documented long standing "famous" bugs.
That led me to Microsoft's very nice SafeInt class - but yowza - safe addition takes 3 compares and 3 branches? In the trivial case? (i.e. positive number plus a positive number)
I saw that there's been an update that deals with this by casting to int64, doing the add, and then two compares and 1 branch, and a cast into a int32, but yoinks... someone must have a better solution than that.
I'm going to do a little research - but someone? anyone? Faster/better solution?
(My timing tests show - I wrote a tiny benchmark - with the "safe int" exception throwing on, that simple addition takes twice as long (almost) - that really the state of the art?)
September 17, 2006
I think the jury's still out in a big way on this topic.
Either DRM technologies will become THE way that all digital content is licensed (even if that license is simply "unrestricted"), or it'll go the way of the Dodo. The middle ground will get squeezed out on this in the next 4 years.
Obviously, publishers (distribution middle men) and to a lesser (at least less vocal), but very real extent, creators want to ensure they're properly credited for their work, both financially and artistically. On the converse side, users want access to stuff as broadly and cheaply as possible - but most importantly, as conveniently as possible, with as high fidelity as available. This last has been a HUGE boon to the movie, music, and publishing industries, generally, as technology advances have meant people are re-purchasing essentially the same content in a variety of formats (e.g. LP, Tape, CD, AAC /VHS, Laser-Disc, DVD, HD-DVD).
But that trend has delivered broadly available commercial-grade content creation tools to (essentially) consumer cost points, in combination with federated broad digital communication (read: syndication) and personal publishing channels.
Case in point: MySpace's MP3 Store and this recent article about iTunes and iPod music consumption in the real world fly directly in the face of Microsoft's Zune, iTunes, etc, with things like YouTube skirting a narrow middle. The RIAA hopes you like Apple and Microsoft.
That iTunes/iPod usage article is the most interesting - and the big question is whether the trend it reveals is of the moment, or of the future.
You know this is something the software industry has been dealing with since its inception - its done OK. I realize its easy for me to say (because I have nothing at stake in this particular debate), but sometimes sweating the threat means you squander the opportunity.
September 12, 2006
Interesting article yesterday at Zdnet about the upcoming technology infrastructure contenders for Rich Internet Applications (RIA), primarily Flash/Apollo, XUL/Firefox, and XBAP/WPFe.
Not sure how much I agree with the details, but the broad strokes are interesting at least (to me at least :P - I've written on this topic more than a few times). The business models for the technology originators gets pretty short shrift though - Adobe's charging directly, through tools and the runtime (at least for devices), whilst the Mozilla Foundation's stuff is free (as in beer and as in software) with Microsoft somewhere in the middle. Wonder what impact that will have on success opportunities?
Also interesting is the implicit notion/question that the main turf war will be over browser plug-ins and/or extensions, as opposed to server-ware or development paradigms (like AJAX, Rails, etc.) - remains to be seen if that's true, though it feels right. Even Flash is still primarily ad-ware - and wherefore art though client-side Java or .NET apps?
Complicating matters further is the increasing user/input interaction fragmentation caused by portable general purpose computing devices like smart phones, PSPs and the like.
Some examples from the past.
September 7, 2006
(and yes, it is a bit more space for far east languages, but is still just better - for example, do you know what endian UTF-16 you're using?)
p.s. this only applies if you're writing code, not script and its high-level equivalents.
September 5, 2006
Summer's over. It's official (well, not official, but you know what I mean). Some interesting tidbits from over the long weekend:
- Tessseract (OCR software) has been open-sourced by Google. This is an underdeveloped area, especially in the OSS community (and so, very nice of Google), but expect to see an increase in CAPTCHA cracks. No good deed goes unpunished.
- Vista's in lock-down mode, getting ready to ship. As is always the case with these things, it'll be less and more than people expect, and it'll have a long tail of issues and upgrades that follow. Also, a funny side story about how Mactel machines from Apple being able to run Windows isn't as good for Apple as the zealot crowd thinks (not sure I agree).
- Slightly older, but always compelling stream of conciousness from John Carmack (of Wolfenstein 3D, Doom, Quake, etc. fame) about stuff.
- Browzar (an IE "privacy" wrapper) has been getting some buzz; though it doesn't really appear to do squat. Still, though I think its useless, I feel compelled to defend it. There's been GROSSLY unfair criticism about it being "adware" in the press; appears this is the new "Red Scare" tactic. Truth is it, it IS Adware (you get it for free, and it generates money from advertising/search revenue) - but so is Firefox, the Google Toolbar, etc. What ought to be a simple statement of business model fact has instead has become a loaded, scary epithet. Pretty much every site on the 'net derives revenue from advertising, and the quid pro quo is free access to said software and services - but Adware and Malware (thanks to more than a few bad eggs) have become synonymous for desktop applications. There's nothing "tricky" about Browzar - other than it doesn't really work :P - let them be judged on the merits of their software, not the politics of public flagellations (half-wit, half-brained punditry seems the order of the day in the tech press these days...)
August 29, 2006
These things go in waves, and this seemed to be the latest - no big deal. And so my wife thought she'd tell them a story, to maybe help them understand actions and consequences a bit bitter. And in this case, she thought the story of the "Boy who cried wolf" would be a good fit.
They thought it was pretty engaging and amusing at first. But they definitely got quieter as the story concluded with the real wolf showing up, and the boy getting thoroughly eaten (important to make an impression after all).
And their wide-eyed thoughtful silence lasted for about 7 seconds.
Then my older one,who's all of 5, says: "That was good mommy - tell us a story about the 'Girl who cried Jewelry'!"
Its good to be the Wolf...
August 25, 2006
But that's probably the intent (intERNET?) - after all, why should anyone let facts get in the way of opinion? (Can't happen to you? Welcome to a taste of the future...)
There's a lot going on at AOL these days for consumers (in the last few weeks alone):
- free domained e-mail addresses,
- premium video content for free,
- 5GB of web storage for free,
- a free VOIP phone number,
- free antivirus software
I understand it, am sorry for its root, and it truly is a shame on many levels.