Posts in 2007

 

Losing the War

The following gem comes from the user manual of the spanky-new Sony Ericsson K770i (3G) mobile phone. It demonstrates amply the state of the art in software engineering as of 2007.

Continue reading "Losing the War"

Many Ways to Skin a Window

Every couple of years, users of a Microsoft Windows application I wrote a long time ago start complaining that the application crashes when they exit from it. Every time it turns out that the reason is a Windows message that tells the application's main window to close in a way that was not originally foreseen.

Continue reading "Many Ways to Skin a Window"

Global Web Site Redirect

I recentry moved UMLGraph to its own dedicated web site. After the move a friend pointed out that all the links in Martin Fowler's web page on UmlSketchingTools would now stop working.

Continue reading "Global Web Site Redirect"

An Update on UMLGraph

Today I released version 5.0 of UMLGraph. This release contains a couple of important changes: six new shapes (components, nodes, collaborations, use cases, notes, and active classes), a facility for adding notes, and the hosting and packaging under its own domain name umlgraph.org.

Continue reading "An Update on UMLGraph"

Cover Letters for Publications in LaTeX

I admit it. Although I compose most of my journal publications in LaTeX, I use Microsoft Word for writing the cover letters. The university's letterhead is provided in Word, and setting up and compiling a LaTeX document for a single text page is not worth the trouble.

Continue reading "Cover Letters for Publications in LaTeX"

On Paper

A box of crayons and a big sheet of paper provides a more expressive medium for kids than computerized paint programs.

— Clifford Stoll

This column came to life as I was trying to devise an algorithm for analyzing initializers for C arrays and structures. At the time I was using the CScout refactoring browser to look for possible differences between closed and open source code. I had already processed the Linux, FreeBSD, and Windows research kernel source codel and only the OpenSolaris kernel remained. Unlikethe other three code bases, Sun’s code didn’t appear to use any exotic compiler extensions, so CScout uncomplainingly devoured one file after the next. Then, after aspproximately six hours of processing and 80 percent along the way, it reported a syntax error.

Continue reading "On Paper"

International BSD Conference in Turkey

I'm on my way back from the International BSD Conference in Turkey, which a group of enthusiastic members of our community organized on Friday and Saturday.

Continue reading "International BSD Conference in Turkey"

Creative Commons Around the World

On Saturday Lawrence Lessig will be inaugurating the launch of Creative Commons licenses in Greece. This prompted me to investigate how pages licensed under creative commons licenses are distributed on the internet.

Continue reading "Creative Commons Around the World"

The Memory Savings of Shared Libraries

A recent thread in the FreeBSD ports mailing list discusses the benefits and drawbacks of static builds. How can we measure the memory savings of shared libraries?

Continue reading "The Memory Savings of Shared Libraries"

A Programmer's Bookshelf

A first year student at a nearby university wrote to me asking for advice on becoming a hacker (according ESR's definition, he clarified). He sent me a laundry-list of 18 programming languages he aimed to learn by the time he graduated, and asked for other recommendations. I've learned a lot from reading books, so I compiled two reading lists for him.

Continue reading "A Programmer's Bookshelf"

Handling Traffic

In an earlier blog entry I described ACM's imaginative way to handle web site downtime. Today I noticed that the web site of the Berlin Philharmonic uses an equally imaginative (and low-tech) way to handle excessive web traffic.

Continue reading "Handling Traffic"

Cooperative Development at the Speed of Light

The agility and responsiveness of major open-source endeavors never ceases to amaze me.

Continue reading "Cooperative Development at the Speed of Light"

Abstraction and Variation

“Master, a friend told me today that I should never use the editor’s copy-paste functions when programming,” said the young apprentice. “I thought the whole point of programming tools was to make our lives easier,” he continued.

The Master stroked his long grey beard and pressed the busy button on his phone. This was going to be one of those long, important discussions.

Continue reading "Abstraction and Variation"

The Treacherous Power of Extended Regular Expressions

I wanted to filter out lines containing the word "line" or a double quote from a 1GB file. This can be easily specified as an extended regular expression, but it turns out that I got more than I bargained for.

Continue reading "The Treacherous Power of Extended Regular Expressions"

Location-Based Dictionary Attacks

I get daily security reports from the hosts I manage. Typically these contain invalid user attempts for users like guest, www, and root. (Although FreeBSD doesn't allow remote logins for root, I was surprised to find out that many Linux distributions allow them.)

Continue reading "Location-Based Dictionary Attacks"

Impact Factor of Computer Science Journals 2006

The ISI Web of Knowledge recently published the 2006 Journal Citation Reports. Here is my analysis of the current status and trends for the impact factor in computer science journals.

Continue reading "Impact Factor of Computer Science Journals 2006"

A Phone Exchange Rootkit

An article titled The Athens Affair appears in this month's IEEE Spectrum. In the article my colleague Vasilis Prevelakis and I provide an overview of the technical aspects of last year's cellphone wiretapping incident. An interesting aspect of the way the wiretapping took place is that it involved a rootkit that took advantage of the exchange's lawful interception capability.

Continue reading "A Phone Exchange Rootkit"

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

A recent 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"

Handling Downtime

Ideally web sites should be up on a 24 by 7 basis. This is however a difficult and often an expensive proposition. Today I saw on the ACM Portal site an innovative alternative.

Continue reading "Handling Downtime"

Palindromic Palindrome Checking

Stan Kelly-Bootle's column in the April 2007 ACM Queue, titled Ode or Code? — Programmers Be Mused!, was as always very enjoyable. However, I found its ending, a C function that returns true when given a palindromic string (e.g. ABCCBA), anticlimactic. The function given is recursive; I was expecting it to be palindromic. How difficult can it be to write such a function?

Continue reading "Palindromic Palindrome Checking"

Decyphering Modern Texts

One would think that the decyphering of old writings would be the domain of archeologists poring over ancient palimpsests. It turns out that, thanks to modern technology, the quality of documents written only a decade ago can decay to the point of requiring decypherment. And don't get me started on the problems of digital preservation and the decay of URLs.

Continue reading "Decyphering Modern Texts"

Using the Open-Sourced Java Platform

Having access to a system's source code is liberating. I've felt this since I first laid my eyes on the source code of the 9th Edition Unix in 1988, and I saw this again as I used the freshly open-sourced Java platform to implement a UMLGraph feature that has been bugging me for more than a month.

Continue reading "Using the Open-Sourced Java Platform"

Of Wine and Software

Today, following the yearly IEEE Software board meeting, we visited the Casa Valduga winery near Bento Gonçalves at Rio Grande do Sul. The guide told us that the winery nowadays made all its wine in stainless steel vats, which have largely replaced the traditional oak barrels.

Continue reading "Of Wine and Software"

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"

Modularity and Troubleshooting

A residual current device trips leaving the house in the dark. How do I fix the problem?

Continue reading "Modularity and Troubleshooting"

Breaking into a Virtual Machine

Say you're running your business on a rented virtual private server. How secure is your setup? I wouldn't expect it to be more secure than the system your server runs on, and a simple experiment confirmed it.

Continue reading "Breaking into a Virtual Machine"

I Spy

Knowledge is power.

—Sir Francis Bacon

The ultimate source of truth regarding a program is its execution. When a program runs everything comes to light: correctness, CPU and memory utilization, even interactions with buggy libraries, operating systems, and hardware. Yet, this source of truth is also fleeting, rushing into oblivion at the tune of billions of instructions per second. Worse, capturing that truth can be a tricky, tortuous, or downright treacherous affair.

Continue reading "I Spy"

A Humbling Upgrade

Yesterday I upgraded one of the servers I maintain from FreeBSD 4.11, which had reached its end of life, into the latest production release 6.2. It was a humbling experience.

Continue reading "A Humbling Upgrade"

One Traffic Light Per Child

The XO machine of the One Laptop Per Child initiative has a display with two remarkable properties: in reflective mode it can be read under sunlight, and it can also work in both laptop and tablet mode. Add a dozen-line EToys program and you have a real traffic light.

Continue reading "One Traffic Light Per Child"

Software Development Productivity Award

Yesterday, at the 17th annual Jolt Product Excellence and Productivity Awards my book Code Quality: The Open Source Perspective won a Software Development Productivity Award in the Technical Books category.

Continue reading "Software Development Productivity Award"

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. Retrying an 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"

The Power of Reusable GUI Elements

One can manipulate any graphical element of the Squeak environment by bringing up its halo: a rectangular set of icons representing actions that one can perform on any object. At first I found it cumbersome to have to go through the halo in order to perform any action, like recoloring an object or changing its name. Later I saw that this method is incredibly powerful.

Continue reading "The Power of Reusable GUI Elements"

A Peek at Beautiful Code

An exciting new book is about to hit the shelves, and I consider myself very lucky to be among its contributors. Beautiful Code, subtitled "leading programmers explain how they think", contains 33 chapters where contributors describe some code they consider noteworthy. Although I don't consider myself worthy of the book's subtitle, I love coding, and I'm extremely happy that code is taking the leading role among such an illustrious cast. Here is the complete table of the book's contents.

Continue reading "A Peek at Beautiful Code"

Malware on the Fly

Apparently, rogue servers listening on the p2p Kad network intercept the search terms of queries and generate on the fly appropriate file names linking to files that contain malware.

Continue reading "Malware on the Fly"

How to Embed Citations in Diagrams

Diagrams in scientific publications occasionally link to other elements of the publication, such as bibliographic or section references. Maintaining consistency between the citations in the diagram and the publication can be tricky, but a small Perl script can automate this process.

Continue reading "How to Embed Citations in Diagrams"

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"

Landscape vs Portrait Monitors

Laptop monitors keep getting wider and wider. What I would really like would be for them to get higher.

Continue reading "Landscape vs Portrait Monitors"

The Perils of Naive Sorting

I wanted to compare the aggregate cited half-life of works in different scientific disciplines. This figure tracks the median age of the articles cited during the last year. The ISI Web of Knowledge offers such a tool, and allows sorting by the a field's half life. I found the first three entries in the list, mineralogy (10), orthopedics (9.7), and agriculture (9.5), slightly odd.

Continue reading "The Perils of Naive Sorting"

Why Key Fingerprints are Important

I admit it: I seldom verify the key fingerprint of a host I connect to against a fingerprint I have obtained through secure means. As things stand today, I consider it unlikely that somebody will stage a man-in-the-middle attack at the time I first connect to an unknown host. Today however I almost got bit.

Continue reading "Why Key Fingerprints are Important"

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.