Sign in

Diomidis Spinellis

@coolsweng.bsky.social
757 followers 124 following 93 posts

Professor of software engineering at AUEB and software analytics at TU Delft, programmer, technology author. www.spinellis.gr (Tech tweets here. Follow @DSpinellis for Greek/Greece tweets.)

PostsRepliesMedia
Diomidis Spinellis @coolsweng.bsky.social · 29/08/2026
Extracting information to aid debugging (here a binary tournament merge failure) can often be productively automated with Unix command-line tools. awk '$4 == "BEGIN" && $8 { print $8 " -> " $7}' file.log | dot -Tsvg >diagram.svg
Failed binary tournament merge
010
Diomidis Spinellis @coolsweng.bsky.social · 12/08/2026
Apart from confidentiality concerns, another risk of reviewing papers with GenAI is hallucinations. Here are two examples from ChatGPT's (5.6 Sol) review of my own work with *a given PDF*. It took me several minutes to uncover each, so a long AI-generated review could take hours to verify.
010
Diomidis Spinellis @coolsweng.bsky.social · 03/07/2026
Artificial intelligence seems to be increasingly matched with marketing stupidity.
Suggestion to use AI summarization on a document containing an abstract.
042
Diomidis Spinellis @coolsweng.bsky.social · 30/06/2026
This is the pocket computer-history museum I use for introductory presentations: 7AK7 computer vacuum tube, metal-can transistor, SSI chip, exposed EPROM and CPU chip, RAM / SSD storage and RPi zero. Demoed it yesterday to high-school students in YES, our Youth Entrepreneurship Seminar. yes.aueb.gr
020
Diomidis Spinellis @coolsweng.bsky.social · 27/06/2026
What a time to live in! We're discussing about AI recursive self-improvement and AGI. And we're also managing IT systems with cryptic tags and by adding "000_" to first names so that they appear on top of the list. (The list is from icse2027.hotcrp.com/users/pc)
010
Diomidis Spinellis @coolsweng.bsky.social · 27/06/2026
A recent report on falsely-attributed research papers www.jmir.org/2026/1/e104934 and a commentary on it www.luxuriousmagazine.com/false-author... paint a bleak picture. Here are the @erictopol.bsky.social incident retractionwatch.com/2026/04/23/e... and my case study doi.org/10.1186/s410....
Digital human in a classroom
120
Diomidis Spinellis @coolsweng.bsky.social · 12/05/2026
Can you see the image smudges? I thought that my screen was dirty, but it turns out that the smudges are part of the Microsoft Office toolbar (visible in Word, Excel PowerPoint). Can't imagine what development process and bloat resulted in what looks like freehand drawing being part of it. Ideas?
010
Diomidis Spinellis @coolsweng.bsky.social · 07/05/2026
Today we launch a new run of the popular and award-winning MOOC on the use of Unix Tools for data, software and production engineering. This year follow the course to improve your understanding of AI Agents' actions and your interaction with them. More information at www.spinellis.gr/unix/?utm=bs...
011
Diomidis Spinellis @coolsweng.bsky.social · 13/04/2026
Generative AI upends the goals and nature of empirical software research. Here are my notes from Emerson Murphy-Hill's MSR's keynote talk on the topic. www.spinellis.gr/blog/2026041...
030
Diomidis Spinellis @coolsweng.bsky.social · 02/02/2026
The video of my #FOSDEM 2026 talk on integrating the Fourth Research Edition Unix tape into the GitHub Unix history repository is now available online: ftp.belnet.be/mirror/FOSDE...
083
Diomidis Spinellis @coolsweng.bsky.social · 23/12/2025
Several news outlets reported the amazing discovery of a 1970s Fourth Edition Research Unix magnetic tape. I incorporated the tape’s source code into the Unix History Repository hosted on GitHub and studied the code’s composition. Here's what I found. www.spinellis.gr/blog/2025122...
The discovered Fourth Edition tape (photo credit Rob Ricci)
0188
Diomidis Spinellis @coolsweng.bsky.social · 04/12/2025
The LaTeX Korrektor: A funny video series addressing serious LaTeX style infractions. Andreas Zeller (a German), like Dr. Strangelove, convincingly fakes familiar stereotypes. (He also suggests compounding German words as an alternative to the em-dash.)
Rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetzeßentrwurfsbedatirklibdißkussionßstandsberichterstattungßgeldantragßformular
130
Diomidis Spinellis @coolsweng.bsky.social · 07/11/2025
I just received an AI-generated GitHub pull-request that incorrectly replaced 450 test code lines with a comment. Be VERY CAREFUL when reviewing out-of-the-blue PRs these days. AI-generated ones are likely to contain difficult-to-spot faults hidden as plausible fixes. github.com/dspinellis/g...
PR diff
0113
Diomidis Spinellis @coolsweng.bsky.social · 01/11/2025
Στις 5 Νοεμβρίου λήγει η διορία της διαδικασίας έκδοσης του Προσωπικού Αριθμού.Με τη γεννήτρια γραμμάτων προσωπικού αριθμού μπορείτε να επιλέξετε εσείς έναν καλό συνδυασμό γραμμάτων για τον προσωπικό σας αριθμό. Θα τη βρείτε στο www.balab.aueb.gr/genpa/
034
Diomidis Spinellis @coolsweng.bsky.social · 27/10/2025
I just added a note in the advice for writing LaTeX documents GitHub repository to avoid using the “itemize” environment, when you're describing elements. The “description” environment is better for this purpose. github.com/dspinellis/l...
041
Diomidis Spinellis @coolsweng.bsky.social · 18/10/2025
Fun, fun, fun! I'm running a binary tournament merge to combine 64 SQLite databases (83 GB in total) into one. More details in doi.org/10.1109/MS.2...
Process tree output.
1383
Diomidis Spinellis @coolsweng.bsky.social · 19/09/2025
With all the GenAI buzz we tend to forget the value of 100% correct deterministic tools. Thank you Rust clippy!
    Checking uu_sed v0.0.1 (/xfs/dds/sed/src/uu/sed)
error: manual implementation of `.is_multiple_of()`
   --> src/uu/sed/src/fast_io.rs:869:8
    |
869 |     if (out_off + head_align) % block_size != 0 {
    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `!(out_off + head_align).is_multiple_of(block_size)`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_is_multiple_of
    = note: `-D clippy::manual-is-multiple-of` implied by `-D warnings`
    = help: to override `-D warnings` add `#[allow(clippy::manual_is_multiple_of)]`
0134
Diomidis Spinellis @coolsweng.bsky.social · 27/08/2025
Google Scholar's lack of an API hinders automation and scientometric studies. In common with all proprietary academic databases, searches are opaque and non-replicable. With the Alexandria3k Python package you can run sophisticated queries on your laptop. dspinellis.github.io/alexandria3k/
Logos of Crossref, DataCire, ORCID, ROR, PubMed, USPTO
0123
Diomidis Spinellis @coolsweng.bsky.social · 24/08/2025
That's a first! As I write a program's error message, I catch myself thinking whether GenAI will be able to understand it and produce a useful suggestion. (It does.)
That message means your script `fetch-uspto.sh` is expecting an environment variable named **`MYODP_KEY`**, which hasn’t been set in your shell.

This usually happens when a script needs an API key to authenticate against the USPTO Open Data Portal (ODP).

To fix it, you need to:

1. **Obtain the API key**

   * Go to the [USPTO Open Data Portal](https://developer.uspto.gov/data/bulk-search) and sign in (or register).
   * Generate an API key.

2. **Set the environment variable** before running the script:

   ```bash
   export MYODP_KEY="your_api_key_here"
   ./fetch-uspto.sh
   ```

   Or prepend it inline:

   ```bash
   MYODP_KEY="your_api_key_here" ./fetch-uspto.sh
   ```

3. If you want it to persist across sessions, add the line to your shell config (e.g., `~/.bashrc`, `~/.zshrc`):

   ```bash
   export MYODP_KEY="your_api_key_here"
   ```

---

Do you want me to show you how to modify `fetch-uspto.sh` so that it gives clearer instructions (like printing how to set the variable), instead of just failing?
030
Diomidis Spinellis @coolsweng.bsky.social · 14/08/2025
Many years ago I contributed to #GraphViz code for several new node shapes, including UML notes. Now #ChatGPT advises me how to use them! 😃
— In UML create a comment note.

— In UML diagrams, a **comment** (or “note”) is shown as a rectangle with a dog-eared corner.
Graphviz can mimic this by using `shape=note`.

Example in DOT:

```dot
digraph UML_Comment {
    rankdir=LR;
    node [fontname="Arial", fontsize=12];

    // Regular UML component
    A [label="«component»\nOrder Service", shape=component];

    // UML comment
    Cmt [label="Processes orders\nand handles payments", shape=note, style=filled, fillcolor="#ffffcc"];

    // Dashed association from comment to element
    Cmt -> A [style=dashed, arrowhead=none];
}
```

**Key points:**

* `shape=note` → dog-eared corner rectangle.
* `fillcolor` → makes the note background match UML style (light yellow is common).
* `style=dashed, arrowhead=none` → matches UML’s “annotates” relationship from a comment to a model element.

---

If you want, I can insert UML comment nodes into your **O1/O2 Graphviz diagram** to annotate entire clusters or specific tasks, so they look like sticky notes connected to the relevant part. Would you like me to do that?
050
Diomidis Spinellis @coolsweng.bsky.social · 07/08/2025
I'm sure psychologists have a diagnostic name for this disorder.
010
Diomidis Spinellis @coolsweng.bsky.social · 09/07/2025
Ever wondered why car ergonomics have gone down the drain as touch screens replaced buttons to drive down costs? This reader comment on an @financialtimes.com article on the topic says it all.

	Please use the sharing tools found via the share button at the top or side of articles. Copying articles to share with others is a breach of FT.com T&Cs and Copyright Policy. Email licensing@ft.com to buy additional rights. Subscribers may share up to 10 or 20 articles per month using the gift article service. More information can be found at https://www.ft.com/tour.
	https://www.ft.com/content/b46311ba-a5a1-4754-8d40-eaae475f01eb

	I’m an industrial designer and I used to work in the design department at a major car manufacturer. I’m a petrol head, and have been my whole life. By now, I’ve probably driven over a hundred different vehicles across various generations of interface technology.

Here’s the thing: the user experience designers in my team — the ones tasked with designing the digital interfaces now frequently deployed and rightly deplored in this article — had little-to-no interest in cars. In many cases, they were only working for a car maker because they couldn’t get the jobs they really wanted in tech companies. But the kicker was that many of them didn’t have drivers’ licenses, let alone any interest in how cars really work. All they saw was a screen, abstracted from the broader reality of operating a 2-tonne projectile in a world of sometimes moving, sometimes fleshy, and sometimes immovable targets.
2111
Diomidis Spinellis @coolsweng.bsky.social · 27/06/2025
My LLM coding interactions taught me that their benchmark results vastly overstate their capabilities. The paper by M. Mancoridis et al. “Potemkin Understanding in LLMs” explains and formalizes my feeling. Benchmarks derived from human tests are unsuitable for LLM assessment. doi.org/10.48550/arX...
0122
Diomidis Spinellis @coolsweng.bsky.social · 26/06/2025
This week two US courts ruled in favor of AI's use of copyrighted works to train LLMs. How is such a use legal? Should it be legal? Two questions with very different answers. More (and an explanation of the audio cassette's relevance) at www.spinellis.gr/blog/20250626/
A Sony compact cassette. https://en.wikipedia.org/wiki/Cassette_(format)#/media/File:Sony_C60_Low_Noise_Compact_Cassettte.jpg by Mikus
052
Diomidis Spinellis @coolsweng.bsky.social · 29/05/2025
Wow! The Rust compiler correctly guessed the correct method I should be calling. Helpful and very impressive error handling!
091
Diomidis Spinellis @coolsweng.bsky.social · 27/05/2025
In 2023 a fake AI-generated scientific article was falsely attributed to me. I was not the scheme's only victim. My study, just published in the Research Integrity and Peer Review journal, analyzes what going on and who profited from the mass publication of AI-generated articles. rdcu.be/enQqG
Falsely attributed AI-generated articleTitle and abstract page: False authorship: an explorative case study around an AI-generated article published under my name
0115
Diomidis Spinellis @coolsweng.bsky.social · 08/05/2025
When you forget to switch the active window from ChatGPT to vim…
1gt307G
030
Diomidis Spinellis @coolsweng.bsky.social · 02/05/2025
Shocking! When I said text should wrap at 72 columns, a student asked what a “column” is. With punched cards and fixed-width font line / dot matrix printers fading into history, the idea of a text column doesn't seem to be obvious anymore.
2114
Diomidis Spinellis @coolsweng.bsky.social · 25/04/2025
ChatGPT seems to struggle with its "Deep research" feature due to difficulties in accessing several web sites. I guess the high-volume of its accesses is causing many sites to block it. These examples are from a single prompt.
041
Diomidis Spinellis @coolsweng.bsky.social · 23/04/2025
Correct, but verbose and unreadable ChatGPT (4o) code (in red) vs the human-edited equivalent (in green). (The hex_digits string isn't even used.) Without human code ownership our software risks degenerating into unmaintainable junk.
-  // Check four hex digits (must be 0-9 or A-F)
-  char h3 = input[i+3], h4 = input[i+4], h5 = input[i+5], h6 = input[i+6];
-  if (((h3 >= '0' && h3 <= '9') || (h3 >= 'A' && h3 <= 'F')) &&
-          ((h4 >= '0' && h4 <= '9') || (h4 >= 'A' && h4 <= 'F')) &&
-          ((h5 >= '0' && h5 <= '9') || (h5 >= 'A' && h5 <= 'F')) &&
-          ((h6 >= '0' && h6 <= '9') || (h6 >= 'A' && h6 <= 'F'))) {
+  if (isxdigit(input[i + 3])
+      && isxdigit(input[i + 4])
+      && isxdigit(input[i + 5])
+      && isxdigit(input[i + 6])) {
+          static char hexstr[5];
+          memcpy(hexstr, input + i + 3, 4);
           // Parse the 4-digit hex code point
-          unsigned int codepoint = 0;
-          const char *hex_digits = "0123456789ABCDEF";
-          for (int j = 3; j < 7; ++j) {
-                  codepoint <<= 4;
-                  char c = input[i+j];
-                  if (c >= '0' && c <= '9') {
-                          codepoint |= (unsigned int)(c - '0');
-                  } else {
-                          codepoint |= (unsigned int)((c - 'A') + 10);
-                  }
-          }
+          unsigned int codepoint = (unsigned int)strtoul(hexstr, NULL, 16);
1145
Diomidis Spinellis @coolsweng.bsky.social · 14/04/2025
Many sites provide incorrect or incomplete BibTeX entries. I therefore just use the provided DOI and a small shell script to create the BibTeX from it from the definitive data retrieved from Crossref.
1175
Diomidis Spinellis @coolsweng.bsky.social · 11/04/2025
Can you spot the six errors in this completely bogus GenAI-derived diagram? Read more in my blog entry on the perils of GenAI student submissions. www.spinellis.gr/blog/20250408/
Bogus GenAI diagram
252
Diomidis Spinellis @coolsweng.bsky.social · 04/04/2025
In the past I've had Google Search, Wikipedia, and StackOverflow point me to my own material for answers. Now ChatGPT does the same.
ChatGPT recommends material from my own web site.
172
Diomidis Spinellis @coolsweng.bsky.social · 29/03/2025
As I was watching the Sun within the clouds, I noticed that a part was missing. Through a quick web search I found out I was watching a partial solar eclipse! I took the photo with a non-fancy smartphone.
Solar eclipse 2025
020
Diomidis Spinellis @coolsweng.bsky.social · 22/03/2025
I love the informative error messages that Clippy provides for Rust programs.
040
Diomidis Spinellis @coolsweng.bsky.social · 13/01/2025
When a group of disgruntled academic researchers switches its career to Hollywood…
031
Diomidis Spinellis @coolsweng.bsky.social · 08/01/2025
Today, in my Java streams lecture I accompanied a unique words example illustrating their use with a presentation of D. McIlroy's critique of D. Knuth's code in CACM's “Programming Pearls column” and an Indiana Jones scene as a parable. dl.acm.org/doi/pdf/10.1... www.youtube.com/watch?v=kQKr...
            Files
                .lines(Paths.get(args[0]))
                .flatMap(line -> Stream.of(line.split("\\W+")))
                .sorted()
                .distinct()
                .filter((x) -> x.length() > 0)
                .forEach(System.out::println);
061
Diomidis Spinellis @coolsweng.bsky.social · 17/12/2024
I thought that ChatGPT caused the engagement with StackExchange sites to crash, but it seems that the fall started way before its 2022 launch. Why do you think this happened?
Q&A per month https://data.stackexchange.com/stackoverflow/query/1003119/total-number-of-questions-answers-compared-by-month?utm_source=chatgpt.com
7110
Diomidis Spinellis @coolsweng.bsky.social · 17/12/2024
My ai-repo-feedback scripts used the OpenAI API to prepare and send out twenty 18-page formative feedback reports to student teams working on a term-long programming assignment. They run in less than four hours at a cost of about $0.85. github.com/dspinellis/a...
Report overviewCost report
093
Diomidis Spinellis @coolsweng.bsky.social · 10/12/2024
Now there's no excuse for not writing a proper Unix manual page for the tool you've developed. Just prompt ChatGPT with its usage summary and ask for the man page troff source code. Edit for clarity, accuracy, and conciseness, and you're done!
taru man page
072
Diomidis Spinellis @coolsweng.bsky.social · 21/11/2024
Sharp PC-1211: main memory 1920 bytes, 4-bit CPU running at 256 kHz. 24 alphanumeric character display. ~ 1981
111
Diomidis Spinellis @coolsweng.bsky.social · 21/11/2024
The social media metrics of followers, shares, and impressions demonstrate Goodhart's Law: “when a measure becomes a target, it ceases to be a good measure.” Nowadays, posts by influencers and companies are directly targeting these metrics, so none of them tracks reliably worthy accounts or content.
Pictorial explanation based on nails production from https://sketchplanations.com/goodharts-law
0123
Diomidis Spinellis @coolsweng.bsky.social · 14/12/2023
The Unix sed command is a stream editor, which means that with it you can process efficiently TB-large files. It's also a frequent pipeline component. Now you can learn how to use it in minutes, with my tiny sed tutorial, which is written as sed code: github.com/adambard/lea...
Part of the sed tutorial written in sed
000
Diomidis Spinellis @coolsweng.bsky.social · 05/12/2023
What can possibly go wrong? github.com/motioneye-pr...
motionEyeOS is a Linux distribution that turns your single board computer into a video surveillance system. Check out the wiki for more details.

Due to personal reasons I can no longer be actively involved with this project. If anyone is interested in taking it over, please contact me and we'll work out together a hand-off plan.
000
Diomidis Spinellis @coolsweng.bsky.social · 01/12/2023
The amazing rise of open publication data and hardware performance now allow us to conduct reproducible systematic literature reviews as well as bibliometric and scientometric studies on our desktop. More details in the @PLOSONE Alexandria3k article doi.org/10.1371/jour...
Evolution of scientific publishingAlexandria3k data schema
000
Diomidis Spinellis @coolsweng.bsky.social · 26/11/2023
Two fixes for a "truncation error" fifty years apart. "Plus ça change, plus c’est la même chose." (The more things change, the more they stay the same.) Large language models boost software development productivity, but quality issues will persist per Jevons paradox.
Colossus anomaly status report log notebook, compiled by Paul Rye, September 1969. MIT Museum.Linux kernel Git commit for a truncation error fix. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3223d007a3f9ddbd68424adf628e740dd87c564f
040