Perron's Paradox, Light Through the Ages, Etc.
Hello and welcome to the second installment of RWX. These posts contain an assortment of topics drawn from my recent readings, writings, and explorations. The updates here tend to be brief, offering only bits and fragments of my recent explorations. To read more detailed articles, please visit my blog.
Contents
Perron's Paradox
Oskar Perron, a German mathematician, introduced Perron's paradox to illustrate the danger of assuming the existence of a solution to an optimisation problem. The paradox works like this:
We get this absurd result because of the incorrect assumption that there exists an integer that is the largest of all the integers.
Light Through the Ages
Light Through the Ages: Ancient Greece to Maxwell is a very fascinating article written by J J O'Connor and E F Robertson in 2002 that takes us through a journey of how our understanding of light has evolved over the last few millennia. Here is an excerpt from the article:
The biggest breakthrough in ancient times was made by al-Haytham around 1000 AD. He argued that sight is due only to light entering the eye from an outside source and there is no beam from the eye itself.
The article then goes on to say:
He gave a number of arguments to support this claim, the most persuasive being the camera obscura, or pinhole camera. Here light passes through a pinhole shining on a screen where an inverted image is observed. Anyone visiting Edinburgh in Scotland should go to see the camera obscura there near the top of the Royal Mile and marvel at just how effective the camera obscura is in this enjoyable tourist attraction.
By the way, there is a camera obscura in the London too at Royal Observatory, Greenwich which offers pretty good view of the surroundings that includes Greenwich Park, the University of Greenwich, the River Thames, etc. Here is a picture I took the last time I was there: Camera Obscura, Royal Observatory, Greenwich.
SQLAlchemy Echo
I often work with SQLAlchemy, an object-relational mapper (ORM)
package available for Python, in order to read/write data from/to
database. While working with SQLAlchemy, I sometimes want to see
the SQL statements that SQLAlchemy generates behind the scenes. One
of the simplest ways to do this during development time is to simply
use the echo
keyword argument while creating
the Engine
object. Here is an example:
engine = create_engine("sqlite:///example.db", echo=True)
Now whenever we use this engine
to interact with the
database, it logs all SQL statements along with the parameter lists
for the SQL statements. For example, if we define
a person
column with two columns,
say, name
and city
, and use SQLAlchemy to
insert data into this table, we may see a few lines of log that look
like this:
2024-04-14 19:26:04,903 INFO sqlalchemy.engine.Engine INSERT INTO person (name, city) VALUES (?, ?)
2024-04-14 19:26:04,903 INFO sqlalchemy.engine.Engine [generated in 0.00006s] ('Alice', 'London')
To see a minimal, complete code example, visit this directory: python-sqlalchemy-echo.
Emacs Info Expressions
On #emacs
IRC or Matrix channels, we often share
references to the built-in Emacs documentation as Elisp expressions
that look like this:
(info "(emacs) Basic Undo")
The person who receives this info expression can visit the
corresponding section of the manual simply by evaluating it. For
example, after copying the expression in Emacs, they could simply
type C-y C-x C-e
to paste the expression into a buffer
and evaluate it immediately. Of course, if they are logged into IRC
via Emacs itself, then they can simply place the cursor right after
the closing parenthesis and type C-x C-e
to evaluate
it.
The sender can generate these Elisp expressions automatically by
typing C-0 c
in Info-mode
. Say, while
helping another Emacs user we type M-x info-apropos RET
version control RET
and land on the section "Branches" and
realise that this is the section that the person we are trying to
help should read. Now when we are on this section, we can simply
type C-0 c
and Emacs will copy the following expression to the kill ring:
(info "(emacs) Branches")
Unix Line Discard
Type C-u
(i.e., ctrl+u) in Bash
or Zsh to discard the current line of input. To read more about it,
enter man bash
and then
type /unix-line-discard
to locate the relevant section
of the manual. Here is an excerpt:
unix-line-discard (C-u)
Kill backward from point to the beginning of the line.
The killed text is saved on the kill-ring.
Similarly, for Zsh, type man zshzle
and then
type /kill-whole-line
. We find this:
kill-whole-line (^U) (unbound) (unbound)
Kill the current line.
By the way, Emacs-style key sequence like C-a C-k
works
too.
Furthermore, it is quite likely that C-u
is mapped to
delete the current line of input in the terminal itself. To confirm
this, type the command stty -a
and check the output.
If the output contains the text kill = ^U
, then
typing C-u
anytime in the terminal would delete the
current line of input. This would happen regardless of what program
is running in the terminal. For example, programs
like cat
, sbcl
, etc. do not support key
sequences like C-a
, C-k
, C-u
,
etc. the way Bash or Zsh does. Despite this limitation,
typing C-u
in sbcl
would delete the
current line of input if the output of stty -a
indicates that the terminal has mapped this key sequence to the
operation of deleting the current line.