Thursday, November 29, 2007 |
|
|
The Kindle browser works much better with RESTful sites as opposed to AJAXian Web 2.0-y pages. To be more specific, the Kindle browser doesn't work well at all with AJAXian Web 2.0-y pages. So this leads me to look for RESTful intermediaries / proxies for the two most useful network functions: email and RSS feeds. Doesn't anyone know of such libraries / services? |
Thursday, November 29, 2007 9:08:14 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link |
|
|
|
|
Wednesday, November 28, 2007 |
|
|
A quick check with a hex editor revealed that the Kindle .AZW format contains the magic number "BOOKMOBI," which led me to this set if free eBooks in Mobi format. Sure enough, when copied to an SD card, MOBI files come right up in the Kindle Homepage. Here is a free-as-in-beer toolchain for creating MOBI files: http://www.mobipocket.com/en/DownloadSoft/ProductDetailsCreator.asp So the idea that the Kindle is a proprietary format, while technically true, is overstating the case. Any publisher can trivially create a Kindle-compatible eBook, at least if they already target at least one other digital format. This gives me significantly greater hope for the future of the device. |
Wednesday, November 28, 2007 10:13:11 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link |
|
|
|
|
|
I challenged Tim O'Reilly, who said "I'm rooting for Jeff and the Kindle," on the subject of O'Reilly's lack of support for the Kindle: Why no O'Reilly books on the kindle? Well, Amazon has chosen to use a proprietary format, with a conversion cost of a couple of hundred dollars per title to that format....[C]onversion to every new format adds complexity.... [T]his very problem that led us to develop the Docbook DTD in the late 80's.... So I'm rooting for the kindle to take off at a level that would justify that investment in conversion, or for Amazon to open up the platform to read more formats that we already support, like HTML and PDF. Now, I understand that PDF is a sub-optimal experience with respect to reflow. But we're hopeful that there will be a standard, multi-vendor format for that, so that we only have to support one more format, rather than dozens of competing ones. Of course, we may run some experiments on the kindle, and if it takes off, we will certainly support it, as their format will become a de facto standard. We'd also love to experiment with models in which people who are Safari subscribers could access that content on the kindle. We'd be very eager to have a reseller relationship with Amazon, such that they resell safari subscriptions on the kindle. [O'Reilly's complete post] Very reasonable and certainly the Safari comment sounds like a business and not technical issue. |
Wednesday, November 28, 2007 9:03:06 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Knowing
|
|
|
|
Tuesday, November 27, 2007 |
|
|
I just emailed my Kindle the PDF of Programming Ruby and lo! it works great, with even the ToC converted into hyperlinks. |
Tuesday, November 27, 2007 4:31:17 PM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Knowing
|
|
|
|
|
The first thing that must be said about the Kindle is that the screen technology -- eInk -- is vastly more readable than any screen you've read from before. Pause. No, seriously, vastly more readable. My wife, no technologist, actually used the word "wow," and after reading a page opined that it was more readable than many printed pages, an assessment I agree with. }catch(DisplayGeekException){ I've not used the Sony Reader, which uses similar (same?) technology, nor do I have a 200-DPI screen. I have a high-DPI (150?) screen on my tablet and two 21" monitors running at 1920 x 1050, and the Kindle is vastly more readable than those. } Ergonomics The screen is perfectly readable in the tropical Hawaiian sun and, although you can generate a reflection by turning it just so, a few degrees tilt in another direction makes the reflection go away. The Kindle seems to have been designed with an anti-fashion aesthetic; while the iPod is clearly designed to attract attention to itself, Bezos' statement that they want the Kindle "to disappear" is clearly not just rhetoric. It comes with a leather binder (in which the Kindle fits somewhat unsecurely); when in the binder, it is essentially indistinguishable from an address book to the casual glance. When carried outside the binder, the Kindle fits in the hand well (at least, my hand) and has excellent balance. The first morning after getting it, I found myself pouring coffee with my right hand while reading from the Kindle in my left -- exactly the type of position that I would do with a book but would hesitate doing with an iPod or PDA. One reason this is a natural position is that they have a "Next Page" button in the lower left of the device where your thumb naturally sits if you have the device balanced in your left hand: I like that button a lot, it is my wife's sole complaint about the Kindle's ergonomics ("there's no place to put your thumb" she says). The keyboard sucks. I don't have an opinion as to whether it sucks more than other thumb keyboards, which I've never used. Durability As the coffee-pouring incident illustrated, my natural instinct is that the Kindle does not need to be overly protected. It's light and well-balanced, doesn't have any protruding edges, and the periphery is the domain of large, sturdy-seeming buttons/levers. When in its leather case, it seems very good for throwing in a backpack or purse. "Printed" Content So much for the good. I bought the Kindle for the purpose of my tech library: I spend over $1,000 a year on technical books and I receive for free probably another $2-3K worth of titles. I'm sure that's several sigmas from the book-buying norm, but even if I spent "just" the several hundred dollars per year necessary to have the tools-at-hand to be a professional programmer, an eBook solution would be ideal. No matter how carefully I maintain my library, I am constantly realizing that "I just threw out that book last week." In my "To-Be Read" pile for technical books: 0 for 13 were available on the Kindle. Of the technical books nominated for Jolts this year, I searched for the first 10: 0 were available for the Kindle. In my "To-Be Read" pile for personal reading: 6 for 11 were available. In the technology realm, only Addison-Wesley imprimaturs seem moderately available on the Kindle (although Wiley told me they were excited about the device). The top-selling "Programming" title is Brooks' "Mythical Man-Month," the top recent title is Brian Goetz's excellent "Java Concurrency in Action." Just Discovered Defect: The Kindle store incorrectly lists David Holmes as the lead author, though! Search for "Goetz concurrency" in the Kindle store and you get 0 results! This type of screwup is a huge problem for technical users! For general reading, I think the 6 for 11 is acceptable, especially for best-sellers -- the most esoteric title in my "to-be read" pile that was Kindle-available was "The Descendants" by Kaui Hart Hemmings, the most surprising "miss" was "The Midnight Choir" by Gene Kerrigan. To try out long-form text, I am reading William Gibson's "Spook Country" on the Kindle and I don't miss a physical book for that type of reading whatsoever. (Of course, I'll have to turn the Kindle off in-between throttle-up and 10,000 feet, which I wouldn't need to do with a paperback.) And with paperbacks now at the $10 price-point, the Kindle breaks even (absent the upfront cost) for airline reading. But unless technical publishers make some kind of mass movement to support the Kindle, it's an enormous disappointment for (my) intended use. If Safari or Books24x7 got behind it, that could change overnight; otherwise, it's not a good purchase for technical texts today and we will just have to see if technical publishers start supporting it in the coming months. Other Content In addition to books, the Kindle Store offers magazines, newspapers, and blogs. None are technical at the professional level (no SD Times, no Dr. Dobb's, no CACM, no Lambda the Ultimate, etc.). Paying for blogs is absurd, so I won't even go into that. There is an "experimental" Web browser in the Kindle. It's very clumsy to use, but I aimed it at a few of my bookmarks. Some were interesting successes (my site actually renders in a pretty readable way!) and others disasters (specifically, NewsGator and other Web 2.0-y sites). I logged on to a few client sites and discovered, with a certain satisfaction, that RESTful sites work well with the Kindle. Content is King The Kindle is a great piece of hardware for reading digitally-delivered text. The only reliably-available text for the Kindle are best-selling texts: the Time magazines, the New York Times, the You: The User Manual's. Professional resources are the raison d'etre for a software developer to buy the Kindle. Professional resources are all but absent from the Kindle store. I'll let you know how the situation evolves. |
Tuesday, November 27, 2007 11:43:09 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Knowing
|
|
|
|
Saturday, November 24, 2007 |
|
Tuesday, November 20, 2007 |
|
|
Darryl Taft's article "Toward a Discussion of Morality and Code" is quickly side-tracked into an exhortation that software developers should be moral people (recycle your punch cards, yo!). Not discussed is the more interesting question of whether there is a morality within coding decisions and, if so, what the higher moral principles are. The agile community likes to say "deliver client value" and I quite prefer that to the old hacker-ish value of "write elegant code," but client value falls short of being universally prescriptive. Let's say that you're striving to bring online a complex system. The client is threatening to pull out, your team is working long hours, but there are kinks right in the middle of the processing. You believe by adding complexity and special cases you can solve the immediate problem. But on the other hand, the system ought not to be in that state by that point, the data should be thoroughly de-funked. As a professional, you know that you're seeing a symptom of a deeper problem and that by adding complexity, all you're doing is masking the pathology. What's the moral thing to do, bearing in mind that the client's threat to shut down the project is serious? |
Tuesday, November 20, 2007 8:09:37 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Knowing
|
|
|
|
|
While reading the latest ThinkGeek ad copy, I find: [W]e're jealous of today's students. They can now go online to find out if any washers are open, pay for the laundry with their student ID, and then receive an e-mail alert when the washer and/or dryer is done. Is this true? If so, that is the greatest freaking innovation since the relational database! |
Tuesday, November 20, 2007 12:00:32 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Offtopic
|
|
|
|
Monday, November 19, 2007 |
|
|
Visual Studio 2008 has shipped. This is a very compelling upgrade, primarily because of Language-Integrated Query (LINQ), a new feature that is supported in the mainstream .NET languages VB and C# and will almost certainly spread to every .NET language and, I suspect, into the Java world in a few years. Most readers of this blog will be familiar with LINQ. If not, you might find my latest column for SD Times, LINQ Clicks, useful. |
Monday, November 19, 2007 9:13:05 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Knowing
|
|
|
|
|
Amazon has shipped the Kindle, which I think may very well be the game-changing device the eBook market has been waiting for. Compatibility with PDF, plaintext, HTML, "Kindle format" (structured HTML), plus free EVDO connectivity, plus email-your-document-to-the-Kindle (killer). Books are $9.99. If O'Reilly puts Safari on this thing, they'll sell one to every programmer in the developed world. As a matter of fact, I'm going to start emailing PR reps of the various tech publishers trying to get a response on the Kindle. Bookmark this article, I'll update as appropriate. Or, if you are a PR professional working for a technical publisher, contact me at lobrien -at- knowing.net with your press release. Update: No Starch : "We do not have an official position on Kindle." O'Reilly : "We don't have a stated position on the Kindle yet, as we haven't seen one or had the opportunity to discuss it at any lengths with its developers. Check back with us in a bit - We'll be sure to let you know as soon as we do have an opinion." Wiley: "Wiley is excited to actively participate in the newly launched Amazon Kindle." Pragmatic Bookshelf: "It's a tough call. ... Our PDF's are not encumbered by DRM, so it's important that any PDF reader be able to handle that ... I'll reserve judgement on the Kindle until I have one in hand, and see how it performs in all respects" APress: "don’t have anything official to state yet." |
Monday, November 19, 2007 8:53:40 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link |
|
|
|
|
|
Paul Stovell is working on a project he calls "SyncLINQ" which provides databinding over LINQ queries. Although I've not yet tried SyncLINQ, it's clearly a great idea. [via Steve Pietrek Links (11/15/2007)] |
Monday, November 19, 2007 7:00:15 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Knowing
|
|
|
|
Sunday, November 18, 2007 |
|
|
Wes Moise's musings on Supercompilation led me to this discussion of the the myth of the sufficiently smart compiler. The "sufficiently smart compiler" is still trotted out regularly, even though the market has moved away from demanding even moderate attention to performance at the compiler level. Have you timed your rectangular arrays in C# lately? Or, to be inclusive, have you looked at what's (not) hoisted out of loops in Java? The existence of the Iron* languages from Microsoft stems from Jim Hugunin's discovery that adding moderate smarts allowed dynamic languages to run fast on the CLR: - Use native CLR constructs whenever possible. These constructs are all heavily optimized by the underlying runtime engine. Sometimes these constructs will have to be used creatively to properly match Python's dynamic semantics.
- Use code generation to produce fast-paths for common cases. This can either be development-time code generation with Python scripts creating C# code or run-time code generation using System.Reflection.Emit to produce IL on the fly.
- Include fall-backs to dynamic implementations for less common cases or for cases where Python's semantics requires a fully dynamic implementation.
- Finally, test the performance of every CLR construct used and find alternatives when performance is unacceptable. Type.InvokeMember is a great example a a function that must never be used in code that cares about performance.
That's hardly the stuff of PhD theses (don't misunderstand me: Hugunin's paper, which actually said something important, is more valuable than 99% of CS theses). The point, though, is that we are in a time of high tension between what is possible and what is practiced. This gives me hope that we might see true breakthroughs in programming languages. Fred Brooks spoke of a silver bullet defined as a "single development, in either technology or in management technique, that by itself promises even one order-of-magnitude improvement in productivity, in reliability, in simplicity." [my emphasis]). I don't believe in silver bullets, but I think there's a possibility of shiny buckshot. On the discouraging side, I think there are great difficulties to building such a system: the development of a shiny shotgun is, I think, the work of double-digit person-years. It's work that's too far over the horizon for VC funding, too pragmatic for grants, and too dependent on brilliant execution by a small, high-performance team for Open Source. |
|
|
|
|
Thursday, November 15, 2007 |
|
|
I realize that the preceding may, in fact, make me appear to be a hot-head. In fact, I may be a hot-head. But I think if there's one thing that we should value, it's our time. I spent an hour trying to "clear the cache" because he uploaded a file to the wrong directory. Never mind continuous integration, he created a new site on the test server (HTF was anyone supposed to know? WTF?). And then when I'd spent my time figuring all this out, I see that his fix wasn't to move the link outside of the loop, but to delete the loop. Who thinks that way? I mean, seriously, how could anyone with more than 12 hours experience do that? And, mind you, there are coding "standards" that include automated tests, defect-tracking, and CI. It's not like this is the first time he's heard me get angry at the 'works fine on my machine' excuse. |
Thursday, November 15, 2007 5:49:28 PM (Hawaiian Standard Time, UTC-10:00) | Disqus link |
|
|
|
|
|
So we've got a page that allows clients to edit email addresses. Turns out that if there are no email addresses associated, the "Add an email" link doesn't show up. I glance at the page and see that the button is inside the loop that's iterating over the emails (this is ColdFusion, so what this means is that I see something like: <cfloop query="emails">...email output stuff ... <a href="./add_an_email.cfm">Add an email</a></cfloop> (trying to get this system moved over to REST may be covered in another frustrated blog post at a later date)). So I ask "Bob" to move the link outside the loop. Twelve hours later: Larry: What's the story? Bob: Fixed. Larry: Great! *click* Hey, Bob, I still don't see the link. Bob: Yeah, ColdFusion must have the old version cached. Larry: Really? I thought CF was really good about picking up changes. Bob: Maybe it has something to do with timezones. I've seen it before. Larry: That just seems incredible. You're sure you made the change? Bob: Yeah. Larry: And you tested it? Bob: Yeah. Works fine on my machine. Larry: When you've seen it before, how long does it take to come online? Bob: A day or two Larry: WHAT? That's incredible. I had no idea. *speed dial* Hey, Carol, reboot the test server, we need to clear the cache. Carol: What time is it in Hawaii? Larry: 8:00 PM. Yeah, I guess it's kind of late there in New York, huh? *click* -- this morning -- *click* ... pause ... *ftp* ... double checking ... *svn checkout* ... incredulous review ... Larry: Bob, can I have a word? Bob: How you doing this morning Larry? Larry: I'm a little stressed out. Let's try to establish some common ground. Can you FTP onto the site and confirm that the file there is the old one? Bob: Why's there only one file there? Larry: What are you talking about? Bob: There's only one file on the site. Larry: Um ... Do you think it's possible that you uploaded the file to the wrong directory? Bob: Let me check. * 5 minutes pass * Larry: Bob, why's it taken you 5 minutes to check out the name of the directory to which you FTPed? Bob: Checking * 3 minutes * Oh, I see! You expected it in /TestSite. I uploaded it to /TestSite2! Larry: WTF is /TestSite2? No, don't answer that. WTF did you mean when you said you tested it? Bob: Works fine on my machine. Larry: You're talking about the version 67 in Subversion? Do you have that open on your machine? Bob: Hold on * 5 minutes pass * Larry: WTF is taking you so long? A Subversion checkout takes 5 seconds! Bob: Hold on * 1 minute passes* Yeah, got it. Larry: Did you delete the loop? Bob: Huh? Larry: You deleted the loop. It looped over email addresses. Instead of moving the link outside the loop, you just deleted the loop! Bob: OK Larry: No, it's not OK! WTF do you mean OK? Every f***ing [original did not have asterisks] client has more than one email address! Bob: OK Larry: STOP SAYING OK! WTF were you thinking? No, don't answer!!! WTF did you mean by 'works fine'? Bob: It worked fine on my machine Larry: NO IT F***ING DIDN'T! YOU DELETED THE F***ING LOOP! Bob: I didn't understand what the page did. Larry: IT WAS A F*** LOOP! YOU"RE SUPPOSED TO BE A PROFESSIONAL PROGRAMMER! YOU DIDN"T "GET" THAT A LOOP WAS NECESSARY? I GOT CAROL OUT OF BED AT 1 IN THE MORNING AND SPENT AN HOUR BETWEEN LAST NIGHT AND THIS MORNING BECAUSE YOU FTPED YOUR WRONG F*** PAGE TO THE WRONG DIRECTORY! Bob: Control your temper, man. *Larry's brain explodes and he dies* |
Thursday, November 15, 2007 5:26:39 PM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Knowing
|
|
|
|
Thursday, November 08, 2007 |
|
|
My commenting problem has to do with dasBlog validating the viewstate. There is a helpful debugging suggestion in the logs, but my ISP tells me that it is not appropriate to my situation. Until I can spend some time trying to figure that out, I won't subject people to the frustration of the buggy system. In the meantime, I'm afraid that email (lobrien -at- knowing.net) will have to suffice. |
Thursday, November 08, 2007 8:31:57 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Knowing
|
|
|
|
Tuesday, November 06, 2007 |
|
|
You've got friends visiting. They're in town for 9 days. One day involves driving 4 hours to go to a botanical garden which you've been to before and flowers aren't really your "thing" anyway. Do you do it, because, you know, they're your friends, you'll enjoy being with them, etc.? Or do you not do it because, you know, it's a day of travel and affirmatively nodding every time someone says "OMYGOD LOOK AT THOSE LEAVES!" What do you do? Just hypothetically, I mean. |
Tuesday, November 06, 2007 6:47:21 PM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Offtopic
|
|
|
|
|
As the OLPC launch approaches, I thought I'd take a look at the development environment. Somewhat to my surprise, the OLPC Development Wiki says that: - Technically any language is usable
- Python is strongly encouraged, to have a single language "under the hood" when the curious child looks inside
- C/C++ should be used where Python performance is unacceptable, but try to keep it to a minimum, preferably as standard well-encapsulated and documented components
- Smalltalk-speaking developers may wish to work within the eToys environment
- Javascript can be used in web-based applications (Gecko or Opera engine Javascript implementation)
I like Python fine, but have to say that I think there's a real trade-off with it in terms of the world-changing vision of the OLPC. I don't think that Python is a language that facilitates software engineering and, although it's easier to learn than a C-derived statically-typed language, as a very-first programming language, I think Smalltalk would be superior in every way. The trade-off, I suppose, is that OLPC developers would have had to learn Smalltalk and a high-performance Smalltalk VM would have had to be implemented (perhaps -- I don't know -- eToys has such a VM). To me it hardly seems like a burden to expect developers to learn and develop in Smalltalk. ... I hate to be cynical, but every time I think about the OLPC it's difficult not to wonder how $200 laptops will possibly stay in the hands of poor children. I definitely "get" that education and technology are crucial to fighting poverty, but I just wonder what percentage of the OLPCs sent to developing nations will end up being stolen and resold. Putting on my cold economic analysis hat, that could be seen as contributing to the society, but benefiting thieves and the able-to-afford-stolen-laptops doesn't seem efficient. Well, the thief part is inefficient. Contributing a laptop with the understanding that it is 90% likely to be instantly resold is somewhat efficient (albeit not as efficient as sticking $200 in an envelope and sending it to a random school). Blech. It's too early in the week to be cynical. Sign me up. |
Tuesday, November 06, 2007 7:00:53 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Knowing
|
|
|
|
Monday, November 05, 2007 |
|
|
To the naked eye, it doesn't look like much, but through binoculars, 17P/Holmes is incredible. I don't know how dependent that is on seeing it in very dark skies -- we had a really dark night Saturday. This is definitely one to go out of your way to see. |
Monday, November 05, 2007 7:25:11 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link |
|
|
|
|
Sunday, November 04, 2007 |
|
|
Alan Zeichick struck a nerve by calling BS on the premise that Daylight Savings Time saves money. Personally, I dislike DST because during the Summer (or, at this point, non-Winter) Hawai'i is 3 hours behind the West Coast, while during the Winter we're an hour closer and I can begin work at 7 AM, not 6. (Fun fact: It's plenty damn dark at 5:30 in the morning in the Winter, even in Hawai'i. Not cold, but dark.) The solution, it is clear, is Universal Geometric Time: Universal time adjusted for your exact longitude (as measured by GPS). For instance, if I were to follow what The Man says, at 8:00 AM Hawai'ian, it's 6:00PM Universal. However, I insist that at 6:00PM Universal, it's 7:37:06 AM (when I'm at home. If I happen to be breakfasting at Java on the Rock, watching the dolphin pod come in from their night's hunting, that same moment would be 7:37:05). It's true that adjusting to Universal Geometric Time requires some getting used to. Anytime I spend more than an hour at a place, I adjust my watch and manually set my cell phone. Plus, of course, I have to be prepared to deal with people using standard time, so I have additional calculators running on my PDA. It's all quite burdensome, but ultimately it's a small price to pay for rationality. There may be trouble, though. While eating in a food court in Waimea court not long ago, I spread my gear out (since I was sitting down for a meal). I tend to eat alone more since my "friends" have proved resistant to rendezvousing at properly specified times. I admit that the sight of me blazing the way towards the future makes for a singular sight: GPS, PDA, cell phone, watch, cables, backup batteries, etc. Anyway, I was approached by a woman who turned out to be an astronomer for Keck. Exactly the sort of person who would understand, I thought and gave a quick overview of UGT (I had to break out my laptop, on which I carry an explanatory PowerPoint). Well. I don't know who this "sidereal" fellow is, but I can assure you that he has no place in Universal Geometric Time. |
Sunday, November 04, 2007 8:09:45 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Knowing
|
|
|
|
|
Wrox has begun producing low-cost DRM-free electronic content. Their initial product offering is nicely eclectic:
Leverage LINQ in ASP.NET 3.5 Projects by Roger Jennings This Wrox Blox introduces you to Language Integrated Query (LINQ), a .NET 3.5 application programming interface (API) and set of extensions to the Visual Basic and C# languages.
Working with Animation in Silverlight 1.0 by Mike Meyers This Wrox Blox teaches you how to create animations using Microsoft's new platform for building rich Internet applications - Silverlight. This Wrox Blox introduces animation concepts and answers questions, such as when and why you want to use animation in your Web development.
iPhone and iPod touch Programming: Handling Touch Interactions and Events for Mobile Safari by Richard Wagner In this Wrox Blox, Richard Wagner explains touch input events and illustrates how to detect an orientation change, capture two-finger scrolling inputs, and simulate a drag-and-drop action.
Introduction to Google Gears: Creating Off-Line Applications with Pre-built Components. by Todd Meister This Wrox Blox provides you with the information you need to use the classes provided from Google. The core classes within Google Gears include Factory, Database, HttpRequest, LocalServer, Timer, and WorkerPool. By reading this Wrox Blox, you'll be able to determine when to use the different classes provided by Google Gears.
Building a Photo Gallery with Adobe AIR by Todd A. Anderson With your favorite text editor and the Flex 3 command-line tools in tow, this Wrox Blox walks you through building a desktop application, leveraging the Flex Framework to browse and manipulate images found on your local system. |
Sunday, November 04, 2007 7:00:17 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link | | |
| | |