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"Last modified: Friday, December 11, 2020 0:35 am
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"Last modified: Monday, November 2, 2020 12:37 am
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"Last modified: Wednesday, September 30, 2020 0:00 am
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"Last modified: Thursday, August 27, 2020 7:26 pm
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"Last modified: Thursday, August 13, 2020 1:16 pm
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"Last modified: Tuesday, July 21, 2020 3:16 pm
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"Last modified: Sunday, May 31, 2020 10:55 pm
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"Last modified: Wednesday, May 20, 2020 9:50 pm
A chat protocol for remote lectures
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.
Continue reading "A chat protocol for remote lectures"Last modified: Monday, April 6, 2020 6:30 pm
Shell scripting for personal productivity
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.
Continue reading "Shell scripting for personal productivity"Last modified: Monday, March 23, 2020 11:43 am
What explains the counter-intuitive numbering of chip pins?
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.
Continue reading "What explains the counter-intuitive numbering of chip pins?"Last modified: Friday, March 20, 2020 2:44 pm
Installing PyTorch on a Raspberry Pi-3B+ redux
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.
Continue reading "Installing PyTorch on a Raspberry Pi-3B+ redux"Last modified: Tuesday, March 17, 2020 5:19 pm
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?
Here’s my take.
Continue reading "Seven reasons to add Unix command line expertise to your tool chest"Last modified: Monday, March 16, 2020 0:34 am
What can software developers learn from the Soviet Moon Landing Program?
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
— offer some important lessons to software developers.
Continue reading "What can software developers learn from the Soviet Moon Landing Program?"Last modified: Friday, March 6, 2020 8:43 pm
Was Knuth Really Framed by Jon Bentley?
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.
As the developer of an
edX massive open online course (MOOC) on the use of Unix Tools for data, software and production engineering
I decided to put this claim to the test.
Continue reading "Was Knuth Really Framed by Jon Bentley?"Last modified: Tuesday, February 25, 2020 9:53 pm