Posts in 2017

 

Reviving the 1973 Unix Programmer's Manual

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.

Continue reading "Reviving the 1973 Unix Programmer's Manual"

How I Recovered my Firefox Tab Groups

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.

Continue reading "How I Recovered my Firefox Tab Groups"

An Embarrassing Failure

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.

Continue reading "An Embarrassing Failure"

Who are the Publishers of Computer Science Research?

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.

Continue reading "Who are the Publishers of Computer Science Research?"

The Origins of Malloc

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.

Continue reading "The Origins of Malloc"

Of BOOL and stdbool

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.

Continue reading "Of BOOL and stdbool"

Debugging in Practice: dgsh Issue 85

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.

Continue reading "Debugging in Practice: dgsh Issue 85"

Display Git's and Current Directory on Terminal Bar

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.

Continue reading "Display Git's and Current Directory on Terminal Bar"

Impact Factor of Computer Science Journals 2016

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.

Continue reading "Impact Factor of Computer Science Journals 2016"

Modular SQL Queries with Unit Tests

I'm sure I'm not the only person on earth facing a complex and expensive analytical processing task. The one I've been working on for the past couple of years, runs on the GHTorrent 98.5 GB data set of GitHub process data. It comprises 99 SQL queries (2599 lines of SQL code in total) and takes more than 20 hours to run on a hefty server. To make the job's parts run efficiently and reliably I implemented simple-rolap, a bare-bones relational online analytical processing tool suite. To ensure the queries produce correct results, I wrote RDBUnit, a unit testing framework for relational database queries. Here is a quick overview on how to use the two.

Continue reading "Modular SQL Queries with Unit Tests"

Open Collaboration at Eclipse

The International Conference on Software Engineering is the premier research conference on the topic. This year it began with a keynote address by the Eclipse Foundation Executive Director, Mike Milinkovich, on Open Collaboration: The Eclipse Way.

Continue reading "Open Collaboration at Eclipse"

Unix Architecture Evolution Diagrams

Today I put online two diagrams depicting the architecture of the Unix operating system, one for the 1972 First Research Edition and one for FreeBSD, one of its direct descendants. Here are the details on how I created these diagrams.

Continue reading "Unix Architecture Evolution Diagrams"

Research Priorities in Software Technologies

In the words of the web's inventor Marc Andreessen, "software is eating the world". Ever more products, services, and entire industries, existing ones as well as new, are running on software. In a report recently published by the European Commission, I argue that significant investment in software engineering research can help Europe stay on top and even lead a world that is increasingly defined and shaped by software.

Continue reading "Research Priorities in Software Technologies"

The 1980s Research Unix Editions Are Now Available for Study

In 2002 Caldera International licensed the source code distribution of several historic Unix editions. This included all Research Unix editions up to the Seventh Edition, but excluded the 1980s 8th, 9th, and 10th Edition. This was unfortunate, because these editions pioneered or implemented several features that were very advanced at the time, such as streams inter-process communication, graphics terminals and the associated Sam text editor, network filesystems, and graphics typesetting tools.

Continue reading "The 1980s Research Unix Editions Are Now Available for Study"

The Psychology of the AWS Outage

Unless you've been living on another planet, you're certainly aware that over the past couple of hours Amazon's AWS S3 service has experienced a serious outage, which has affected thousands of sites and services around the world. For reasons I will elaborate in this post, the coverage of this outage has been blown completely out of proportion. So, what's the difference between the perceived risk associated with the AWS outage and the actual risk of this outage?

Continue reading "The Psychology of the AWS Outage"

The Road to Debugging Success

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.

Continue reading "The Road to Debugging Success"

Measures of Donald Trump's Inaugural Address

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.

Continue reading "Measures of Donald Trump's Inaugural Address"

How to avoid redoing manual corrections

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?

Continue reading "How to avoid redoing manual corrections"

Debugging PCSecrets Synchronization

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.

Continue reading "Debugging PCSecrets Synchronization"

As it Happened: Leap Second 37

Continue reading "As it Happened: Leap Second 37"

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

Category Tags
AWS (4)
Android (2)
Apple (9)
C (20)
C++ (16)
COVID-19 (1)
Cloud (1)
Computers (58)
Databases (4)
Debugging (8)
Design (1)
Discussion (6)
Electronics (15)
Environment (1)
FreeBSD (26)
Funny (14)
GSIS (5)
Google (6)
Government (3)
Hacks (26)
Hardware (25)
History (9)
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 (5)
Risks (6)
Scala (1)
Science (33)
Security (26)
Sights (19)
Smartphones (3)
Software (22)
Software engineering (90)
Standards (7)
System administration (46)
Teaching (9)
Technology (28)
Testing (2)
Tips (43)
Tools of the Trade (52)
Travel (9)
UML (6)
Unix (47)
Web (31)
Windows (15)
Writing (45)
XML (10)
vim (5)
Archive
Complete contents (366)
2020 (12)
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: Thursday, August 27, 2020 7:26 pm

Creative Commons Licence

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