Latest posts for tag rant
Opinion Sort
«Bullshit is unavoidable whenever circumstances require someone to talk without knowing what he is talking about. Thus the production of bullshit is stimulated whenever a person’s obligations or opportunities to speak about some topic are more excessive than his knowledge of the facts that are relevant to that topic.
This discrepancy is common in public life, where people are frequently impelled— whether by their own propensities or by the demands of others—to speak extensively about matters of which they are to some degree ignorant.
Closely related instances arise from the widespread conviction that it is the responsibility of a citizen in a democracy to have opinions about everything, or at least everything that pertains to the conduct of his country’s affairs.
The lack of any significant connection between a person’s opinions and his apprehension of reality will be even more severe, needless to say, for someone who believes it his responsibility, as a conscientious moral agent, to evaluate events and conditions in all parts of the world.»
Opinion Sort
In a world where it is more important to have a quick opinion than a thorough understanding, I propose this novel sorting algoritihm.
def opinion_sort(list: List[Any], post: Callable[List]):
"""
list: a list of elements to sort in place
post: a callable that requires a sorted list as input and does
proper error checking, as they should do
"""
if list[0] > list[1]:
swap(list[0], list[1])
while True:
try:
# Assert opinion: "It is a sorted list!"
post(list)
except NotSortedException as e:
# Someone disagrees, and they have a good point
swap(list[e.unsorted_idx_1], list[e.unsorted_idx_2])
else:
break
# The list is now sorted, and the callable has to agree
This algorithm is the most efficient sorting algorithm, because it can sort a list by only looking at the first two elements.
Gnome without chrome-gnome-shell
New laptop, has a touchscreen, can be folded into a tablet, I heard gnome-shell would be a good choice of desktop environment, and I managed to tweak it enough that I can reuse existing habits.
I have a big problem, however, with how it encourages one to download random
extensions off the internet and run them as part of the whole desktop
environment. I have an even bigger problem with
gnome-core having a hard
dependency on
chrome-gnome-shell, a plugin
which cannot be disabled without root editing files in /etc
, which exposes
parts of my destktop environment to websites.
Visit this site and it will know which extensions you have installed, and it will be able to install more. I do not trust that, I do not need that, I do not want that. I am horrified by the idea of that.
How can one do the same for firefox?
Description
chrome-gnome-shell is a hard dependency of gnome-core, and it installs a browser plugin that one may not want, and mandates its use by system-wide chrome policies.
I consider having chrome-gnome-shell an unneeded increase of the attack surface of my system, in exchange for the dubious privilege of being able to download and execute, as my main user, random unreviewed code.
This package satifies the chrome-gnome-shell dependency, but installs nothing.
Note that after installing this package you need to purge chrome-gnome-shell if it was previously installed, to have it remove its chromium policy files in /etc/chromium
Instructions
apt install equivs
equivs-build contain-gnome-shell
sudo dpkg -i contain-gnome-shell_1.0_all.deb
sudo dpkg --purge chrome-gnome-shell
Software quality in 2016
Ansible's default output, including the stderr
of failed commands, is JSON
encoded, which makes reading Jenkins' output hard.
Ansible however has Callback plugins that could be used. In that page it says:
Ansible comes with a number of callback plugins that you can look at for examples. These can be found in lib/ansible/plugins/callback.
That is a link to a git repo with just a pile of Python sources and no, say
README.md
index to what they do. Hopefully they have some docstring with a short description of what they do?
no.
Actually, some do, but just because someone copypasted the default one and didn't even bother removing its docstring.
I chipped in
I clicked on a random link and I found myself again in front of a wired.com popup that wanted to explain to me what I have to think about adblockers.
This time I was convinced, and I took my wallet out.
I finally donated $35 to AdBlock.
(And then somebody pointed me to uBlock Origin and I switched to that.)
Simple one liner to save battery life and reduce system latency
Sometimes I am in an airplane, and I just want to write code and compile it.
Sometimes I am playing a game in full screen, and I don't want it to lag.
Lynoure suggested this simple one-liner which helps immensely, to a point that I have turned it into a habit:
pkill -STOP chromium
When I want to use the browser again:
pkill -CONT chromium
I wish web browsers would stop running anything when unfocused, unless asked otherwise on a site by site basis.
Update: Johannes Schauer blogged more than a year ago about how to automate this in awesome.
Debugging output of GUI apps
I have been hit by #643726 again.
I was happily working on a terminal while an apt upgrade
was running on
another, and suddenly kbuildsycoca4
started vomiting on my command line
because I had run okular once on that terminal last tuesday.
Among the possible workarounds, one can run kdebugdialog
from package
kde-runtime
and check the "Disable all debug output" button.
This is the output of kdebugdialog
when run on a terminal after enabling
"Disable all debug output":
$ kdebugdialog
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
I see it as debugging output turned into an art performance, and I have an
appreciation for this kind of things. kdebugdialog
, my hat's off to you.
Downgrading network-manager
This morning I woke up. Bad idea.
I find in the work mail a compiler error that I cannot reproduce, so I need to log into a machine at work. But #809195.
I decided to downgrade network-manager. I recall there was a tool to download packages from snapshots.debian.org, I discussed it recently on IRC, let's sync the IRC logs from my server. Or not (#810212).
Never mind, I'll log into the server and grep. Ooh, it's debsnap. However, it doesn't quite do what I hoped (#667712).
After some help from #debian-devel
(thanks jcristau and LebedevRI), here is
how to downgrade network-manager:
# echo "deb http://snapshot.debian.org/archive/debian/20151125T155830Z/ sid main" >> /etc/apt/sources.list.d/tmp-downgrade-nm.list
# apt -o Acquire::Check-Valid-Until=false update
# apt -o Acquire::Check-Valid-Until=false install network-manager=1.0.6-1
# rm /etc/apt/sources.list.d/tmp-downgrade-nm.list
# service network-manager restart
And as user:
$ killall nm-applet
$ nm-applet &
The yak is now nice and shaved, I can now go and see what those compiler errors are all about.
Actually, no, there was still an unshaved patch on the yak, and now we have a debcya script.
When Akonadi silently fails to sync your calendar...
Bug severity: seriously ruining my life.
Try to use korganizer to create a calendar entry when the server is not reachable (say, you are offline, or you typed the wrong password), and you may find that you end up with no error messages, an entry that shows up perfectly fine, but that will never be synced to the server, ever again.
I use korganizer, radicale and caldav for important things. The practical ramifications of me inserting entries in korganizer, seeing that everything looks ok, and then not finding them on my phone while on the go, are scary.
Think of things like importing .ics
files with flight schedules, entering tax
deadlines, time and places for customer meetings, time and places of arrival of
loved ones I'm supposed to pick up.
I spent time setting up my own infrastructure for this exactly because I care that all of this works reliably.
And now I urgently took a morning off work to find a way to detect those entries that Akonadi is refusing to update,
The whole thing is cumbersome to run, but if you are using kdepim-based tools to manage your calendars and sync them across devices, you may want to give it a go every once in a while.
You can find the script and the notes I took so far on the issue at https://github.com/spanezz/akonadi-workarounds.
Italian Fattura Elettronica with OpenSSL
I have had some success signing an Italian fattura elettronica with OpenSSL.
I am amazed to realise that the software they gave me to do the job is of such bad quality that I felt like spending a few hours trying to do the same thing with OpenSSL instead.
Extracting XML payload from Italian Fattura Elettronica zipfiles
This system does not even export to PDF. In order to provide my accountant with something better than a DER-encoded file with a random-looking name stored inside a zipfile, here is a script that at least extracts the unsigned XML payload out of a saved Fattura Elettronica.
If you're giving a python course in Italy, this sounds like a nice early programming assignment.