Tuesday, September 11, 2007 |
|
|
I'm not one of those people for whom the task of composition is a somewhat mechanical extension of increasingly detailed outlines. Nonetheless, research consumes between 80-90% of the time I spend on a technical article (note I said time and not effort -- subjectively, writing text is two or three times harder than writing C++. You can satisfy a compiler.) In this case, research will consist of: - Integrating CodeAnalyst and Eclipse
- Profiling a simple application
- Implementing an image-processing application
- Profiling it to discover a performance problem
- Investigating that problem with CodeAnalyst
- Ameliorating it
- Evaluating the performance "win"
- If not "big enough" go to 3
In this case, my target sample application has two algorithms that I think will be difficult: - Seam-discovery (CPU intensive)
- Seam-removal (Memory-manipulation intensive)
With seam-discovery, I know that even if I implement a known-good algorithm (such as graph-cuts), I am guaranteed to peg the CPUs. My big gamble professionally is that I'm a good enough programmer to find a Step 6 "win" that I can pull off in a reasonable amount of time. A safer bet would be to choose an algorithm that would have performance problems if intentionally implemented in a naive manner (for instance, a filter that just iterated across rows and columns and, at each pixel, retrieved the neighboring pixels and averaged them. Pretty easy to tune that up!) Now, a confession. By the time you read this, I've been somewhere not-Hawai'i for a week or so. I'll carry print outs of this paper on content-aware image resizing and this paper on graph-cuts and study them on the plane tomorrow. I'll have my laptop with me and may noodle around with source code, but it's far more likely that I'll be working with pen and paper to see if I can "get" the algorithm intuitively. Other than that, I'm going to do my darnedest not to spend too much time thinking about computers. Coming September 19th or thereabouts: Part 4, Research Gets Underway... |
|
|
|
|
Thursday, September 06, 2007 |
|
|
Probably the biggest difference between academic and commercial writing is this: academic writing is almost always concerned with algorithms and process, commercial writing is almost always driven by a specific set of technologies. In this case, I'm being paid by AMD to explain integration of CodeAnalyst and Eclipse CDT. So that dictates that I'll be using C++, which leads to a couple questions: - Linux or Windows?
- What C++?
The Linux or Windows question is fairly easy for me to answer: I boot into Windows and run Linux in Virtual Machines. For an article on a profiler, the VM is a complication -- CodeAnalyst works within a VM, of course, but since I expect this article to get down to the hardware, I don't want any confusion about how toasty-warm my code is making my Opterons. So I'll be experiencing the code in Windows. But when writing about Eclipse, surely I should imagine that my target audience is not strictly Windows-based. So it seems logical to set up a compiler-chain based on GNU C++: I know that will be portable. (Note: I'll probably cross-compile with at least Microsoft C++ and compare the experience. That might give me enough information for, if not an article, at least a column.) Since the article is supposed to emphasize multicore/multichip development and in C++, it's a no-brainer that I'll be using OpenMP. My next thought is unit-testing. For one thing, I just don't develop anything without unit-testing anymore. For another, repeatability is critical to the article. For a third, I expect to hit some hard problems along the way and unit-testing is the best way to maintain momentum in the face of brain-twisters. I have not compared C++ unit-testing frameworks, but Boost has a test component, and while there may well be better, I know that Boost won't be poor. Version control is not the same issue in an article that it is in professional development, but you can never over-estimate the benefit of a backup: I'll be using Subversion against a local server. Since I know that I'll be doing image-processing, I'd just as well use a library or two to handle file-loading and basic pixel manipulation. If I were building an application, I'd definitely tend towards GTK+. However, I want to keep things as simple as possible around the algorithm(s) that I'll be developing, so I'm going to see how far I can get with this project, CImg, which seems nice and minimal. So my initial tool list is: - CodeAnalyst : Profiler
- Eclipse CDT : IDE
- GCC : Compiler-chain
- OpenMP : Shared-memory parallel programming
- Boost.Test : Unit-testing
- Subversion : VCS
- CImg : Image-processing library
If I need or change libraries, I'll make mention of it in forthcoming posts. Next: Part 3, Research Begins... |
|
|
|
|
Monday, September 03, 2007 |
|
|
I thought I'd try blogging the development of a technical article; it might prove interesting to, I dunno', 3 people in the world. I've been contracted to write a 2,500-words-plus-listings article on using AMD's CodeAnalyst profiler with Eclipse, especially relating to multithreaded / multicore development. So that's a pretty beefy article, about twice the length of a typical technical article in a print magazine. CodeAnalyst works with native code, so my sample program(s) pretty much have to be written in C++ -- anything else would limit the audience. AMD targets an experienced audience, so the educational goals for the article are "The reader will be able to..." - ... enable and gather data using CodeAnalyst from within Eclipse CDT
- ... navigate within the main profiles provided
- ... recognize the profile most clearly associated with their performance limits
- ... determine the source-code lines associated with a performance issue
- ... after making code changes, compare the performance of subsequent runs"
Which is a heck of a lot of ground to cover. So the end result will be something like an advanced tutorial that you might get towards the end of a piece of documentation. My professional goals are to deliver a technically sound article that satisfies my client's goals within a profitable range of hours. I can control that primarily by manipulating my sample program(s); the amount of time I need to research the actual use of Eclipse or CodeAnalyst is minimal, since I know both products. The research aspect of the article -- always the most time-consuming in a technical article -- will be the development of sample program(s) that: - have a performance-limit that can be ameliorated,
- are comprehensible, and
- can be distributed (this limits my use of libraries)
My personal goals are to make sample programs that are interesting in and of themselves. This is a weakness on my part, but what can you do? In this particular case, I hope to implement some significant part of the algorithms used for content-aware image resizing. I have no intention, or interest, in recreating the GUI shown in the video. I have neither the time nor, quite honestly, the mindset -- once I see the algorithm work, I can guarantee you that my interest in this will virtually disappear. That's one reason why I'm not rich. Next up: Part 2, Gathering Tools |
|
|
|
|
Wednesday, March 14, 2007 |
|
|
However, the real-world development of software product lines is hampered by the real-world limitations of maintaining a stable center as the product-line offerings spin off in a widening gyre... Going Over the Software Product Line is the title of my latest SD Times column. |
|
|
|
|
Wednesday, January 17, 2007 |
|
|
|
Wednesday, January 17, 2007 7:11:45 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Published
|
|
|
|
Thursday, September 28, 2006 |
|
Wednesday, April 26, 2006 |
|
|
I just got off the phone with David Intersimone. My recent SD Times column on “DevCo,” (the codename for the spin-off of Borland’s languages and database teams) ruffled some feathers, particularly when I described the Delphi language as “well past its peak, and with its Pascal roots … on the wrong side of trends in syntax.”
To address that line specifically, David I said that was “like saying that BASIC died in 1968….Languages don’t die unless [language designers] stop innovating in them.” Which is true. But I wasn’t speaking of missing features, I was speaking primarily about the trend away from structural explicitness and secondarily about the prevalence of C-language syntax. Is Delphi something that a lot of people are intrigued by? Not if this treemap of sales of books about programming languages (taken from Tim O’Reilly) reflects broad trends (and I think it does). Perhaps I’m holding Borland / DevCo to too high a standard, but I think it speaks poorly to the language that there are more people reading about Vbscript than Delphi (I take the response as given that: “they don’t read books because they’re too busy making money.” Sure.)
I highly doubt that the addition of features such as generics, closures, or even LINQ to Delphi will be sufficient to cause a resurgence in popularity (although they’ll undoubtedly be welcomed by existing users). A resurgence in the popularity of LISP or Smalltalk is unlikely but to my mind either is more likely than a resurgence in popularity of Delphi. I just don’t see this decade’s market embracing the explicitness of Pascal-like language design. It’s possible to imagine, though, a language that was backwards-compatible with today’s Delphi but which supported looser styles of creating program entities (just as VB’s “option explicit” essentially supports two different philosophical approaches). Such a language is what I meant by a “Delphi-in-name-only.”
We talked briefly about the Classhelper technology, which is exactly the sort of thing that I see as being important to future growth.
The growth of Delphi aside, David I shared several interesting points about the spin-off that may provide some food for thought:
“DevCo” consists of the development tools, the database technologies, and some “legacy products.” Obviously Delphi, JBuilder, and C++Builder, but also Interbase, JDataStore, Kylix, Turbo Assembler, and some others.
They have a .NET embeddable SQL database they’ve shown but not announced as a product.
“DevCo” has licenses for a number of Borland products (Together, RequisitePro, etc.) so that they can continue to sell the IDE in an integrated manner.
“Borland Developer Studio” has been the internal name for that which is installed by the DVD. In some places, they’ve marketed this as BDS, in other places as Delphi. This was the source of a little confusion on my part in the article, as I thought “Delphi” had become the overarching brand. One way or the other, the name for “DevCo”s products has not been determined and may even be determined by a contest among users! (Cute.)
David I says that Borland has a vested interest in the success of DevCo, as failure of DevCo would reflect poorly on Borland.
The leadership team of DevCo includes: Nigel Brown, Michael Swindell, Steve Todd, Alan Bauer, Ben Netick, and David I plus an internal Board of Directors.
They have 3-year roadmaps for Delphi, JBuilder, and Interbase.
Sarbanes-Oxley has lots of implications for software and other high-tech companies. It may be that under SOX you cannot add features in an update. (If this is the case, wow.)
The size of DevCo will be ~250-300 at the start.
DevCo will be headquartered in Scotts Valley. Borland will be HQ’ed in Cupertino. “That’s the plan” (but investors / buyers might overrule).
Delphi: generics coming, eventually will support LINQ.
David I doesn’t like referring to VCL as cross-platform. Likes to say “leveraging skills across implementations…...NET is not a platform, it’s a layer on top of Win32.”
In response to question about VCL on the Mac: “We’re looking into that.” Not on the roadmap. Time will tell; first and foremost is supporting existing customers. With bootcamp, will people develop in Windows on Mac hardware? Wondered David I.
“Wouldn’t be surprised” if DevCo eventually supported more languages than are currently supported. (Didn’t bite hard on my “Turbo Ruby” enthusiasms.) Mentioned
Interbuilder, a before-its-time JavaScript & Data tool. “Some of that DNA is still in DevCo.”
Sees a “healthy market” for “the JBuilder experience,” no matter on what technology that experience is built (originally, JBuilder was built on Delphi, then on Primetime, and in the future, on Eclipse).
We talked a little bit about the tension between spending resources on languages / IDEs and on databases. Traditionally, this has been a problem for Borland. David I is more on the languages side and didn’t really have an opinion on whether the world was looking for a new dBase / Paradox.
Finally, we heartily agreed that “developers matter” and that there were golden opportunities for bold companies producing great development tools.
|
|
|
|
|
Wednesday, April 19, 2006 |
|
Tuesday, April 04, 2006 |
|
|
My Hexodoku Programming Contest is live: the challenge is to generate 16 x 16 Sudoku grids. If multiple entries can consistently beat 1 second, the winner will be the program with best Big O behavior as the order of the grid scales (4^4, 5^4, 6^4, etc.). The prize is this year's Jolt Awards Finalists in the "General Books" category:
"Prefactoring," by Ken Pugh (winner)
"The Art of Project Management," by Scott Berkun
"Ambient Findability," by Peter Morville
"Producing Open Source Software," by Karl Fogel
"The Best Software Writing I," selected by Joel Spolsky
"Innovation Happens Elsewhere," by Ron Goldman and Richard Gabriel
Contest runs until May 1 2006 or, if I don't have 4 entries by then, until I either receive 4 entries or June 1.
Programs can be in any language that runs in an Windows XP Pro Virtual PC. |
|
|
|
|
Tuesday, February 28, 2006 |
|
|
James Robertson thinks that I'm too breathless about LINQ
in my recent article about C#'s popularity on the CLR. For some reason,
I can't post to his comment section, so I'll just respond here and
shoot him a trackback:
What got through the asbestos was the comment that I "confused
s-expressions with function pointers." C'mon, be fair to the context. I
think that paragraph is pretty good for, what? 80 words?, making the
point about code-data equivalence while trying to acknowledge languages
like LISP and Smalltalk. Feel free to abhor C#, my code, or my
conclusions, but please don't ignore the fact that I'm one of the few
industry analysts who bends over backwards to talk about languages
outside the C family.
As to the issues of type, perhaps my statement on explicit-implicit vs.
static-dynamic was not as clear as it could be. (Clear or not, though,
I note that some commentors taking potshots at my accuracy perpetuate
the static-dynamic confusion on their own blogs.) I think James took my
point in his OP, where he acknowledges that the mainstream has voted
for explicitness. He then goes on to (essentially) say "Look how much
verbiage results!" Further, LINQ introduces type inference, but you
still have to (finger-)type these as var. Implicit-typers feel free to
roll your eyes. However, in contrast with what I take to be the popular
sentiment [@ James' blog], I don't believe implicit vs. explicit typing plays the central role i n language popularity. Some role, yes, but not nearly as
dominant in practice as its presented by advocates.
The article is about why C# is the most popular language for the CLR. I
tried to write that I felt there were 3 main issues: the popularity of
the C language family, the evolution of the CLR from a technology with
relatively narrow goals to one that aims to be a platform for broad
developmentand the role of Anders Hejlsberg in the evolution of the
CLR. I suggested that the role of Hejlsberg is the most intriguing,
because one can clearly see an alignment between his interests and
opinions and the evolution, not just of C#, but of the CLR. Therefore,
I would think fans of languages other than C# would do well to pay
attention to Hejlsberg's latest work, precisely because it likely
foreshadows the evolution of a very important platform.
Finally, the comment that the industry "blindly stumbled into" a
preference for the C family is very disappointing. I hope Patrick Logan isn't
so tired of fighting the good fight that's the best he can muster. C#
is all of 5 years old, Java 10, the old excuse that they are languages
of Moore's Generations distant in the past has entirely lost its persuasiveness.
A question for those who believe explicit-implicit typing is central to
language popularity: on the CLR, why has C# grown to be more popular
than VB?
|
|
|
|
|
Monday, December 05, 2005 |
|
Monday, October 31, 2005 |
|
|
My latest article on DevX implements a packet filter and custom selection tool using the Tablet PC RealTime Stylus APIs. |
|
|
|
|
Wednesday, December 03, 2003 |
|
|
|
Wednesday, December 03, 2003 3:36:34 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Published
|
|
|
|
|
|
Wednesday, December 03, 2003 3:36:09 AM (Hawaiian Standard Time, UTC-10:00) | Disqus link | Published | |
| | |