The Price of Cheap Labor
The strange entries I've found over the past two weeks I've been
researching a large database are innumerable.
Some addresses, like Wastington, DC are simply annoying,
while others, like Vancouver BC V6T 1Z4 United States, are
It's clear to me that the database has been populated by the massive
application of a cheap labor force.
This is happening all too often, and I think it is a mistake.
Continue reading "The Price of Cheap Labor"
I always admired the pilots of the two
PZL M18B "Dromader"
fire-fighting airplanes that were stationed in Cephallonia's airport.
Continue reading "Real Heroes"
The Changing Value of Knowledge and Skills
I feel we're witnessing a watershed in the value of knowledge and many,
once crucial, skills.
Thanks to powerful ubiquitous computers and the internet,
hard-earned knowledge and skills that used to be important are no more.
Here are some examples.
Continue reading "The Changing Value of Knowledge and Skills"
Europeana Launches, Again
The European Union's digital library
launched with great fanfare last month only to crash two hours later
due to high demand.
Today it came back up again with quadruple serving capacity and a promise
for a suboptimal user experience during its test phase.
Continue reading "Europeana Launches, Again"
No Blinkelichten, Please
A computer's flashing lights used to fascinate me.
They showed me it was alive and offered me a glimpse on
They also epitomized the hacker culture of the famous "Blinkenlichten" sign.
Continue reading "No Blinkelichten, Please"
What I'd Say to Bill Gates
Bill Gates is visiting Athens tomorrow.
In his short stay he'll inaugrate Microsoft's
so-called innovation center, which is provided
as an offset for a deal Microsoft signed with the Greek government
for the purchase of 70.000 licenses, and he'll also give a talk
on Microsoft's vision for the future of technology.
As a prelude to this event
the Sunday newspaper Eleftherotypia inset
has invited a few Greek open-source advocates to give in a few sentences
what they would say to Bill Gates during his visit.
Continue reading "What I'd Say to Bill Gates"
The Tools we Use
It is impossible to sharpen a pencil with a blunt ax. It is equally vain to try to do it with ten blunt axes instead.
— Edsger W. Dijkstra
Continue reading "The Tools we Use"
The Double-Edged Sword of Proprietary Platforms
Slashdot article comment
wondered how Windows Vista managed to break existing applications,
despite Microsoft having complete control over the platform.
Continue reading "The Double-Edged Sword of Proprietary Platforms"
Silver Bullets and Other Mysteries
It seemed like a good idea at the time.
—Ken Thomson, on naming the Unix system call to create a file "creat"
When conference participants interrupt a speaker with applause, you know the speaker has struck a chord. This happened when Alan Davis, past editor in chief of IEEE Software, gave a talk on improving the requirements engineering process at the NASSCOM (Indian National Association of Software and Services Companies) Quality Summit in Bangalore in September 2006. He was explaining why a marketing team will often agree with developers on additional features and a compressed delivery schedule that both sides know to be unrealistic. The truth is that this places the two parties in a Machiavellian win-win situation. When the product's delivery is inevitably delayed, the developers will claim that they said from the beginning that they couldn't meet the schedule but that marketing insisted on it. The marketing people also end up with a convenient scapegoat. If the product launch is a flop, they can say they missed a critical marketing time window owing to the product's delay. Where else are we playing such games?
Continue reading "Silver Bullets and Other Mysteries"
Make vs Ant: Observability
I've long felt uncomfortable with ant
as a build management tool.
I thought that my uneasiness stemmed from the verbose XML used for
describing tasks, and the lack of default dependency resolution.
Today, email from a UMLGraph user
struggling with a complex ant task
made me realize another problem:
lack of observability.
Continue reading "Make vs Ant: Observability"
Software Rejuvenation is Counterproductive
In the February issue of the Computer magazine
Grottke and Trivedi propose four strategies for
fighting bugs that are difficult to detect and reproduce.
operation and replicating software are indeed time-honored and practical
solutions. When coupled with appropriate logging, they may allow an
application to continue functioning, while also alerting its maintainers
that something is amiss. On the other hand, the proposal to restart
applications at regular intervals (rejuvenation as the authors call
it), doesn't allow us to find latent bugs, sweeping them instead under
the carpet. This lowers the bar on the quality we expect from software,
and will doubtless result in a higher density of bugs and increasingly
complicated failure modes.
Continue reading "Software Rejuvenation is Counterproductive"
Open source as a paradigm for evolving complex systems
Scientists in the 1980s hotly debated the feasibility of US's proposed Strategic Defence Initiative, commonly known as Star Wars. One argument concerned the amount of software needed to control the missile detectors and weapons.
Continue reading "Open source as a paradigm for evolving complex systems"
Secure Passports and IT Problems
In 2003 Greece, in response to new international requirements for secure travel documents, revised the application process and contents of its passports. From January 1st 2006 passports are no longer issued by the prefectures, but by the police, and from August 26th passports include an RFID chip. The new process has been fraught with problems; many of these difficulties stem from the IT system used for issuing the passports.
On December 12th, the Greek Ombudsman
(human rights section) issued a special 22-page report on the problems of the new passport issuing process.
The report is based on 43 official citizen complaints.
Continue reading "Secure Passports and IT Problems"
Internet Explorer's Cleaner Look
Today the Microsoft update on my Windows machine asked me to upgrade
the Internet Explorer to version 7.0.
My bank refuses to work with any browser other than IE,
so, although I'm using SeaMonkey
as my everyday browser, I'm also forced to keep a current copy of IE.
The installation's banner reinforced some of the fears I have
regarding Microsoft's technical prowess.
Continue reading "Internet Explorer's Cleaner Look"
Choosing a Collection: A Discussion with Kent Beck
Recently I reviewed the mansucript of Kent Beck's upcoming
book Implementation Patterns.
I will certainly put it in the list of books any professional programmer
When discussing collections (containers in C++ STL parlance),
Kent mentions that
his overall strategy for performance coding with collections is to use the
simplest possible implementation at first and pick a more specialized collection
class when it becomes necessary.
My view is that
we should choose the most efficient implementation from the start.
With prepackaged collections this doesn't have any cost associated with
it, and it avoids nasty surprises when a dataset increases beyond the
size the programmer envisaged.
I added a comment to that effect in my review, and later I sent him
an email with a supporting citation, which
kindled an interesting exchange.
I reproduce our email exchange here, with his permission.
Continue reading "Choosing a Collection: A Discussion with Kent Beck"
Quality, Democracy, and Code
Edwin Fine recently posted on amazon.com a review of my
Code Quality: The Open Source Perspective.
In the review he complained about the quality of proofreading and copy editing.
(The errors he noted are now listed in the book's errata.)
His comments sparked off a delightful discussion on the reasons behind
the falling quality levels of various products, the philosophical importance of this phenomenon,
and its effect on coding standards.
Continue reading "Quality, Democracy, and Code"
Interoperability Requires Temperance
After testing the CScout refactoring browser
on the FreeBSD kernel, I decided
to try it on Linux.
I'm getting there, but slowly, and the reason is the gratuitous use of
gcc extensions made in the Linux kernel source code.
Every time I come across a program construct that CScout doesn't
grok, I have to study the C standards to see if the construct is legal C
that CScout fails to implement or a gcc extension.
Extensions are trouble, because, they're typically only vaguely documented.
Continue reading "Interoperability Requires Temperance"
Efficiency Will Always Matter
Many claim that today's fast CPUs and large memory capacities make
time-proven technologies that efficiently harness a computer's power irrelevant.
I beg to differ, and my experience in the last three days demonstrated
that technologies that originated in the 70s still have their place today.
Continue reading "Efficiency Will Always Matter"
Active Voice v Passive Voice
The most common change copy-editors perform on my prose is the conversion
of passive voice constructs into active voice.
By now I've become accustomed to it, and I now try to use active voice
It turns out that the proverbial coin has in this case two faces.
Continue reading "Active Voice v Passive Voice"
Human Thought and the Design of Computers
Peter J. Denning
wrote an excellent article titled
"The Locality Principle"
in the July 2005 issue of the Communications of the ACM.
The article explained the story behind the
locality of reference, a fundamental principle of computing with many applications.
that appeared in the October issue of the same magazine I commented:
Peter J. Denning's "The Profession of IT" column ("The Locality Principle," July 2005) invoked an anthropomorphic explanation for the prevalence of the locality principle in computational systems, observing that humans gather the most useful objects close around them to minimize the time and work required for their use, and that we've transferred these behaviors into the computational systems we design.
A more intellectually satisfying explanation might be that we are dealing with two parallel and independent evolutionary design paths. Trading some expensive high-quality space (fast memory) in order to gain time performance is a sound engineering decision. It is therefore likely that evolution first adapted the human brain by endowing it with limited but versatile short-term memory and large long-term memory structure that exhibits behavior similar to caching.
Millennia later, we make similar design decisions when building computing systems.
The comment triggered an email exchange with Phillip G. Armour
It was one of the most intellectually satisfying email exchanges I've ever had, and I am reproducing it here, with his kind permission.
Continue reading "Human Thought and the Design of Computers"
The Other Side of Digital Preservation
We often grumble that digital preservation is risky, and that
modern storage technologies and file formats quickly become outdated
destroying the record of our past.
What we don't appear to appreciate is how much more data we are
able to preserve, thanks to digital technologies.
Continue reading "The Other Side of Digital Preservation"
Everything Old is New Again
In 1984 the new kid on the block was Borland's Sidekick.
A terminate and stay resident (TSR) program for MS-DOS,
it would run in the background, and when it detected
the two shift keys being pressed it would overlay the
(then character) screen with a calculator, a notepad,
a calendar, a dialer or an ASCII table.
Continue reading "Everything Old is New Again"
Tool Writing: A Forgotten Art?
Merely adding features does not make it easier for users to do things—it just makes the manual thicker. The right solution in the right place is always more effective than haphazard hacking.
— Brian W. Kernighan and Rob Pike
In 1994 Chidamber and Kemerer defined a set of six simple metrics for object-oriented programs. Although the number of object-oriented metrics swelled to above 300 in the years that followed, I had a case where I preferred to use the original classic metric set for clarity, consistency, and simplicity. Surprisingly, none of the six open-source tools I found and tried to use fitted the bill. Most tools calculated only a subset of the six metrics, some required tweaking to make them compile, others had very specific dependencies on other projects (for example Eclipse), while others were horrendously inefficient. Although none of the tools I surveyed managed to calculate correctly the six classic Chidamber and Kemerer metrics in a straightforward way, most of them included numerous bells and whistles, such as graphical interfaces, XML output, and bindings to tools like ant and Eclipse.
Continue reading "Tool Writing: A Forgotten Art?"
Self-Healing Systems Will Age
A number of researchers are advocating the adoption of self-healing
approaches as a way to create more robust systems.
They suggest to copy a page from the book of life, where organisms
with a self-healing capability can survive numerous mishaps and accidents.
However, biological systems have another property, which I believe
is associated with their ability to heal themselves: ageing, and,
Continue reading "Self-Healing Systems Will Age"
Java: the New Straightjacket
I first learned to program on a home computer in Basic. At first
it was fun, but after a point it became frustrating, when I realized
that I was living inside a walled garden. Many interesting programs,
such as those interfacing with the display controller, simply could
not be written in standard Basic. Luckily, this limitation forced me
to move to Pascal, assembly code, and C.
Continue reading "Java: the New Straightjacket"
As a child I used to be able to assemble and disassemble my bike;
the most sophisticated artefact I owned.
I could understand the working of its (simple) gear system,
the functioning of the brakes,
the assembly of its ball-bearings.
As a teen I had a reasonably complete understanding of the IBM-PC
the 8088 processor's complete instruction set,
the instruction encoding details,
the pinout and operation of the ISA bus and the Centronics and RS-232 interfaces,
the operation of the 6845 video controller and the 4164 memory chips,
all the BIOS calls,
all the MS-DOS commands and system calls, and the complete details
Basic and C programming languages I programmed in.
I also knew the principles of operation behing the processes used
to build the computer's chips,
the MFM recording format used by the hard disk, and
the operation of the CRT monitor.
Continue reading "Technological Complexity"
How Not to Conduct a Poll
Council asked members to provide feedback on the issue of expanding
legal protections for collections of data by means of an on-line poll.
Opening the policy feedback decision-making process to the ACM membership
promotes member participation and transparency.
However, I have two
serious reservations regarding the way the member feedback was requested.
Continue reading "How Not to Conduct a Poll"
Writing, GUIs, and 4000 Years of Progress
The images speak for themselves.
Continue reading "Writing, GUIs, and 4000 Years of Progress"