Posts in 2006

 

The Capacitor Plague Hits a Baby Monitor

Good baby monitors are hard to come by. Many tend to be oversensitive, others switch from squelch mode to transmission with a loud hiss that is more irritating than a baby's cry. We were very satisfied with a Tomy Walkabout Digital 1998 baby monitor, until the day it started emitting a squeaking sound.

Continue reading "The Capacitor Plague Hits a Baby Monitor"

The Escape of a Small Program

C. A. R. Hoare's Law of Large Programs states that inside every large program is a small program struggling to get out. The parking receipt I got yesterday returning from a SQO-OSS meeting proves this fact.

Continue reading "The Escape of a Small Program"

Cracking Software Reuse

[Newton] said, "If I have seen further than others, it is because I've stood on the shoulders of giants." These days we stand on each other's feet!

— Richard Hamming

Sometimes we encounter ideas that inspire us for life. For me, this was a Unix command pipeline I came across in the '80s:

Continue reading "Cracking Software Reuse"

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"

(Not) Hacking the Digipass Go 3 OTP Dongle

My bank moved to two factor authentication solution, and thus required me to purchase from them a Digipass Go 3 dongle in order to authenticate my transactions. To register my dongle I keyed-in a five-digit code they gave me, and also the key's serial number appearing on its back. Given that Go 3 utilizes an open authentication framework, and a published algorithm for generating the one time password (OTP), could I utilize the key and the numbers I keyed in, for using the key in my own applications, of for cloning the dongle in my mobile phone or palmtop?

Continue reading "(Not) Hacking the Digipass Go 3 OTP Dongle"

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"

So Long as there's a Jingle in your Head, Television isn't Free

Yesterday I switched from an ancient version of the "free" Adobe Reader to the current version 7.0. I spent the morning studying some fairly tricky technical documents. Within that interval I often caught my eyes glancing to the top right of the Adobe Reader's display window where an advert button flashed as it changed its content. Needless to say, this change of focus interrupted my train of thought, and got me out of "flow mode".

Continue reading "So Long as there's a Jingle in your Head, Television isn't Free"

White Noise Calms Babies

A week ago I told my colleague Damianos Chatziantoniou that drying the body of a newborn baby with a hair drier keeps it consistently dry avoiding rashes, and also calms the baby down. Today he told me the advice worked wonders. Many parents have discovered that sources of white noise, like the sound of a vacuum cleaner or a hair drier, seem to calm down a baby's crying spell.

Continue reading "White Noise Calms Babies"

Converting RIS to BibTeX

Digital libraries increasingly provide an option to export bibliographic data. Unfortunately, many, like IEEE Xplore, SpringerLink, and Scopus don't support the BibTeX format I use for storing my bibliographies. (To its credit the ACM Portal offers a BibTeX export option. On the other hand, Elsevier's ScienceDirect and JSTOR don't offer any export facility.)

Continue reading "Converting RIS to BibTeX"

The Return of Performance Engineering and Trendy Programmers

In the 1950s, when processor cycle times were measured in microseconds, algorithm design and clever programming could make or break an application. These fields continued to be popular in the 1960s and 1970s, because widespread computers were used to attack ever larger problems. Programming was a hip and trendy occupation. Today's $500 computers operating on GHz clocks allow anybody who has (just about) mastered the syntax of a programming language to write code that drives dynamic web sites serving hundreds of transactions each minute. Managers consider code a commodity, and enrollments to computer science degrees are dwindling. However, change is in the air.

Continue reading "The Return of Performance Engineering and Trendy Programmers"

A Solution for Web Citations

In 2003 I published a study providing evidence that the half life of a web citation was four years. WebCite offers a neat solution to this problem.

Continue reading "A Solution for Web Citations"

SQO-OSS Launched

Yesterday my research group and our partners officially launched the SQO-OSS research project: a Software Quality Observatory for Open Source Software.

Continue reading "SQO-OSS Launched"

Research in Domain Specific Languages

My research colleague Vassilis Karakoidas is working on better programming support for domain specific languages (DSLs). Today he claimed that DSLs were hyped during 1998-2002, and now interest has waned.

Continue reading "Research in Domain Specific Languages"

Web Page Hits, Amazon.com's Sales Rank, and Actual Sales

Over the past three years I've been collecting the amazon.com Sales Rank for my book Code Reading: The Open Source Perspective, and (lately) also for its sequel Code Quality: The Open Source Perspective. Yesterday I mapped the sales rank to actual sales, and correlated those with significant events and hits on the book's web page.

Continue reading "Web Page Hits, Amazon.com's Sales Rank, and Actual Sales"

Code Finessing

When I set out to apply CScout on the Linux kernel source code, I discovered that it failed to correctly expand a couple of C macros, causing the analysis to fail. This prompted me to reimplement CScout's macro expansion using a precise functional specification, then optimize the code's severe degradation in time performance, and finally tidy up the optimized code mess.

Continue reading "Code Finessing"

Cross Compiling

Cross compiling software on a host platform to run on a different target used to be an exotic stunt to be performed by the brave and desperate. One had first to configure and build the compiler, assembler, archiver, and linker for the different architecture, then cross-build the other architecture's libraries, and finally the software. This week, while preparing a new release of the CScout refactoring browser I realized that what was once a feat is nowadays a routine operation.

Continue reading "Cross Compiling"

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 should read. 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"

The Verbosity of Object-Oriented Code

As I refactored a piece of code from an imperative to an object-oriented style I increased its clarity and reusability, but I also trippled its size. This worries me.

Continue reading "The Verbosity of Object-Oriented Code"

UML Class Diagrams from C++ Code

I needed a UML class diagram of the classes I use in the implementation of CScout refactoring browser. I drew the last such diagram on paper about four years ago, so it was definitely out of date. I always say that whenever possible documentation should be automatically generated from the code, so I decided to automate the task.

Continue reading "UML Class Diagrams from C++ Code"

NASSCOM Quality Summit 2006

Last week I attended NASSCOM's 2006 Quality Summit in Bangalore, India. There I gave a tutorial on tooling with open source software, and delivered a talk on Global Software Development in the FreeBSD Project. It was an edifying trip.

Continue reading "NASSCOM Quality Summit 2006"

Hardware and Software Debugging

Debuggging day. The MySQL 5.0 server I tried to run as part of a MediaWiki installation under FreeBSD, crashed during initialization, and a Tomy Walkabout digital baby monitor started emitting a low beeping sound. I solved both cases through educated guesses.

Continue reading "Hardware and Software Debugging"

Open Source and Professional Advancement

Doing really first-class work, and knowing it, is as good as wine, women (or men) and song put together.

— Richard Hamming

I recently participated in an online discussion regarding the advantages of the various certification programs. Some voiced skepticism regarding how well one can judge a person's knowledge through answers to narrowly framed multiple choice questions. My personal view is that the way a certification's skills are examined is artificial to the point of uselessness. In practice I often find solutions to problems by looking for answers on the web. Knowing where and how to search for an answer is becoming the most crucial problem-solving skill, yet typical certification exams still test rote learning. Other discussants suggested that certification was a way to enter into a job market where employers increasingly asked for experience in a specific technology. My reaction to that argument was that open source software development efforts offer us professionals a new and very valuable way to obtain significant experience in a wide range of areas. In this column I'll describe how we can advance professionally by contributing to open source projects.

Continue reading "Open Source and Professional Advancement"

SeaMonkey vs Internet Explorer Revisited

In an older blog entry I compared the complexity of Mozilla with that of Internet Explorer by looking at the components each linked to. Recently, comments to a Slashdot posting I made, noted that I was comparing the two products on different platforms and source with binary dependencies. I therefore set out to compare the binary dependencies of the two under Windows.

Continue reading "SeaMonkey vs Internet Explorer Revisited"

What Can System Administrators Learn from Programmers?

Although we often hear about program bugs and techniques to get rid of them, we seldom see a similar focus in the field of system administration. This is unfortunate, because increasingly the reliability of an IT system depends as much on the software comprising the system as on the support infrastructure hosting it.

Continue reading "What Can System Administrators Learn from Programmers?"

Efficient Human Multitasking

I sometimes hear colleagues complaining that they can't get anything done, because they have too many tasks in their head. I've found that in order to increase the efficiency of my work I need a moderately large selection of pending tasks. This allows me to match the type of work I can do at a given moment with a task in the most optimal way.

Continue reading "Efficient Human Multitasking"

Boot Lock

I first admired this ingenious method of locking a car in Rowan Atkinson's Mr. Bean series. A few days ago I saw it in real life.

Continue reading "Boot Lock"

Quality, Democracy, and Code

Edwin Fine recently posted on amazon.com a review of my book 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"

Choosing a Programming Language

A language that doesn't have everything is actually easier to program in than some that do.

— Dennis M. Ritchie

Computer languages fascinate me. Like a living person, each one has its own history, personality, interests, and quirks. Once you've learned one, you can use it again after years of neglect, and it's like reconnecting with an old friend: you can continue discussions from the point they were broken off years before. For a task I recently faced I adopted a language I hadn't used for 15 years, and felt enlightened.

Continue reading "Choosing a Programming Language"

Dave Prosser's C Preprocessing Algorithm

For about five years I've been trying to implement a fully conforming C preprocessor for the front end of the CScout refactoring browser. I've found this to be a fiendishly difficult task. Although what I have written can correctly process million-line real-life projects, every once in a while I come across a construct that confuses my implementation. While searching the web for explanations of some of the finer points of the C standard I came across a reference to an algorithm by Dave Prosser that the X3J11 (ANSI C standard) committee used as a basis for the standard's wording.

Continue reading "Dave Prosser's C Preprocessing Algorithm"

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"

Batch Files as Shell Scripts

Although the Unix Bourne shell offers a superb environment for combining existing commands into sophisticated programs, using a Unix shell as an interactive command environment under Windows can be painful.

Continue reading "Batch Files as Shell Scripts"

Security is a Problem of the Weakest Link

While attending the ICSE 2006 conference I stayed at the Tong Mao hotel. My room featured an impressive-looking safe: thick steel, two bolts, and a digital lock.

Continue reading "Security is a Problem of the Weakest Link"

Surprising Findings on Software Reuse

Kevin DeSouza and his colleagues in a recent article in the Communications of the ACM published some surprising findings regarding software reuse: reuse happens more by novices rather than by experts, within projects rather than across them, and in transient teams rather than permanent ones. The statement regarding the higher propensity of rookies to reuse compared to older professionals rang particularly true to my ears.

Continue reading "Surprising Findings on Software Reuse"

Debuggers and Logging Frameworks

As soon as we started programming, we found to our surprise that it wasn't as easy to get programs right as we had thought. Debugging had to be discovered.

— Maurice Wilkes discovers debugging, 1949

The testing, diagnostic, and repair equipment of many professions is horrendously expensive. Think of logic analyzers, CAT scanners, and dry docks. For us the cost of debuggers and logging frameworks is minimal; some of them are even free. All we need to become productive, is to invest some time and effort to learn how to use these tools in the most efficient and effective way.

Continue reading "Debuggers and Logging Frameworks"

Public Bookmarking

You're searching the internet to answer a question you have, and after some painstaking detective work you locate the answer. Where do you store the answer for future reference?

Continue reading "Public Bookmarking"

Xerces v Flex

What is the fastest way to process and XML file? I was faced with this question when I recently wanted to process a 452GiB XML file; for this amount of data speed matters. Some obvious choices were XML libraries, hand-crafted code, and lexical analyzer generators.

Continue reading "Xerces v Flex"

Code Quality: The Open Source Perspective

My new book Code Quality: The Open Source Perspective got published, three years after I started writing it. The book owes more to open source software than any of the books dealing with Linux, PHP, Apache, Perl or any other book covering a specific technology.

Continue reading "Code Quality: The Open Source Perspective"

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 whenever possible. It turns out that the proverbial coin has in this case two faces.

Continue reading "Active Voice v Passive Voice"

Bug Busters

Although only a few may originate a policy, we are all able to judge it.

— Pericles of Athens

Popular folklore has our profession's use of the word bug originating from a real insect found in an early electromechanical computer. Indeed, on September 9th of 1947 the Harvard Mark II operators did find a moth obstructing a relay's contacts. They removed it and dutifully taped it in the machine's logbook. However, engineers were using the term "bug" many decades before that incident. For example, in a 1878 letter Edison used the term referring to the faults and difficulties he was facing while moving from an invention's intuition to a commercialisable product.

Continue reading "Bug Busters"

Management Support Technologies

My academic title contains the words management support technologies. I therefore considered the new and efficient document management and dispatch system I saw in use at my health insurance provider a rare gem, worthy of inclusion in this blog.

Continue reading "Management Support Technologies"

A Malfeasant Design for Lawful Interception

Earlier this month it was revealed that more than 100 mobile phone numbers belonging mostly to members of the Greek government and top-ranking civil servants were found to have been illegally tapped for a period of at least one year (see Wikipedia article). Apparently, the tapping was implemented by activating Ericsson's lawful interception subsystem installed at the Vodafone service provider. How could this happen?

Continue reading "A Malfeasant Design for Lawful Interception"

How Not to Cook an Egg With Your Cell Phone

A story currently doing the rounds by email provides detailed instructions for cooking an egg by placing it between two cell phones. Here is my attempt to check its validity.

Continue reading "How Not to Cook an Egg With Your Cell Phone"

A General-Purpose Swap Macro

A couple of days ago I came up with a general-purpose macro for swapping values in C programs. My colleague Panagiotis Louridas suggested an improvement, and this prompted me to see the two macros got compiled.

Continue reading "A General-Purpose Swap Macro"

Google in China

Google "don't be evil" Inc. launched a self-censored version of its service for China.

Continue reading "Google in China"

A Tree of Mentors

In the FreeBSD project, new committers are assigned a mentor who overlooks their work, until they are judged to be confident enough to work on their own. As lots of things in the open-source landscape, having a mentor is a loan, which we should pay back by mentoring somebody else.

Continue reading "A Tree of Mentors"

Disappearing Hardware

Let's start the new year with a retrospective look at hardware advances. I've ordered some older and current hard disks that were lying around by date. We're taking for granted the increases in disk size, but also impressive is the reduction in size of the control electronics.

Continue reading "Disappearing Hardware"

Project Asset Portability

It's said that real computer scientists don't program in assembler; they don't write in anything less portable than a number two pencil. Joking aside, at the end of the 1970s, the number of nonstandard languages and APIs left most programs tied to a very specific and narrow combination of software and hardware. Entire organizations were locked in for life to a specific vendor, unable to freely choose the hardware and software where their code and data would reside. Portability and vendor independence appeared to be a faraway, elusive goal.

Continue reading "Project Asset Portability"

Become a Unix command line wizard
edX MOOC on Unix Tools: Data, Software, and Production Engineering
Debug like a master
Book cover of Effective Debugging
Compute with style
Book cover of The Elements of Computing Style
Syndication
This blog is also available as an RSS feed:

Category Tags
AWS (4)
Android (2)
Apple (9)
C (20)
C++ (16)
COVID-19 (1)
Cloud (1)
Computers (58)
Databases (4)
Debugging (8)
Design (1)
Discussion (6)
Electronics (15)
Environment (1)
FreeBSD (26)
Funny (14)
GSIS (5)
Google (6)
Government (2)
Hacks (26)
Hardware (25)
History (9)
Internet (12)
Java (26)
Linux (7)
Machine learning (1)
Management (26)
Microsoft (11)
One Laptop Per Child (3)
Open source (57)
Opinion (28)
Parenting (11)
Perl (13)
Photos (13)
Politics (4)
Programming (108)
Python (1)
R (1)
Raspberry Pi (5)
Risks (6)
Scala (1)
Science (33)
Security (26)
Sights (19)
Smartphones (3)
Software (22)
Software engineering (89)
Standards (6)
System administration (46)
Teaching (9)
Technology (28)
Testing (2)
Tips (42)
Tools of the Trade (52)
Travel (9)
UML (6)
Unix (46)
Web (31)
Windows (14)
Writing (45)
XML (10)
vim (5)
Archive
Complete contents (363)
2020 (9)
2019 (4)
2018 (5)
2017 (20)
2016 (7)
2015 (6)
2014 (5)
2013 (13)
2012 (17)
2011 (14)
2010 (13)
2009 (40)
2008 (40)
2007 (41)
2006 (48)
2005 (44)
2004 (30)
2003 (7)

Last update: Sunday, May 31, 2020 10:55 pm

Creative Commons Licence

Unless otherwise expressly stated, all original material on this page created by Diomidis Spinellis is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.