Recent Posts


The Evolution of the Unix System Architecture

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.

Continue reading "The Evolution of the Unix System Architecture"

Reviving the 1973 Unix text to voice translator

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.

Continue reading "Reviving the 1973 Unix text to voice translator"

Fast database UPDATE/DELETE operations

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?

Continue reading "Fast database UPDATE/DELETE operations"

Raspberry Pi 400 vs ZX Spectrum

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.

Continue reading "Raspberry Pi 400 vs ZX Spectrum"

Error handling under Unix and Windows

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.

Continue reading "Error handling under Unix and Windows"

Shell scripting for software developers

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. I plan to post further installments on system administration and data analytics.

Continue reading "Shell scripting for software developers"

IBAN length and DESI score

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.

Continue reading "IBAN length and DESI score"

Auto-correct text entered with the wrong keyboard layout

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.

Continue reading "Auto-correct text entered with the wrong keyboard layout"

The titanic battle between big iron and microprocessors

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. I couldn't fathom why businesses were using such monsters. I now understand that I was watching an amazing race between the sprightly but woefully simplistic microprocessors and the powerful but slow-moving mainframes.

Continue reading "The titanic battle between big iron and microprocessors"

Contact tracing with a Raspberry Pi Zero-W

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.

Continue reading "Contact tracing with a Raspberry Pi Zero-W"

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
This blog is also available as an RSS feed:

Category Tags
AWS (4)
Android (2)
Apple (9)
C (21)
C++ (16)
COVID-19 (1)
Cloud (1)
Components (1)
Computers (58)
Databases (5)
Debugging (8)
Design (1)
Discussion (6)
Electronics (15)
Environment (1)
FreeBSD (26)
Funny (14)
GSIS (5)
Google (6)
Government (3)
Hacks (26)
Hardware (26)
History (13)
Information systems (1)
Internet (12)
Java (26)
Linux (7)
Machine learning (1)
Management (27)
Microsoft (11)
One Laptop Per Child (3)
Open source (57)
Opinion (28)
Parenting (11)
Perl (13)
Photos (13)
Politics (4)
Programming (108)
Python (2)
R (1)
Raspberry Pi (6)
Risks (6)
Scala (1)
Science (33)
Security (26)
Sights (19)
Smartphones (3)
Software (22)
Software engineering (91)
Standards (7)
System administration (46)
Teaching (9)
Technology (28)
Testing (2)
Tips (43)
Tools of the Trade (52)
Travel (9)
UML (6)
Unix (50)
Web (31)
Windows (16)
Writing (45)
XML (10)
vim (5)
Complete contents (371)
2021 (2)
2020 (15)
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: Friday, June 18, 2021 10:30 pm

Creative Commons Licence BY NC

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.