Blogs

RSS

An aggregation of our Blog Roll, made up of acmqueue authors.   more

All Postings, Diomidis D. Spinellis:  (167 posts)

Source blog: blog dds

Mon, 05 Feb 2024 15:48:57 UTC

An exception handling revelation

Posted By Diomidis D. Spinellis

I?ve been working with exceptions offered by languages, such as Java and Python, for more than 20 years, invariably as their consumer: catching them when raised by an API and then doing my thing. For the systems I worked on, exception handling mostly involved either quitting the program with an error or re-prompting the user to fix some input. Consequently, my view of them was as a fancy error handling mechanism: syntactic sugar and static enforcement for checking a function?s successful completion. Recently, I refactored the error handling in Alexandria3k , a library and a command-line tool providing efficient relational query access to diverse publication open data sets.

Sun, 03 Sep 2023 19:01:45 UTC

Extending the life of TomTom wearables

Posted By Diomidis D. Spinellis

TomTom recently announced it would stop operating their supporting infrastructure by the end of September following its earlier decision to exit the wearables market . This means that its products, such as sports watches, will become effectively useless, as they will no longer be able to export their activities and sync them with tracker sites. Throwing away an otherwise fine watch only because its maker decided to shut down its proprietary infrastructure seems like a sad waste. Here is how you can download the watch?s data and upload it to Strava , a popular activity tracker, using open source software.

Tue, 04 Jul 2023 07:33:33 UTC

AI is hollowing out the web

Posted By Diomidis D. Spinellis

Much has been written about the existential threat humanity may face from superhuman artificial intelligence. In the meantime I fear that the currently available generative AI, such as ChatGPT, new Bing, and Bard, is actually hollowing out the world wide web as we know it. Over the past few months I?ve been increasingly using ChatGPT to answer all sorts of questions for which in the past I?d have visited Wikipedia Stack Overflow , or a site I?d find through a Google search. On March I hypothesized that such shifts would deforest the knowledge?s ecosystem . Three months later I

Thu, 13 Apr 2023 17:06:18 UTC

How AGI can conquer the world and what to do about it

Posted By Diomidis D. Spinellis

We have seen many calls warning about the existential danger the human race faces from artificial general intelligence (AGI). Recent examples include the letter asking for a six month pause in the development of models more powerful than GPT-4 and Ian Hogarth?s FT article calling for a slow-down in the AI race . In brief, these assert that the phenomenal increase in the power and performance of AI systems we are witnessing raises the possibility that these systems will obsolete humanity. I?ve already argued that some of the arguments made are hypocritical , but that doesn?t mean that they are also vacuous.

Sun, 02 Apr 2023 17:26:20 UTC

Twitter?s overrated dissemination capacity

Posted By Diomidis D. Spinellis

Many of us are worried that Twitter?s increasingly erratic post visibility and user verification policies will curtail our ability to disseminate our work and ideas to a wide audience. Having spent years to attract followers on Twitter, setting up shop on Mastodon sounds like a tough call. Fortunately, anecdotal evidence suggests that dissemination via Mastodon can be more potent than Twitter, even with a fraction of a follower base.

Thu, 30 Mar 2023 17:15:43 UTC

The hypocritical call to pause giant AI

Posted By Diomidis D. Spinellis

The recent open letter calling for a pause in giant AI experiments correctly identifies a number of risks associated with the development of AI, including job losses, misinformation, and loss of control. However, its call to pause some types of AI research for six months smacks of hypocrisy.

Thu, 16 Mar 2023 13:18:43 UTC

AI deforests the knowledge?s ecosystem

Posted By Diomidis D. Spinellis

Big-tech?s dash to incorporate ChatGPT-like interfaces into their search engines threatens the ecosystem of human knowledge with extinction. Knowledge development is a social activity. It starts with scientists publishing papers and books that build on earlier ones and with practitioners, journalists, and other writers disseminating these findings and their opinions in more accessible forms. It continues through specialized web sites, blogs, the Wikipedia, as well as discussion and Q&A forums. It further builds upon our interactions with these media through web site visits, upvotes, likes, comments, links, and citations.

Sun, 09 Oct 2022 16:19:20 UTC

How I fixed git-grep macOS UTF-8 support

Posted By Diomidis D. Spinellis

As a speaker of Greek, I?ve been fixing issues in the handling of non-ASCII characters for over 40 years, using techniques ranging from simple lookup tables to dynamic patching of in-memory images. Here?s how I debugged and fixed the handling of UTF-8 characters in the git grep command, which was broken for almost a decade.

Thu, 10 Mar 2022 19:43:54 UTC

The sorry state of software quality

Posted By Diomidis D. Spinellis

Thanks to a tweet by Aaron Toponce I learned about the Linux /dev/full pseudo-device. Write system calls to it always fail with a ENOSPC (no space on device) error. With it finding software that doesn?t check for failed writes is a piece of cake. Let?s see this in action.

Sat, 27 Nov 2021 18:21:33 UTC

Rather than alchemy, methodical troubleshooting

Posted By Diomidis D. Spinellis

I recently encountered a pesky problem while trying to build a React Native project under Apple?s Xcode . The build would fail with an error reporting: EMFILE: too many open files, watch . Frustratingly, all available advice on the web pointed to different (often inexplicable) directions, none of which worked. After tormenting myself with these, I decided to troubleshoot the problem methodically, which allowed me to pinpoint it and solve it with an uncommon and noteworthy application of the git bisect command. Here?s the story.

Fri, 18 Jun 2021 10:39:23 UTC

The Evolution of the Unix System Architecture

Posted By Diomidis D. Spinellis

Unix has evolved for more than five decades, shaping modern operating systems, key software technologies, and development practices. Studying the evolution of this remarkable system from an architectural perspective can provide insights on how to manage the growth of large, complex, and long-lived software systems. In 2016 my colleague Paris Avgeriou and I embarked on this study aiming to combine his software architecture insights with my software analytics skills. Here is a brief summary of the study, which was published this month in the IEEE Transactions on Software Engineering .

Sat, 02 Jan 2021 14:49:13 UTC

Reviving the 1973 Unix text to voice translator

Posted By Diomidis D. Spinellis

The early Research Edition Unix versions featured a program that would turn a stream of ASCII text into utterances that could be played by a voice synthesizer. The source code of this program was lost for years. Here's the story of how I brought it back to life.

Thu, 10 Dec 2020 22:35:14 UTC

Fast database UPDATE/DELETE operations

Posted By Diomidis D. Spinellis

You may be familiar with the use of a database upsert of MERGE operation to insert a record into a table or update an existing record, if that record already exists. This evaluates the condition for finding the record only once, and is therefore more efficient than other alternatives. How can you efficiently handle a reverse operation of updating a record and deleting it if some condition holds?

Mon, 02 Nov 2020 10:37:19 UTC

Raspberry Pi 400 vs ZX Spectrum

Posted By Diomidis D. Spinellis

The release of the Raspberry Pi 400 personal computer reminded me of a wildly popular home computer that was launched in a similar computer-in-a-keyboard format almost 40 years ago: the Sinclair Research ZX Spectrum . I decided to compare the two, following the steps of an earlier comparison I performed between the 2015 Rapsberry Pi Zero and the 1957 Elliott 405.

Tue, 29 Sep 2020 21:00:33 UTC

Error handling under Unix and Windows

Posted By Diomidis D. Spinellis

One thing that struck me when I first encountered the 4.3BSD Unix system call documentation in the 1980s, was that each call was followed by an exhaustive list of the errors associated with it. Ten years later, when I was going through the Windows API, I was disappointed to see that very few functions documented their error conditions. This is a big deal.

Thu, 27 Aug 2020 16:26:26 UTC

Shell scripting for software developers

Posted By Diomidis D. Spinellis

In an open online edX course on Unix tools I was running over the spring with more than a thousand registered learners, I got asked for ideas on how shell scripts can be useful . This is an intriguing question, because the course focuses mainly on performing one-off tasks in the areas of software development, data engineering, and system administration, rather than automation through shell scripts. In response, I posted how shell scripting improves my personal productivity . Here's my take on how shell scripts are employed in diverse software development tasks.

Thu, 13 Aug 2020 10:16:14 UTC

IBAN length and DESI score

Posted By Diomidis D. Spinellis

Looking at the formats of European country international bank account number (IBAN) codes, I noticed that the IBAN length didn't seem to be significantly correlated to the country's population. Could it be related to the country's IT maturity? I tested that using as a proxy the EU Digital Economy and Society Index , and the results were stunning.

Tue, 21 Jul 2020 12:16:33 UTC

Auto-correct text entered with the wrong keyboard layout

Posted By Diomidis D. Spinellis

To enter text in some languages you press a special key combination (e.g. Alt-Shift) to toggle the keyboard layout. The keyboard layout context is typically kept separately for each window. This is generally good, but forces you to remember (or check) the current layout every time you switch to another window. If you forget to do that, the text you type will come out as gibberish. To me this happens often enough that I automated the fixing of such text.

Sun, 31 May 2020 19:55:23 UTC

The titanic battle between big iron and microprocessors

Posted By Diomidis D. Spinellis

I'm a child of a microprocessor age. I learned to program on computers powered by a variety of microprocessors starting with the 4-bit SC43177/SC43178 pair powering a Sharp PC-1211 , continuing with the 8-bit Zilog Z80 on the TRS-80 , the Zenith Z-89 , and the Sinclair ZX81 computers, and graduating to 16-bit processors: the Texas Instruments TMS9900 powering its manufacturer's TI-99/4A home computer and finally Intel's 8088 on an IBM Portable (16kg) Personal Computer . At the university I encountered an IBM System/370 4331/2 mainframe, which I regarded with outer contempt. It seemed to me like a dinosaur: slow and unwieldy, lacking interactivity, color, and graphics.

Wed, 20 May 2020 18:50:44 UTC

Contact tracing with a Raspberry Pi Zero-W

Posted By Diomidis D. Spinellis

Contact tracing via smartphone apps has been widely touted as an important way to control and limit the spread of the COVID-19 epidemic. However, basing contact-tracing on phone apps has several limitations. Here are instructions for constructing a contact tracing device prototype with a Raspberry Pi Zero-W . The constructed device is compatible with the Apple/Google Bluetooth contact tracing specification. It runs the Epidose software, which is based on the DP3T "unlinkable" design.

Mon, 06 Apr 2020 15:30:13 UTC

A chat protocol for remote lectures

Posted By Diomidis D. Spinellis

Due to the current coronavirus lock-down we're holding all our lectures remotely; currently via Microsoft Teams meetings. Students can see my presentation and me talking, and I can hear them, when they unmute their microphone. (By default they are muted to avoid noise and echoes.) What I thought I would miss is the lecture's interactions: the responses I get to questions I pose to the students, as well as students' comments and questions. We found out that such interactions can work quite well ? at times better than in the face-to-face lecture ? by following a simple interaction protocol.

Mon, 23 Mar 2020 09:43:44 UTC

Shell scripting for personal productivity

Posted By Diomidis D. Spinellis

In an edX course on Unix tools I am running these weeks, I got asked for ideas on how shell scripts can be useful . This is a very interesting question, because the course focuses mainly on performing one-off tasks in the areas of software development, data engineering, and system administration, rather than automation through shell scripts. Here's how I'm using shell scripting to enhance my personal productivity. I'll post further installments regarding software development and system administration.

Fri, 20 Mar 2020 11:46:22 UTC

What explains the counter-intuitive numbering of chip pins?

Posted By Diomidis D. Spinellis

One of the first things one learns in electronics is how chip pins are numbered. In the common dual in-line package (DIP) pin numbering starts from the left side of a notch appearing on the top of the package and continues counterclockwise until it reaches the other side of the notch. Why are pins counter-intuitively numbered in a rotating fashion rather than by columns as one would expect for a rectangular package? And why is the numbering not following the direction of a clock's numbers? I think that both decisions can be traced back to history.

Tue, 17 Mar 2020 13:16:11 UTC

Installing PyTorch on a Raspberry Pi-3B+ redux

Posted By Diomidis D. Spinellis

This is an update to articles for installing the PyTorch machine learning library on a Raspberry Pi that have been published by Amrit Das in 2018 and Saparna Nair in 2019 . It builds on them by updating the required settings and introducing a fix and a few tweaks to make the process run considerably faster. Although there are Python wheels floating around that offer PyTorch as a Raspberry Pi Python package, downloading them from unverified sources is a security risk. Here's how to install PyTorch from source.

Sun, 15 Mar 2020 22:34:10 UTC

Seven reasons to add Unix command line expertise to your tool chest

Posted By Diomidis D. Spinellis

On Tuesday March 17th 2020 my free online massive open online course (MOOC) on the use of Unix command line tools for data, software, and production engineering goes live on the edX platform. Already more than one thousand participants from around the world have registered for it; you should still be able to enroll through this link . In response to the course's announcement seasoned researchers from around the world have commented that this is an indispensable course and that it is very hard to beat the ROI of acquiring this skillset, both for academia and industry . In an age of shiny IDEs and cool GUI tools, what are the reasons for the enduring utility and popularity of the Unix command line tools?

Fri, 06 Mar 2020 18:43:14 UTC

What can software developers learn from the Soviet Moon Landing Program?

Posted By Diomidis D. Spinellis

In the twentieth century space race between the Soviet Union and the United States the former started way ahead. In 1957 it launched the first artificial satellite, Sputnik 1, and in 1961 it had Yuri Gagarin orbiting the Earth as the first human to space. Yet, when it came to landing a person on the Moon it flopped spectacularly, abandoning its N1 rocket and Soyuz spacecraft program after a series of fiery failures. It turns out that the problems of Soviet program's N1 rocket ? one cased one of the largest artificial non-nuclear explosions in human history ?

Tue, 25 Feb 2020 10:41:30 UTC

Was Knuth Really Framed by Jon Bentley?

Posted By Diomidis D. Spinellis

Recently, the formal methods specialist Hillel Wayne posted an interesting article discussing whether Donald Knuth was actually framed when Jon Bentley asked him to demonstrate literate programming . (Knuth came up with an 8-page long monolithic listing, whereas in a critique Doug McIlroy provided a six line shell script.) The article makes many interesting and valid points. However, among the raised points one is that the specified problem was ideal for solving with Unix tools, and that a different problem, such as ?find the top K pairs of words and print the Levenshtein distance between each pair", would be much more difficult to solve with Unix commands.

Sat, 14 Dec 2019 12:04:04 UTC

Convert file I/O into pipe I/O with /dev/fd

Posted By Diomidis D. Spinellis

Some commands read data from files or write data to files, without offering an obvious way to use them as part of a pipeline. How can you write a program to interact with such a command in a streaming fashion? This would allow your program and the command run concurrently, without the storage and I/O overhead of a temporary file. Here is how to do it.

Thu, 05 Dec 2019 18:00:30 UTC

Pia Betton on Service Design

Posted By Diomidis D. Spinellis

I attended an excellent talk by Pia Betton on service design , which according to Wikipedia is the activity of planning and organizing people, infrastructure, communication and material components of a service in order to improve its quality and the interaction between the service provider and its customers. Here are my notes.

Sun, 03 Nov 2019 12:13:30 UTC

How to monitor MySQL / MariaDB query progress

Posted By Diomidis D. Spinellis

The progress indicator of MySQL or MariaDB long-running commands and queries is extremely extremely and frustratingly coarse. In an index update I?m running now it was stuck in the same state for more than three hours. Thankfully, the pmonitor tool allows us to precisely monitor the progress of many commands. Here?s an example of its application on MariaDB.

Wed, 29 May 2019 21:41:34 UTC

So, you?re chairing a conference session?

Posted By Diomidis D. Spinellis

Earlier today a first-time session chair asked me for tips on chairing his session. With conference presentations becoming shorter and more packed, I realized that the task of the session chair has become more demanding. Here?s some advice.

Tue, 27 Nov 2018 18:33:35 UTC

Java Streams and Unix Pipelines: A Dictionary

Posted By Diomidis D. Spinellis

As I was preparing my class notes for functional programming in Java I was struck between the neat correspondence between many Java Stream methods and Unix commands. I decided to organize the most common of these in a dictionary form that allows the mapping between the two.

Fri, 16 Nov 2018 15:38:19 UTC

Debugging had to be discovered!

Posted By Diomidis D. Spinellis

I start my Communications of the ACM article titled Modern debugging techniques: The art of finding a needle in a haystack (accessible from this page without a paywall) with the following remarkable quote. " 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 it would be. [...] Debugging had to be discovered. I can remember the exact instant [...] when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs." A Google search for this phrase returns close to 3000 results, but most of them are cryptically attributed as "Maurice Wilkes, discovers debugging, 1949" .

Sun, 05 Aug 2018 11:15:01 UTC

How I slashed a SQL query runtime from 380 hours to 12 with two Unix commands

Posted By Diomidis D. Spinellis

I was trying to run a simple join query on MariaDB (MySQL) and its performance was horrendous. Here's how I cut down the query's run time from over 380 hours to under 12 hours by executing part of it with two simple Unix commands.

Tue, 03 Apr 2018 17:44:18 UTC

How to Perform Set Operations on Terabyte Files

Posted By Diomidis D. Spinellis

The Unix sort command can efficiently handle files of arbitrary size (think of terabytes). It does this by loading into main memory all the data that can fit into it (say 16GB), sorting that data efficiently using an O(N log N) algorithm, and then merge-sorting the chunks with a linear complexity O(N) cost. If the number of sorted chunks is higher than the number of file descriptors that the merge operation can simultaneously keep open (typically more than 1000), then sort will recursively merge-sort intermediate merged files. Once you have at hand sorted files with unique elements, you can efficiently perform set operations with them through linear complexity O(N) operations.

Tue, 13 Feb 2018 09:09:49 UTC

The Shoemaker's Children Go Barefoot

Posted By Diomidis D. Spinellis

Earlier today I submitted the camera-ready version of a technical briefing on mining Git repositories , which Georgios Gousios and I will be presenting at the 2018 International Conference on Software Engineering . I was struck by the complexity and inefficiency of the administrative process.

Sun, 19 Nov 2017 13:36:30 UTC

Reviving the 1973 Unix Programmer's Manual

Posted By Diomidis D. Spinellis

The 1973 Fourth Edition of the Unix Programmer's Manual doesn't seem to be available online in typeset form. This is how I managed to recreate it from its source code.

Sat, 18 Nov 2017 09:04:39 UTC

How I Recovered my Firefox Tab Groups

Posted By Diomidis D. Spinellis

When quit and restarted Firefox today I received an unwelcomed shock. All my tab groups, which I maintained using the Tab Groups by Quicksaver plugin, were gone! This happened because it upgraded to Firefox Quantum (57), whose API does not maintain backward compatibility with the one used by the plugin. Although I knew the plugin would one day stop working, I thought there would be some last-minute warning and chance to export the tab groups.

Tue, 03 Oct 2017 15:11:19 UTC

An Embarrassing Failure

Posted By Diomidis D. Spinellis

My colleague Georgios Gousios and I are studying the impact of software engineering research in practice. As part of our research, we identified award-winning and highly-cited papers, and asked their authors to complete an online survey. Each survey was personalized with the author's name and the paper's title and publication venue. After completing a trial and a pilot run, I decided to contact the large number of remaining authors. This is when things started going horribly wrong.

Fri, 15 Sep 2017 18:54:42 UTC

Who are the Publishers of Computer Science Research?

Posted By Diomidis D. Spinellis

To answer this question, I downloaded the DBLP database and used the DOI publisher prefix of each publication to determine its publisher. I grouped the 3.4 million entries by publisher and joined the numeric prefixes with the publisher names available in the list of Crossref members. Based on these data, here is a pie chart of the major publishers of computer science research papers.

Thu, 14 Sep 2017 08:47:15 UTC

The Origins of Malloc

Posted By Diomidis D. Spinellis

The 1973 Fourth Edition Unix kernel source code contains two routines, malloc and mfree , that manage the dynamic allocation and release of main memory blocks for in-memory processes and of continuous disk swap area blocks for swapped-out processes. Their implementation and history can teach us many things regarding modern computing.

Tue, 05 Sep 2017 16:50:02 UTC

Of BOOL and stdbool

Posted By Diomidis D. Spinellis

The C99 standard has added to the C programming language a Boolean type, _Bool and the bool alias for it. How well does this type interoperate with the Windows SDK BOOL type? The answer is, not at all well, and here's the complete story.

Tue, 15 Aug 2017 09:12:41 UTC

Debugging in Practice: dgsh Issue 85

Posted By Diomidis D. Spinellis

Fixing an insidious bug in the new Unix directed graph shell dgsh allowed me to demonstrate in practice 10 of the 66 principles, techniques, and tools I describe in the book Effective Debugging . Almost all steps all documented in the corresponding issue and commits . Here's a detailed retrospective.

Thu, 10 Aug 2017 16:51:21 UTC

Display Git's and Current Directory on Terminal Bar

Posted By Diomidis D. Spinellis

I typically have more than ten windows open on my desktop and rely on their names to select them. Being a command-line aficionado, most of them are terminals. I have them configured to display the current directory by setting the bash PROMPT_COMMAND environment variable to 'printf "\033]0;%s:%s\007" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' . The problem is that the directory I'm often in has a generic name, such as src or doc , so the terminal's name isn't very useful.

Fri, 16 Jun 2017 15:36:18 UTC

Impact Factor of Computer Science Journals 2016

Posted By Diomidis D. Spinellis

Clarivate Analytics (ex Thomson Reuters, ex ISI) has published the 2016 InCites Journal Citation Reports . Following similar studies I have performed in the past, here is my analysis of the current status and trends for the impact factor (IF) of computer science journals.

Thu, 16 Feb 2017 08:55:44 UTC

The Road to Debugging Success

Posted By Diomidis D. Spinellis

A colleague recently asked me how to debug a Linux embedded system that crashed in the Unix shell (and only there), when its memory got filled through the buffer cache. He added that when he emptied the buffer cache the crash no longer occurred.

Fri, 20 Jan 2017 19:09:47 UTC

Measures of Donald Trump's Inaugural Address

Posted By Diomidis D. Spinellis

Computers allow us to measure objectively the properties of text. I applied some established text and sentiment analysis algorithms on Donald Trump's inaugural address and compared the results with the same metrics of past well-known presidents. Presidential speeches are nowadays typically a team effort. Nevertheless, I thought that the speech writing team's output reflects the president's choices regarding staffing, policy, and style. Moreover, as luck would have it, in this case it was reported that Donald Trump wrote the inaugural address himself . The findings of this exercise surprised me.

Mon, 16 Jan 2017 11:50:43 UTC

How to avoid redoing manual corrections

Posted By Diomidis D. Spinellis

Say you have an automated process to create a report, which you then have to polish by hand, because there are adjustments that require human judgment. After three hours of polishing, you realize that the report is full of errors due to a bug in the initial reporting process. Is there a way to salvage the three hours of work you put into it?

Tue, 03 Jan 2017 16:34:26 UTC

Debugging PCSecrets Synchronization

Posted By Diomidis D. Spinellis

A reader of my Effective Debugging book commented that debugging is learned through experience. I think he's partly right, so I'll periodically describe here techniques and tools I use when debugging. A problem I faced today was the inability of the PC-based PCSecrets program to sync with the Secrets for Android counterpart. Here is how I troubleshot and solved the problem.

Sun, 01 Jan 2017 20:50:01 UTC

As it Happened: Leap Second 37

Posted By Diomidis D. Spinellis

Fri, 02 Dec 2016 22:26:38 UTC

Computer vs Human 0-1

Posted By Diomidis D. Spinellis

Earlier today the Athens State Orchestra played the Symphony No. 3 in C minor, Op. 78 by Camille Saint-Saens, which is also known as the Organ Symphony . The French organist and composer Thierry Escaich was supposed to play the organ. There was a slight delay at the beginning: a lady appeared on stage and explained that there were technical problems with the organ's "brain".

Thu, 17 Nov 2016 02:21:49 UTC

The State of Software Engineering Research

Posted By Diomidis D. Spinellis

At the 2016 Foundations of Software Engineering conference a panel discussed the state of software engineering research. The panelists were asked to reflect on three questions.

Thu, 27 Oct 2016 12:04:14 UTC

Netdata on a Raspberry Pi

Posted By Diomidis D. Spinellis

A couple of days ago I had the privilege to see a demo of netdata by Costa Tsaousis , the person behind this project. The project offers comprehensive real time monitoring of a Linux computer with low overhead in a single easily-installed and self-contained system. I thought this was too good to be true, but the number of users and installations hinted that this could well be the case. I therefore decided to install the system on a Raspberry Pi I'm configuring to replace an ancient 20 year old IBM PS/2 server .

Thu, 13 Oct 2016 11:10:16 UTC

Debugging a File Synchronization Problem

Posted By Diomidis D. Spinellis

In Effective Debugging I write that if a web search doesn't return you any useful results, then maybe you're barking at the wrong tree. Here's an example.

Tue, 13 Sep 2016 18:12:21 UTC

Revision Control Smells

Posted By Diomidis D. Spinellis

As software developers, we talk about code smells , design smells , and even configuration smells . While reviewing some code, it occurred to me that revision control smells are also distinguishable and important. Here are some obvious ones and my recommendations for avoiding them. An orderly revision control repository is a sign of professionalism.

Sat, 07 May 2016 19:49:03 UTC

The Computer Tube

Posted By Diomidis D. Spinellis

I've been reading the book ENIAC in Action , which details the fascinating ten-year history of the first general-purpose programmable electronic computer. In it I found a reference to 7AK7, the so-called computer tube , which improved the reliability of tube computers.

Fri, 18 Mar 2016 08:30:26 UTC

Verifying the Substitution Cipher Folklore

Posted By Diomidis D. Spinellis

A substitution cipher has each letter substituted with another. Cryptography folklore has it that simple substitution ciphers are trivial to break by looking at the letter frequencies of the encrypted text. I tested the folklore and the results were not quite what I was expecting.

Sun, 13 Dec 2015 10:02:59 UTC

Raspberry Pi vs USB vs Mac Audio

Posted By Diomidis D. Spinellis

The audio hardware of Raspberry Pi is known to produce relatively poor sound quality. I bought a cheap USB sound card to try as an alternative. Here is what I found.

Sun, 29 Nov 2015 00:23:04 UTC

Raspberry Pi Zero vs Elliott 405

Posted By Diomidis D. Spinellis

Twitter users @SadHappyAmazing and @HistoricalPics posted yesterday two photographs (copy) showing the Raspberry Pi Zero juxtaposed in front of the Norwich City Council Treasurer's Department building, where the delivery of the Elliott 405 computer was photographed in 1957. Here is how the two computers compare.

Sun, 28 Jun 2015 08:49:58 UTC

Impact Factor of Computer Science Journals 2014

Posted By Diomidis D. Spinellis

The Thomson Reuters Web of Knowledge has published the 2014 Journal Citation Reports . Following similar studies I performed in the past eight years ( 2007 , '08 , '09 , '10 , '11 , '12 , '13 , '14 ) here is my analysis of the current status and trends for the impact factor of computer science journals.

Fri, 22 May 2015 10:57:49 UTC

Grady Booch on the Future in Software Engineering

Posted By Diomidis D. Spinellis

I was priviledged to hear Grady Booch deliver a keynote on the Future in Software Engineering. Here are my notes of some important statements and interesting soundbytes.

Sat, 28 Feb 2015 18:00:15 UTC

ABS's 2015 Academic Journal Guide

Posted By Diomidis D. Spinellis

The UK-based Association of Business Schools recently published the 2015 Academic Journal Guide (AJG) as an update to its 2010 version, sparking controversy in its press coverage . Following a study I've been performing on the impact factor of computer science journals for the past eight years based on the yearly Thomson Reuters Web of Knowledge updates of its Journal Citation Reports , I decided to look at what has changed in the AJG from 2010 to 2015.

Tue, 13 Jan 2015 14:44:01 UTC

What's the Best Time and Day to Tweet?

Posted By Diomidis D. Spinellis

I've seen big variations in interactions of similarly interesting (to me at least) tweets that I send, and I think that a deciding factor is the day or the hour I send them. Although there's plenty of material on the web on this topic , as you will see below, personalized results can capture important factors associated with the realities of global interactions.

Sat, 10 Jan 2015 16:25:49 UTC

Raspberry Pi and Scratch Control Lego Power Functions

Posted By Diomidis D. Spinellis

Lego Power Functions is a system of motors, receivers, and remote control units, which can be used with Lego blocks. Scratch is a free programming environment aimed at children. The Raspberry Pi is credit card sized low cost computer with the ability to interact with the outside world. Wouldn't it be neat to use the three together to control Lego toys with Scratch?

Thu, 25 Sep 2014 07:32:14 UTC

First, Do No Harm

Posted By Diomidis D. Spinellis

Lets face it: not all software developers are superstar programmers (and, trust me, not all luminary developers program in a sane way.) This means that when we maintain existing code, we must be very careful to avoid breaking or degrading the system we work on. Why? Because a failure of a running system can affect operations, people, profits, property, and sometimes even lives. Here are the rules.

Fri, 08 Aug 2014 15:09:40 UTC

Impact Factor of Computer Science Journals 2013

Posted By Diomidis D. Spinellis

The Thomson Reuters Web of Knowledge has published the 2013 Journal Citation Reports . Following similar studies I performed in the past sever years ( 2007 , '08 , '09 , '10 , '11 , '12 , '13 ) here is my analysis of the current status and trends for the impact factor of computer science journals.

Wed, 30 Jul 2014 10:34:42 UTC

Service Orchestration with Rundeck

Posted By Diomidis D. Spinellis

Increasingly, software is provided as a service. Managing and controlling the services provision is tricky, but tools for service orchestration, such as Rundeck , can make our lives easier. Take software deployment as an example. A well-run IT shop will have automated both the building of its software using tools like make, Ant, and Maven and the configuration of the hosts the software runs on with CFEngine, Chef, or Puppet (see the post Dont Install Software by Hand” ). Furthermore, version control tools and continuous integration will manage the software and the configuration recipes, handling developer contributions, reviews, traceability, branches, logging, and sophisticated workflows.

Thu, 24 Apr 2014 13:13:27 UTC

Developing in the Cloud

Posted By Diomidis D. Spinellis

Running a top-notch software development organization used to be a capital-intensive endeavor, requiring significant technical and organizational resources, all managed through layers of bureaucracy. Not anymore. First, many of the pricey systems and tools that we developers need to work effectively are usually available for free as open source software. More importantly, cheap, cloud-based offerings do away with the setup, maintenance, and user support costs and complexity associated with running these systems. Here are just a few of the services and providers that any developer group can easily tap into (you can find many more listed here ):

Wed, 15 Jan 2014 11:42:45 UTC

Bespoke Infrastructures

Posted By Diomidis D. Spinellis

In the 1920s, the Ford Motor Company embarked on an ill-fated attempt to establish an industrial town in an Amazon rainforest as a way to secure a cultivated rubber supply for its cars wheels. At the time, it already owned ore mines, forests, and a steel foundry to produce the raw materials for its cars; today, it buys from external suppliers, even its cars electronic control units. How do these two phases of the automotive industrys history relate to the way we currently develop and adopt infrastructure in our profession?

Wed, 11 Dec 2013 13:45:05 UTC

The Birth of Standard Error

Posted By Diomidis D. Spinellis

Earlier today Stephen Johnson, in a mailing list run by the The Unix Heritage Society , described the birth of the standard error concept: the idea that a program's error output is sent on a channel different from that of its normal output. Over the past forty years, all major operating systems and language libraries have embraced this concept.

Fri, 06 Dec 2013 12:49:37 UTC

The Frictionless Development Environment Scorecard

Posted By Diomidis D. Spinellis

The environment we work in as developers can make a tremendous difference on our productivity and well-being. Ive often seen myself get trapped in an unproductive setup through a combination of inertia, sloth, and entropy. Sometimes I put-off investing in new, better tools, at other times I avoid the work required to automate a time-consuming process, and, also, as time goes by, changes in my environment blunt the edge of my setup. I thus occasionally enter into a state where my productivity suffers death by a thousand cuts.

Thu, 05 Dec 2013 10:54:55 UTC

Posted By Diomidis D. Spinellis

Paragraph for the RSS feed

Mon, 21 Oct 2013 06:20:34 UTC

A Better Air Gap

Posted By Diomidis D. Spinellis

Bruce Schneier recently published ten rules for setting up an air-gapped computer ; a computer that even the NSA can't hack, because it's not connected to the internet. His rules are practical and make sense, but, given the number of vulnerabilities regularly found in modern operating systems, I think that they need strengthening.

Tue, 10 Sep 2013 21:12:16 UTC

Differential Debugging

Posted By Diomidis D. Spinellis

If estimating the time needed for implementing some software is difficult, coming up with a figure for the time required to debug it is nigh on impossible. Bugs can lurk in the most obscure corners of the system, or even in the crevices of third-party libraries and components. Ask some developers for a time estimate, and dont be surprised if an experienced one snaps back, Ive found the bug when Ive found the bug. Thankfully, there are some tools that allow methodical debugging, thereby giving you a sense of progress and a visible target. A method Ive come to appreciate over the past few months is differential debugging.

Thu, 25 Jul 2013 10:00:13 UTC

Portability: Goodies vs. the hair shirt

Posted By Diomidis D. Spinellis

I dont know what the language of the year 2000 will look like, but I know it will be called Fortran  Tony Hoare Writing code that can run on any platform used to be a golden standard, as attested by the tens of books with the word portable in their title. Every day however staying true to the faith of portable code is becoming more challenging as mighty ecosystems amass resources to tempt us into their platform-specific version of heaven. We can write non-portable code out of laziness or ignorance, because we cant be bothered to verify or check that our code follows a standard.

Wed, 03 Jul 2013 07:36:57 UTC

Impact Factor of Computer Science Journals 2012

Posted By Diomidis D. Spinellis

The Thomson Reuters Web of Knowledge has published the 2012 Journal Citation Reports . Following similar studies I performed in the past six years ( 2007 , '08 , '09 , '10 , '11 , '12 ) here is my analysis of the current status and trends for the impact factor of computer science journals.

Wed, 19 Jun 2013 11:20:57 UTC

How to Create Your Own Git Server

Posted By Diomidis D. Spinellis

Although I'm a happy (also paying) user of GitHub's offerings, there are times when I prefer to host a private repository on a server I control. Setting up your own Git server can be useful if you're isolated from the public internet, if you're subject to inflexible regulations, or if you simply want features different from those offered by GitHub (and other similar providers). Setting up a Git server on a Unix (Linux, Mac OS X, *BSD, Solaris, AIX) machine isn't difficult, but there are many details to observe. Here is a complete guide.

Mon, 10 Jun 2013 15:41:01 UTC

How to make a MacBook Kensington Lock Adapter

Posted By Diomidis D. Spinellis

Apple, in its infinite wisdom, has not included a Kensington lock slot in the current model of the MacBook Pro computer. Given the computer's price, desirability, and the fact that three people I know have had theirs stolen, I decided to build an improvised adapter that would allow me attach a Kensington lock to the computer. I realize, that the security offered by such a contraption is what my colleague Vassilis Prevelakis calls an "advisory lock", for Kensington locks can be easily picked or pried away.

Wed, 08 May 2013 13:58:37 UTC

Systems Software

Posted By Diomidis D. Spinellis

Systems software is the low-level infrastructure that applications run on: the operating systems, language runtimes, libraries, databases, application servers, and many other components that churn our bits 24/7. Its the mother of all code. In contrast to application software, which is constructed to meet specific use cases and business objectives, systems software should be able to serve correctly any reasonable workload. Consequently, it must be extremely reliable and efficient. When it works like that, its a mighty tool that lets applications concentrate on meeting their users needs. When it doesnt, the failures are often spectacular.

Sat, 30 Mar 2013 10:51:58 UTC

How to Fix the Sony MDR-W08L Headphones

Posted By Diomidis D. Spinellis

I love the Sony MDR-W08L headphones , because they are featherlight and the only ones that don't fall from my ears when I run. Sadly, there's no effective strain relief at the point where the cable leaves their body. As a result the cable can become internally severed, and the sound becomes intermittent. Here's how to fix this problem.

Thu, 14 Mar 2013 10:18:01 UTC

Software Tools Research: SPLASH Panel Discussion

Posted By Diomidis D. Spinellis

Written by Dennis Mancl and Steven Fraser At the recent SPLASH (Systems, Programming, Languages and Applications: Software for Humanity) conference, one of us (Steven Fraser) organized an international group of experts to discuss challenges in software tools research. 1 The panelists included Kendra Cooper (University of Texas, Dallas), Jim Cope Coplien (Gertrud & Cope), Junilu Lacar (Cisco Systems), Ruth Lennon (Letterkenny Institute of Technology), Diomidis Spinellis (Athens University of Economics and Business), and Giancarlo Succi (Free University of Bolzano-Bozen). The discussion interwove three threadstool use, development, and educationand the panelists took a critical look at how well tools serve the needs of software professionals, managers, and academics.

Thu, 21 Feb 2013 14:04:37 UTC

Systems Code

Posted By Diomidis D. Spinellis

If I program in many high and low-level languages, but don–t write systems code, I am a quiche programmer or a code monkey. And if my code runs without errors, and I know the complexity of all algorithms; and if my servers have hundreds of cores and gigabytes of RAM, but don–t write systems code, I am nothing. And if I run the hippest kernel, and install the neatest apps, but don–t write systems code, it profiteth me nothing.

Wed, 23 Jan 2013 15:27:51 UTC

The Importance of Being Declarative

Posted By Diomidis D. Spinellis

A declarative programming style focuses on what you want your program to do rather than how to perform the task. Through diverse programming techniques, libraries, and specialized languages, you end up with code that sidesteps nitty-gritty implementation details, dealing instead with a tasks big picture.

Wed, 19 Dec 2012 09:44:45 UTC

APIs, Libraries, and Code

Posted By Diomidis D. Spinellis

Lets say you want to display a JPEG-compressed image, calculate Pearsons correlation coefficient, parse an XML file, or create a key-value store. You can often choose between using the functionality of the applications platform (Java EE or .NET), calling one of several available external libraries, or writing the code on your own. It isnt an easy choice because you have many factors to consider. Specifically, you must take into account the tasks complexity, as well as the licensing, quality, and support of competing alternatives.

Wed, 12 Dec 2012 17:33:07 UTC

Changes in the Way we View Computing

Posted By Diomidis D. Spinellis

The Association for Computing Machinery recently released the 2012 version of the ACM Computing Classification System (CCS). This is the work of 120 volunteers and marks significant changes over the previous version, which was released in 1998. To create it the volunteers mined ACM Digital Library search terms and used the services of a specialist company that creates ontologies. To see what has changed in the past 14 years in the way we view computing, I used Wordle to create word clouds from the 1998 and the 2012 versions.

Wed, 05 Dec 2012 08:40:35 UTC

Programming Languages vs. Fat Fingers

Posted By Diomidis D. Spinellis

A substitution of a comma with a period in project Mercury's working Fortran code compromised the accuracy of the results, rendering them unsuitable for longer orbital missions. How probable are such events and how does a programming language's design affect their likelihood and severity? In a paper I recently presented at the 4th Annual International Workshop on Evaluation and Usability of Programming Languages and Tools I showed results obtained by randomly perturbing similar programs written in diverse languages to see whether the compiler or run-time system would detect those changes as errors, or whether these would end-up generating incorrect output.

Sun, 21 Oct 2012 17:20:24 UTC

Chemical Element Trump Cards

Posted By Diomidis D. Spinellis

I can still remember the weight of the Lancia Stratus car that featured in the Top Trumps cards were playing as children in the 1970s: 870kg. It was the lightest of all the flashy cars in the set, and therefore a much sought-after card. Other card sets that kept us busy included airplanes, motorcycles, and tanks. Through them we learned tens of useless trivia, but also got a feeling of the compromises inherent in engineering.

Thu, 11 Oct 2012 14:16:09 UTC

Virtualize Me

Posted By Diomidis D. Spinellis

The virtual machine (VM) is the most dazzling comeback in information technology. IBM implemented a VM platform architecture in the late 1960s in its CP/CMS operating system. The companys goal was to provide the time-sharing capabilities that its batch-oriented System/360 lacked. Thus a simple control program (CP) created a VM environment where multiple instances of the single-user CMS operating system could run in parallel. Thirty years later, virtualization was rediscovered when companies like VMware found ways to virtualize the less accommodating Intel x86 processor architecture.

Sat, 22 Sep 2012 14:46:15 UTC

How to Calculate an Operation's Memory Consumption

Posted By Diomidis D. Spinellis

How can you determine how much memory is consumed by a specific operation of a Unix program? Valgrind 's Massif subsystem could help you in this regard, but it can be difficult to isolate a specific operation from Massif's output. Here is another, simpler way.

Tue, 18 Sep 2012 07:42:30 UTC

Research Proposal Becomes Reality

Posted By Diomidis D. Spinellis

Eight years ago I submitted a research proposal for developing a tablet-based game platform for toddlers. Although the proposal was not accepted for funding, it's nice to see the idea becoming a reality through the unveiling of the Toys 'R' Us $150 Tabeo tablet for kids .

Tue, 04 Sep 2012 15:42:11 UTC

Don't Install Software by Hand

Posted By Diomidis D. Spinellis

An IT systems setup and configuration is a serious affair. It increasingly affects us developers mainly due to the proliferation and complexity of internet-facing systems. Fortunately, we can control and conquer this complexity by adopting IT-system configuration management tools.

Tue, 07 Aug 2012 16:19:55 UTC

Importing an RCS Project into Git

Posted By Diomidis D. Spinellis

RCS stands for Revision Control System. You may have never heard it, because it's more than a quarter-century old; a paper describing it was published in 1985. Although its commands are still available in most Unix distributions and it's one of the easiest systems to use in a single-user scenario, it is clearly showing its age when compared to more modern systems. Here is how to move an existing project managed with RCS to the 21st century and Git , while preserving all its history.

Tue, 03 Jul 2012 12:43:50 UTC

Impact Factor of Computer Science Journals 2011

Posted By Diomidis D. Spinellis

The Thomson Reuters Web of Knowledge has published the 2011 Journal Citation Reports . Following similar studies I performed in 2007 , '08 , '09 , '10 , and '11 , here is my analysis of the current status and trends for the impact factor of computer science journals.

Fri, 01 Jun 2012 21:14:05 UTC

Why are AWS Command-Line Tools so Slow?

Posted By Diomidis D. Spinellis

Amazon's Elastic Compute Cloud command-line tools are useful building blocks for creating more complex shell scripts. They allow you to start and stop instances, get their status, add tags, manage storage, IP addresses, and so on. They have one big disadvantage: they take a long time to run. For instance, running ec2-describe-instances for six instances takes 19 seconds on an m1.small AWS Linux instance. One answer given , is that this is caused by JVM startup overhead. I found that hard to believe, because on the same machine a Java "hello world" program executes in 120ms, and running ec2-describe-instances --help takes just 321ms.

Thu, 17 May 2012 12:41:03 UTC

Git

Posted By Diomidis D. Spinellis

Even by our fields dizzying rate of progress I wouldnt expect to revisit the subject of version control just six years after I first wrote about it in this column ( Version Control Systems . Software , 22(5):108109, September/October 2005). Yet here we are. The new kid on the block is git, a distributed revision control system available on all mainstream development platforms through a Free Software license. Git, a brainchild of Linus Torvalds, began its life in 2005 as the revision management system used for coordinating the development of the Linux kernel. Over the years its functionality, portability, efficiency, and third-party adoption have evolved by leaps and bounds to make it its categorys leader.

Thu, 22 Mar 2012 17:47:48 UTC

How do Big US Firms Use Open Source Software?

Posted By Diomidis D. Spinellis

We hear a lot about the adoption of open source software, but when I was asked to provide hard evidence there was little I could find. In an article I recently published in the Journal of Systems and Software together with my colleague Vaggelis Giannikas we tried to fill this gap by examining the type of software the US Fortune 1000 companies use in their web-facing operations. The results were not what I was expecting.

Thu, 08 Mar 2012 07:03:33 UTC

Package Management Systems

Posted By Diomidis D. Spinellis

DLL hell was a condition that often afflicted unfortunate users of old Microsoft Windows versions. Under it, the installation of one program would render others unusable due to incompatibilities between dynamically linked libraries. Suffering users would have to carefully juggle their conflicting DLLs to find a stable configuration. Similar problems distress any administrator manually installing software that depends on incompatible versions of other helper modules.

Tue, 07 Feb 2012 16:34:01 UTC

How to Decrupt "Secrets for Android" Files

Posted By Diomidis D. Spinellis

Secrets for Android is a nifty Android application that allows you to securely store passwords and other sensitive data on your Android phone. Your data are encoded with your supplied password using strong cryptography and are therefore protected if your phone gets stolen. Although the application offers a backup and an export facility, I found both wanting in terms of the availability and confidentiality associated with their use.

Wed, 11 Jan 2012 14:57:16 UTC

Refactoring on the Cheap

Posted By Diomidis D. Spinellis

The refactorings that a good integrated development environment can perform are impressive. Yet, there are many reasons to master some cheap-and-cheerful alternative approaches. First, there will always be refactorings that your IDE wont support. Also, although your IDE might offer excellent refactoring support for some programming languages, it could fall short on others. Modern projects increasingly mix and match implementation languages, and switching to a specialized IDE for each language is burdensome and inefficient. Finally, IDE-provided refactorings resemble an intellectual straightjacket. If you only know how to use the ready-made refactorings, youll miss out on opportunities for other code improvements.

Sun, 08 Jan 2012 16:42:47 UTC

Mind Mapping

Posted By Diomidis D. Spinellis

In a recent NPR interview the journalist described how I used a mind map to organize my work while I served as Secretary General for Information Systems at the Greek Ministry of Finance. A number of people asked me for more details; if you're interested read on.

Wed, 28 Dec 2011 10:29:56 UTC

Pretend Invitations

Posted By Diomidis D. Spinellis

Choosing between people you want to invite to a function and people you have to invite is sometimes difficult. Say Alice wants to invite Tom, Dick, and Harry to a party, but she'd actually prefer if Dick didn't show up. Here's how Alice can send invitations by email from an email-capable Unix system to achieve the desired result, while covering her scheming with plausible deniability.

Sat, 17 Dec 2011 11:31:55 UTC

Advice from Successful Greek IT Startups

Posted By Diomidis D. Spinellis

Members of the Hellenic Association of Mobile Application Companies and the Hellenic Semiconductor Industry Association , assorted biotechnology companies, and representatives from Greek and US-based venture capital funds gathered on Friday December 17, 2011 in a meeting to exchange advice, tips, and war stories on venturing abroad. It was one of the most inspiring meetings I've attended for some time. These are my notes from the meeting.

Wed, 14 Dec 2011 15:24:31 UTC

Apps are the New Users

Posted By Diomidis D. Spinellis

Some facilities provided by mature multi-user operating systems appear arcane today. Administrators of computers running Mac OS X or Linux can see users logged-in from remote terminals, they can specify limits on the disk space one can use, and they can run accounting statistics to see how much CPU time or disk I/O a user has consumed over a month. These operating systems also offer facilities to group users together, to specify various protection levels for each user's files, and to prescribe which commands a user can run.

Sun, 27 Nov 2011 16:54:31 UTC

Using the HP 4470c Scanner Under Windows 7

Posted By Diomidis D. Spinellis

Neither Hewlett Packard nor Microsoft Windows 7 offer native support for my HP 4470c scanner. Throwing a working scanner away to buy a new one only because some software was missing seemed like a waste, so I looked for an alternative solution. This is how I made it work using SANE , an open source framework for scanners.

Sun, 30 Oct 2011 10:05:22 UTC

Lessons from Space

Posted By Diomidis D. Spinellis

By Diomidis Spinellis and Henry Spencer We can lick gravity, but sometimes the paperwork is overwhelming.  Wernher von Braun Twilight saw the landing of Atlantis at the Kennedy Space Center on 21 July 2011, marking the end of the 30-year Space Shuttle program and leaving the Soyuz series of spacecraft as the only remaining major option for sending humans into space. With a history of 1,700 flights over an almost half-century lifetime, the Soyuz rocket and spacecraft are arguably a tremendously successful spaceflight design.

Sun, 11 Sep 2011 15:07:25 UTC

Faking it

Posted By Diomidis D. Spinellis

This column is about a tool we no longer have: the continuous rise of the CPU clock frequency. We were enjoying this trend for decades, but in the past few years, progress stalled. CPUs are no longer getting faster because their makers cant handle the heat of faster-switching transistors. Furthermore, increasing the CPUs sophistication to execute our instructions more cleverly has hit the law of diminishing returns. Consequently, CPU manufacturers now package the constantly increasing number of transistors they can fit onto a chip into multiple coresprocessing elementsand then ask us developers to put the cores to good use.

Sun, 31 Jul 2011 17:15:22 UTC

Impact Factor of Computer Science Journals 2010

Posted By Diomidis D. Spinellis

The Thomson Reuters Web of Knowledge has published the 2010 Journal Citation Reports . Following similar studies I performed in 2007 , 2008 , 2009 , and 2010 , here is my analysis of the current status and trends for the impact factor of computer science journals.

Sat, 23 Jul 2011 15:35:13 UTC

How I Dealt with Student Plagiarism

Posted By Diomidis D. Spinellis

Panos Ipeirotis , a colleague at the NYU Stern School of Business , received considerable media attention when, in a blog post he subsequently removed , he discussed how his aggressive use of plagiarism detection software on student assignments poisoned the classroom atmosphere and tanked his teaching evaluations. As detailed in a story posted on the Chronicle of Higher Education blog , Mr. Ipeirotis proposes instead that professors should design assignments that cannot be plagiarized. Along these lines here are two methods I've used in the past.

Sun, 03 Jul 2011 17:43:11 UTC

Agility Drivers

Posted By Diomidis D. Spinellis

A management practice is mature when even government bureaucracies decide to adopt it. The March 2011 publication of UK's ICT strategy marks this moment by advocating that “the application of agile ICT delivery methods [...] will improve government's capability to deliver projects successfully and realise benefits faster.”. This begs the question: were we misguided during the decades we were advocating stringent control of requirements and a tightly milestone-driven development process? Interestingly, this was not the case. We were right then, and we're right now. Things have changed, and this is why we can nowadays smugly apply agile practices reaping impressive dividends.

Sun, 29 May 2011 21:14:13 UTC

Ten Lessons I Learned from Fixing my Laptop's Motherboard

Posted By Diomidis D. Spinellis

A month ago I managed to break my laptop, by reversing the polarity of a universal power supply. The repair shop diagnosed the problem as a failed motherboard, and asked for ¿659 to replace it. I found the price preposterous and the notion of throwing away a motherboard for a single failed component ecologically unsound. Here is how I fixed the laptop on my own, and what I learned in the process.

Sat, 21 May 2011 18:40:41 UTC

Code Verification Scripts

Posted By Diomidis D. Spinellis

Which of my classes contain instance variables? Which classes call the method userGet , but don't call the method userRegister ? These and similar questions often come up when you want to verify that your code is free from some errors. For example, instance variable can be a problem in servlet classes. Or you may have found a bug related to the userGet and userRegister methods, and you want to look for other places where this occurs.

Sun, 01 May 2011 19:05:36 UTC

Choosing and Using Open Source Components

Posted By Diomidis D. Spinellis

The developers of the SQLite open source database engine estimate that it's deployed in roughly half a billion systems around the world (users include Airbus, Google, and Skype). Think of the hundreds of thousands of open source components, just one click away from you. If you know how to choose and use them effectively , your project can benefit mightily.

Sun, 27 Feb 2011 18:49:40 UTC

elytS edoC

Posted By Diomidis D. Spinellis

Sure, you can write English right to left. You can also write software code to look like a disc or even a train (see www.ioccc.org/1988/westley.c and 1986/marshall.c ). However, you can't then complain when you have to fight with your magazine's editor or production staff about accepting your column's title for publication, or if your colleagues refuse to touch your code with a 10-foot pole. Writing code in a readable and consistent style is difficult, uninteresting, tedious, underappreciated, and, extremely important.

Thu, 06 Jan 2011 11:32:14 UTC

Sophisticated Targeted Link Spam

Posted By Diomidis D. Spinellis

What appeared to be an intelligent comment in one of my blog postings turned out to be targeted link spam. This is a worrying trend, because, although we can defend ourselves against mass attacks, we're very vulnerable to targeted strikes.

Fri, 19 Nov 2010 13:17:00 UTC

Manifesto for Agile Government

Posted By Diomidis D. Spinellis

I'm sure that many readers of this blog have read the Manifesto for Agile Software Development . Having worked in government over the past year, I wondered how a similar manifesto for government, created by a group of people who would radically want to improve existing structures, would look like. Here is my take.

Sat, 30 Oct 2010 17:37:18 UTC

Farewell to Disks

Posted By Diomidis D. Spinellis

A classic web-comic illustrates how idle Wikipedia browsing can lead us from the Tacoma Narrows Bridge to Fatal hilarity ( and worse ). The comic doesn't show the path leading from A to B, and finding it is an interesting challenge–think how you would engineer a system that could answer such questions. I believe that this problem and a solution I'll present demonstrate some programming tools and techniques that will become increasingly important in the years to come.

Wed, 13 Oct 2010 22:40:12 UTC

Synchronizing Thunderbird's Replied Flag

Posted By Diomidis D. Spinellis

My main email client is Thunderbird, but I also use BlackBerry's and Apple's clients, all through the same IMAP account. Disconcertingly, email messages to which I have replied through the other clients don't show up in Thunderbird with the "replied" ( ) icon. This means that when I browse my email using Thunderbird, I waste time trying to remember whether I have responded to a particular message. Here is how I solved the problem.

Sat, 28 Aug 2010 08:48:30 UTC

UML, Everywhere

Posted By Diomidis D. Spinellis

flowchart, n.: The innumerate misleading the illiterate. – Stan Kelly-Bootle, “The Devil's DP Dictionary” A mechanical engineer who sees the symbol ¿ in a diagram will immediately realize that a feature is specified to be perpendicular to another. In contrast, a software engineer looking at a diagram's line ending with the symbol ¿ will, at best, wonder whether it denotes aggregation (as in UML), or a “zero or one” cardinality (as in IDEF1X), or something else invented by a creative academic. Worse, many developers will simply scratch their head in bewilderment.

Mon, 23 Aug 2010 21:56:52 UTC

Sane vim Editing of Unicode Files

Posted By Diomidis D. Spinellis

Being able to use plain alphabeitc keys as editing commands is for many of us a great strength of the vi editor. It allows us to edit without hunting for the placement of the various movement keys on each particular keyboard, and, most of the time, without having to juggle in order to combine particular keys with ctrl or alt . However, this advantage can turn into a curse when editing files using a non-ASCII keyboard layout. When the keyboard input method is switched to another script (Greek in my case, or, say, Cyrillic for others) vi will stop responding to its normal commands, because it will encounter unknown characters.

Wed, 04 Aug 2010 20:21:50 UTC

Batch Files as Shell Scripts Revisited

Posted By Diomidis D. Spinellis

Four years ago I wrote about a method that could be used to have the Unix Bourne shell interpret Windows batch files. I'm using this trick a lot, because programming using the Windows/DOS batch files facilities is decidedly painful, whereas the Bourne shell remains a classy programming environment. There are still many cases where the style of Unix shell programming outshines and outperforms even modern scripting languages.

Sun, 11 Jul 2010 10:32:58 UTC

Code Documentation

Posted By Diomidis D. Spinellis

Technical prose is almost immortal. – Frederick P. Brooks, Jr. Although programming is a form of literary expression, the relationship between code and its documentation is uneasy at best. As Figure 1 shows, among the thousands of projects that FreeBSD maintainers have considered important enough to port to the platform, the number of comments per 100 lines varies substantially. Clearly, as developers our views on how we should document our code are anything but consistent. Yet, there are universal principles, nifty tools, and useful practices that can benefit us all.

Sat, 19 Jun 2010 20:49:28 UTC

Impact Factor of Computer Science Journals 2009

Posted By Diomidis D. Spinellis

The ISI Web of Knowledge recently published the 2009 Journal Citation Reports . Following similar studies I performed in 2007 , 2008 , and 2009 , here is my analysis of the current status and trends for the impact factor in computer science journals.

Thu, 20 May 2010 09:40:06 UTC

Email Analytics

Posted By Diomidis D. Spinellis

During the past six months I've been drowning in email. I spend a large part of my day responding to email messages and filing incoming messages I consider important. Yet I'm falling behind and this affects the quality of my work: I sometimes delay responding to important messages. Followng Peter Drucker's dictum "If you can't measure it, you can't manage it", I decided to write a tool to analyze my incoming and outgoing email messages.

Wed, 07 Apr 2010 20:21:06 UTC

Ron Heifetz on Crisis Leadership

Posted By Diomidis D. Spinellis

Earlier today I had the privilege to attend a lecture on crisis management by the Harvard Senior Lecturer Ron Heifetz . Here is a list of points that struck me (in the form of slightly edited tweets), and my view of their relevance to software development.

Fri, 12 Mar 2010 09:52:54 UTC

Email's Ten by Ten Law

Posted By Diomidis D. Spinellis

I drown in email and my aspirations for handling it are becoming increasingly lame. In the 1980s my goal used to be an empty mailbox at the end of each session. During the 1990s the goal became to empty the mailbox by the end of the day. But tasks I couldn¿t complete within the day accumulated, so in the 2000s I just tried to have only so many messages as could fit in a window without a scrollbar, so that I could immediately scan what I had to do.

Thu, 04 Mar 2010 11:48:18 UTC

Software Tracks

Posted By Diomidis D. Spinellis

A generous car reviewer might praise a vehicle's handling by writing that it turns as if it's running on railroad tracks. Indeed, tracks offer guidance and support. When you run on tracks you can carry more weight, you can run faster, and you can't get lost. That's why engineers, from early childhood to old age, get hooked on trains. Can we get our software to run on tracks?

Tue, 12 Jan 2010 17:52:24 UTC

Useful Polyglot Code

Posted By Diomidis D. Spinellis

Four years ago I blogged about an incantation that would allow the Windows command interpreter (cmd) to execute Unix shell scripts written inside plain batch files. Time for an update.

Sun, 27 Dec 2009 16:53:10 UTC

How to Get a Glowing Recommendation Letter

Posted By Diomidis D. Spinellis

Students who do well in my courses often come to me asking for a recommendation letter for graduate or postgraduate study. I only write letters for students I know well and I can honestly recommend, so some end up with a glowing recommendation while others leave empty handed. While I was drafting a few letters today, it occurred to me that obtaining a good recommendation letter is a lot easier if you've planned for it well in advance.

Wed, 25 Nov 2009 16:30:42 UTC

The Risk of Air Gaps

Posted By Diomidis D. Spinellis

As some readers of this blog know, from this month onward I'm on a leave of absence from my academic post to head the Greek Ministry of Finance General Secretariat of Information Systems . The job's extreme demands explain the paucity of blog postings here. I'll describe the many organizational and management challenges of my new position in a future blog post. For now let me concentrate on a small but interesting technical aspect: the air gap we use to isolate the systems involved in processing tax and customs data from the systems used for development and production work.

Wed, 21 Oct 2009 08:57:30 UTC

Basic Etiquette of Technical Communication

Posted By Diomidis D. Spinellis

Parents spend years trying to teach their children to be polite, and some of us had to learn at school how to properly address an archbishop. Yet, it seems that advice on courteousness and politeness in technical communication is in short supply; most of us learn these skills through what is euphemistically called “on the job training.” With enough bruises on my back to demonstrate the amount and variety of my experience in this area (though not my skill), here are some of the things I've learned.

Thu, 15 Oct 2009 06:25:02 UTC

Tags for Bibliography References

Posted By Diomidis D. Spinellis

I love writing my papers in LaTeX. Its declarative style allows me to concentrate on the content, rather than the form. I even format the text according to the content, keeping each phrase or logical unit on a separate line. Many publishers supply style files that format the article according to the journal's specifications. Even better, over the years I've created an extensive collection of bibliographies. I can therefore use BibTeX to cite works with a simple command, without having to re-enter their details. This also allows me to use style files to format references according to the publisher's specification. Yet, there is still the problem of navigating from a citation to the work's details.

Wed, 16 Sep 2009 06:44:32 UTC

Applied Code Reading: Debugging FreeBSD Regex

Posted By Diomidis D. Spinellis

When the code we're trying to read is inscrutable, inserting print statements and running various test cases can be two invaluable tools. Earlier today I fixed a tricky problem in the FreeBSD regular expression library. The code , originally written by Henry Spencer in the early 1990s, is by far the most complex I've ever encountered. It implements sophisticated algorithms with minimal commenting. Also, to avoid code repetition and increase efficiency, the 1200 line long main part of the regular expression execution engine is included in the compiled C code three times after modifying various macros to adjust the code's behavior: the first time the code targets small expressions and operates with bit masks on long integers, the second time the code handles larger expressions by storing its data in arrays, and the third time the code is also adjusted to handle multibyte characters.

Wed, 02 Sep 2009 12:35:38 UTC

Job Security

Posted By Diomidis D. Spinellis

My colleague, who works for a major equipment vendor, was discussing how his employer was planning to lay off hundreds of developers over the coming months. “But I'm safe,” he said, “as I'm one of the two people in our group who really understand the code.” It seems that writing code that nobody else can comprehend can be a significant job security booster. Here's some advice.

Fri, 28 Aug 2009 14:18:42 UTC

The Price of Cheap Labor

Posted By Diomidis D. Spinellis

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 mildly amusing. It's clear to me that the database has been populated by the massive application of a cheap labor force. This is happening all two often, and I think it is a mistake.

Thu, 27 Aug 2009 13:28:02 UTC

Real Heroes

Posted By Diomidis D. Spinellis

I always admired the pilots of the two PZL M18B "Dromader" fire-fighting airplanes that were stationed in Cephallonia's airport.

Thu, 20 Aug 2009 21:27:04 UTC

HP-200LX Remote Control Hacks

Posted By Diomidis D. Spinellis

All my friends know that for the past 15 years I've been semi-attached to an HP 100LX palmtop PC (recently updated to a 200LX) for my personal information management and many other tasks. The device is extremely versatile, sturdy, and flexible. Amazingly, after so many years of hard daily use, I still find new applications for it.

Tue, 11 Aug 2009 13:40:18 UTC

Applied Code Reading: GNU Plotutils

Posted By Diomidis D. Spinellis

Robert, a UMLGraph user sent me an email describing a problem with the GNU plotutils SVG output on Firefox. I firmly believe that code reading is a lot easier than many think: one can easily fix most software problems without detailed knowledge of the underlying system. I therefore decided to practice what I preach.

Wed, 05 Aug 2009 09:29:40 UTC

How to Create a Self-Referential Tweet

Posted By Diomidis D. Spinellis

Yesterday Mark Reid posted on Twitter a challenge : create a self-referential tweet (one that links to itself). He later clarified that the tweet should contain in its text its own identifier (the number after " /status/" bit should be its own URL). I decided to take up the challenge ("in order to learn a bit about the Twitter API" was my excuse), and a few hours later I won the game by posting the first self-referential tweet . Here is how I did it.

Wed, 22 Jul 2009 15:08:10 UTC

A Tiny Review of Scala

Posted By Diomidis D. Spinellis

Earlier today I finished reading the Programming in Scala book. My review of the book should appear soon in the reviews.com site and the ACM Computing Reviews . Here I outline briefly my view of the Scala language .

Mon, 13 Jul 2009 08:46:34 UTC

Madplay on an Intel Mac

Posted By Diomidis D. Spinellis

Numerous MP3 players around my house pull music from a central file server. The hardware I'm using is extremely diverse and many devices can nowadays be politely described as junk: they include 100MHz Pentiums with 16MB RAM, and an ARM-based prototype lacking support for floating point operations. For the sake of simplicity I've standardized the setups around a web server running on each machine to list static HTML pages containing the available music files, and simple shell-based CGI clients that invoke madplay to play the music.

Wed, 01 Jul 2009 13:42:44 UTC

Real-Time Google Earth GPS Tracking

Posted By Diomidis D. Spinellis

In a recent trip I incorrectly assumed that real-time tracking of Google Earth's pre-cached maps with a GPS receiver would be sufficient help for navigating around the highways in Los Angeles. I therefore experimented with the way Google Earth's sparsely-documented real time tracking works, and wrote a small program to interface Google Earth with a GPS receiver. Fortunately, after seeing a colleague drive with a car-GPS device on the dashboard I came to my senses, and got a real Garmin Nuvi car-GPS device.

Thu, 25 Jun 2009 18:27:46 UTC

Greek Numerals in OpenOffice.org

Posted By Diomidis D. Spinellis

OpenOffice.org doesn't support Greek numerals, and this is a problem for its Greek localization, because such numerals are often used for section and list numbering. As an exercise in large scale code reading and in the writing of code I'm supposed to teach to undergraduate students, I decided to contribute an implementation to OpenOffice.org.

Wed, 24 Jun 2009 07:20:04 UTC

Impact Factor of Computer Science Journals 2008

Posted By Diomidis D. Spinellis

The ISI Web of Knowledge recently published the 2008 Journal Citation Reports . Following similar studies I performed in 2007 and 2008 , here is my analysis of the current status and trends for the impact factor in computer science journals.

Tue, 09 Jun 2009 07:02:14 UTC

Software Architecture Challenges in the 21st Century

Posted By Diomidis D. Spinellis

A wonderful workshop, titled Software Architecture Challenges in the 21st Century , took place at the University of Southern California on June 8th. The workshop was co-sponsored by IEEE Software, USC's Center for Systems and Software Engineering, and UC Irvine's Institute for Software Research (ISR). Here is my personal summary of the talks; the presentation slides are available online .

Wed, 27 May 2009 09:10:42 UTC

Revisiting the Antikythera Mechanism Emulator

Posted By Diomidis D. Spinellis

Over the past few weeks I updated the Antikythera mechanism emulator I built in 2007. I was preparing for an invited talk on the subject, which I'll give at the 2009 USENIX Annual Technical Conference , and for this I wanted to include in the emulator the new findings recently published in Nature .

Sat, 16 May 2009 14:09:42 UTC

A Bug Creates Art

Posted By Diomidis D. Spinellis

Sometimes beautiful images are generated serendipitously; think of snowflakes or Lissajous curves. Today I got one when I encoded an animation of the back dials of my Antikythera mechanism emulator with the CamStudio lossless codec (v1.4). When I played back the movie with the VLC media player (v0.9.9) a bug in the player (or the codec or the video driver) gave me a black background and a series of overlaid images with the stark colors of the gears. I think the bug is related to the alpha channel, which I use for partially obscuring the gears behind the translucent dial face.

Sun, 10 May 2009 12:07:38 UTC

Democracy in Europe: The Telecom Package

Posted By Diomidis D. Spinellis

Last week I sent an email to the 24 Members of the European Parliament (MEPs) that are supposed to represent me, regarding the second reading of the Telecoms Reform Packet .

Thu, 07 May 2009 18:12:36 UTC

Fixing the Orientation of JPEG Photographs

Posted By Diomidis D. Spinellis

I used to fix the orientation of my photographs through an application that would transpose the compressed JPEG blocks. This had the advantage of avoiding the image degradation of a decompression and a subsequent compression.

Thu, 30 Apr 2009 16:33:00 UTC

Best Day to Blog

Posted By Diomidis D. Spinellis

Most of us don't have enough time to blog every day. Given that blogging ideas can often be pending for days, which is the best day to publish them?

Sun, 26 Apr 2009 12:17:50 UTC

Dual-Use Technology

Posted By Diomidis D. Spinellis

Lego sells lovely toys with a great educational potential. No peace-loving father would have a problem giving them as a gift (especially, if he can also occasionally take part in the action ). Unfortunately, children seem to have their own (genetically preprogrammed?) ideas of what is interesting to build. I still love Lego, but I'm a bit worried about human nature.

Mon, 20 Apr 2009 13:00:28 UTC

A Tiling Demo

Posted By Diomidis D. Spinellis

Over the past (too many) days I've been preparing my presentation for the ACCU 2009 conference. At one point I wanted to show how loop tiling increases locality of reference and therefore cache hits. Surprisingly, I could not find a demo on the web, so I built one from scratch. Here are two applets demonstrating memory accesses during a matrix by a vector multiplication.

Wed, 15 Apr 2009 07:18:00 UTC

Drawing Tools

Posted By Diomidis D. Spinellis

1 Word = 1 Millipicture – /usr/games/fortune It's no accident that in all engineering branches, our colleagues often communicate using drawings and diagrams. Given many artifacts' scale and complexity, a drawing is often the best way to describe them. Uniquely, in software development we can easily derive pictures from code, and sometimes even code from pictures.

Wed, 08 Apr 2009 09:18:54 UTC

Precision in Comments

Posted By Diomidis D. Spinellis

As I was writing some code for the CScout refactoring browser today, I reflected on the importance of writing precise and clear comments.

Wed, 01 Apr 2009 06:30:02 UTC

Open Source Opens up for Business

Posted By Diomidis D. Spinellis

Today, as I was reading the sourceforge.net monthly update, I was impressed by the number of business-related software in the top-25 project list. I was sure this wasn't always the case, so I dug up the corresponding the top-25 projects at the beginning of 2006 to refresh my memory. The differences are profound.

Sat, 28 Mar 2009 22:01:52 UTC

Earth Hour: A Geek's View

Posted By Diomidis D. Spinellis

What happens to the power grid when millions of people turn of their lights? I had a chance to study this during tonight's Earth Hour : an international event organised by the WWF , which asks households and businesses to turn off their non-essential lights and electrical appliances for one hour to raise awareness towards the need to take action on climate change.

Wed, 18 Mar 2009 21:51:16 UTC

Tim Berners-Lee Addresses the First Web Science Conference

Posted By Diomidis D. Spinellis

Sir Tim Berners-Lee with a thought-provoking keynote address launched the First Web Science Conference at the Foundation of the Hellenic World in Athens earlier today. Here are the notes I took during his speech.

Tue, 10 Mar 2009 09:35:12 UTC

YouTube vs. TOSEM

Posted By Diomidis D. Spinellis

Over the past couple of weeks colleagues and friends I encounter in the hallways or at various meetings have been commenting about a small video I posted on YouTube. This video, titled Information Train , describes a demonstration experiment I performed at an event whose aim was to familiarize children with science. Often this video is the first discussion I've ever had with a colleague regarding my work. This struck me as odd, because I consider other parts of my research a lot more significant that this experiment.

Wed, 04 Mar 2009 21:16:08 UTC

Parallelizing Jobs with xargs

Posted By Diomidis D. Spinellis

With multi-core processors sitting idle most of the time and workloads always increasing, it's important to have easy ways to make the CPUs earn their money's worth. My colleague Georgios Gousios told me today how the Unix xargs command can help in this regard.

Wed, 25 Feb 2009 12:58:34 UTC

Start With the Most Difficult Part

Posted By Diomidis D. Spinellis

There's not a lot you can change in the process of constructing a building. You must lay the foundation before you erect the upper floors, and you can't paint without having the walls in place. In software, we're blessed with more freedom.

Wed, 18 Feb 2009 14:21:32 UTC

The Information Train

Posted By Diomidis D. Spinellis

The Information Train is a scientific experiment that I presented at the Wizards of Science 2009 contest over the past weekend. The entry demonstrates how computers communicate with each other by setting up a network in which a model train transfers a picture's pixels from one computer to the other. You can find a video of the experiment on YouTube, and, if you're interested, you can also download the corresponding software and schematics from this web page .

Tue, 10 Feb 2009 10:34:58 UTC

Visualizing Revision Logs with a UML Sequence Diagram

Posted By Diomidis D. Spinellis

How can you visualize the developers' contributions in a collaborative project? One way involves drawing timelines adorned with marks indicating each developer's contribution. This is a simple UML sequence diagram, a diagram that allows you to see the interactions of objects, but in this case the objects are the actual developers and the interactions are their contributions.

Wed, 04 Feb 2009 11:48:40 UTC

Beautiful Architecture

Posted By Diomidis D. Spinellis

What are the ingredients of robust, elegant, flexible, and maintainable software architecture? Over the past couple of years, my colleague Georgios Gousios and I worked on answering this question through a collection of intriguing essays from more than a dozen of today's leading software designers and architects.

Tue, 03 Feb 2009 11:04:44 UTC

The World's Smallest Domain-Specific Language

Posted By Diomidis D. Spinellis

Domain-specific languages, also known as little languages, allow us to express knowledge in a form close to the problem at hand. In contrast to general-purpose languages, like Java or C++, they are specialized for a narrow domain. Earlier today I wanted to initialize a rectangular array of Boolean values to represent the stick figure of a human. For that I devised a tiny domain-specific language (DSL) consisting of two symbols (representing an on and an off pixel) and wrote its commensurably simple interpreter.

Sun, 25 Jan 2009 18:01:28 UTC

A Well-Tempered Pipeline

Posted By Diomidis D. Spinellis

I am studying the use of open source software in industry. One way to obtain empirical data is to look at the operating systems and browsers used by the Fortune 1000 companies by examining browser logs. I obtained a list of the Fortune 1000 domains and wrote a pipeline to summarize results by going through this site's access logs.

Thu, 22 Jan 2009 13:51:28 UTC

Paper-Based Publishing Meets the Web

Posted By Diomidis D. Spinellis

A few hours ago somebody posted a link to Brian Kernighan's IEEE Software column titled Sometimes the Old Ways Are Best at reddit.com . At the time of writing, the entry has already attracted 143 comments and 172 votes. It contains is an (often interesting) discussion between Young Turks praising IDEs/SlickEdit/BeyondCompare and defenders of Unix tools. One bemused respondent commented (in a somewhat irreverent style) on the strange fact that a column that hit the headlines in January was mentioning summer projects. Here is the story behind the column's timeline and some thoughts on paper-based publishing.

Wed, 21 Jan 2009 16:39:38 UTC

Brian Kernighan on 30 Years of Software Tools

Posted By Diomidis D. Spinellis

As part of the IEEE Software 25th anniversary, Brian Kernighan graciously agreed to write a Tools of the Trade column. His article, titled Sometimes the Old Ways are Best, is now freely available online through the Computing Now web site.

Thu, 01 Jan 2009 21:28:56 UTC

The Changing Value of Knowledge and Skills

Posted By Diomidis D. Spinellis

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.