Programming languages I spend my time on

I do not remember the podcast episode where the guest mentioned something that stuck with me: JVM is the single piece of software that has been so thoroughly engineered. Exaggeration aside, the guest was mostly right. We deploy tons of stuff that runs on JVM and we have to turn a multitude of knobs (usually by copy-pasting from SO/SF) until it somehow works. That’s why I learned Groovy. To be able to write 10 lines of code that would run on the JVM.

Erlang’s BEAM is another platform that needs to be mentioned. It still does not have the adoption it should given that we now run distributed systems all the time and need to orchestrate stuff. We prefer to hit our hammers on Kubernetes instead. Maybe this is because of the Prolog-like feeling of Erlang. That’s why Elixir has been in my bucket list. I’ve not written a single line of code yet.

Golang is the obvious suspect when you’re paid to run stuff on Kubernetes. The combination is like C and Unix: Go and Kubernetes. There’s nothing more to add here.

LLVM is other thing to look into. It seems to be the compiler backend, especially when you’re not writing a compiler of your own. Guess what? Julia is the thing I’m looking into. At a point in time, you’re going to need something different than Python and Pandas or other combination. My bet is Julia. I have written 10 lines of code in it :)

Anything more exotic? Well, as I am approaching 50, I’m thinking of visiting APL. But not without a project at hand.

I could have invested all this time and learn a single language instead: C++

When you quickly need a proxy server

Sometimes you need a proxy server. Not because you really want to proxy and cache stuff, but because you want to study the behavior. Yesterday was such a day for me. I just wanted to see what calls were made by a program and I needed something to intervene. Not something fancy. I went to DockerHub searched for squid in the box and sure enough, Canonical has an image uploaded:

docker run --rm -p 3128:3128 ubuntu/squid

That single line pushed things a bit forward for me last night.

Random thoughts on clouds and computers

Things that returned to my mind as I sat today in front of the screen:

  • The Datacenter as a Computer, book. A PDF can be found here.
  • AWS, Azure, Google Cloud, Alibaba, Digital Ocean
  • Thomas Watson saying “I think there is a world market for maybe five computers”
  • Ken Thompson saying “The future of OS is just a stream to the cloud. Doesn’t see “universal cloud computer” Companies will try to dominate.” Cloud Drives, your music from a streaming service, even your Office documents, etc.

    Right now I am subscribed to two cloud drives and am battling migrating from one to the other. It took about a year for one client to not crash when downloading the whole content locally.
  • An old post of mine that I never expanded on, just like this one.

I’m too old for this sh*t – part II

Yesterday my daughter’s phone was permanently stuck in fastboot. She tried a couple of remedies from YouTube videos and managed to boot it, but still on every reboot the fastboot logo was there and she had to press Volume Up and Power to boot it. On top of that, the Volume Down button was not responsive and the Volume Up was working, however after setting it, volume was immediately reset to zero.

No worries kid, you have device backup, so let’s try to factory reset the phone and restore from the latest backup. Oh, but the phone is on Family Link and it cannot be factory reset. Family Link should be able to reset it, however "if the option is not there you need to add an account to the phone". OK, let’s add the account to the phone. Only I cannot add my account to the phone, only a school account. Well, there are no Greek Public School accounts in Google. Still no option to reset.

Out of "random acts of panic" (an expression coined by a good friend of mine), I did random pressings of Volume Up, Volume Down and the Power button. I was either greeted by the fastboot logo, or the OS with the erratic button behavior.

Random googling directed me to install the Android Platform Tools. Really? I have to be a developer just to unlock the phone. So be it. Well neither adb devices nor fastboot devices showed any connected device. Of course the phone needs to have the Developer Options enabled. And of course this is prohibited by Family Link. Thankfully it allowed for it to be enabled. Now interestingly adb devices listed the phone but fastboot devices did not. I reboot the phone. adb devices does not list it, fastboot devices does. Random googling says fastboot reboot should clear the issue. It does not. I’m also told fastboot wipe data will wipe the phone (which is what I want). It does not because the phone is locked and you need to download Mi unlock for which you need a Mi account. Oh but we do not remember yet another password (The Mi account was created with Google auth). And right now the phone refuses to boot and accept SMS to reset the password, and I’m really bored / torn down to move the SIM to an older phone (I do not even think I have a SIM adapter for the older phones around).

I’m kind of angry and after a couple of fastboot reboot with no result (remember the definition of insanity?) I just press Volume Up (or Down, I can’t remember) and the Power button. And I am greeted with the holy menu that allows me to wipe the phone. The Volume Down button still does not navigate but thankfully the Volume Up circles through and I reach the treasure.

The phone is wiped out, restored and operational again.

I’m really, really tired.

I only want to yell

I’m too old for this sh*t

As I am approaching 50 I want some things to simply work. Flip a switch and do not feel adventurous. I want them boring and without options.

When I started on my current employer, I continued working on a Windows machine, like with my previous one. I had a somewhat weird, but working for me workflow that relied a bit on running VMs via vagrant in order to keep some things isolated and easily restorable.

This kind of changed when I decided to upgrade to Windows Pro, since Hyper-V and VirtualBox did not seem to play nice at the time. But with WSL I could adapt the way I worked a bit and continue …on Windows.

And then I switched teams and joined some friends (from within and outside the company):

  • You of all people are running on Windows? How is this possible?

Well, I want my Zoom calls to work, my Wacom to work and a few other things, like my Bose QC35ii connecting properly via Bluetooth, otherwise what’s the point of having them.

  • Oh but they all do work.

And in fact they do. Even the Wacom did, almost as good as on Windows. And Zoom. And even the Bose, despite the fact that I needed to buy a Creative BT-W2 to connect and enjoy proper sound. I switched partly out of shame and I stayed on board for a year with 20.04 and 21.10.

And then 22.04 came about and they did not. Because you know? 2022 is still not the year of the Linux desktop. Zoom it seems cannot share Windows when on Wayland (yes, I know I can start with Xorg and not have issues. I’ve compiled and run X11R5 and have seen systems with R4 and I’ve books about Xlib, what about you?). And when you work for a big company there comes compliance. Some may call it a theater, but it does not matter, it is still a requirement. And it expects some pretty standard stuff, like AV, disk encryption, specific VPN (which may or may not install under 22.04 LTS) and other clients that are ported to Linux later, or as an afterthought. And I’m not there to battle IT and Infosec. I’m there to work with them towards and end goal, which is not making my computer work.

Oh I know, you get a happiness fix when you make things work. You can blog and brag. When in fact you shouldn’t. They already worked for everyone else. So you kind of "rage quit" the Linux desktop for the third time. It took me less than 30 minutes to migrate (it took me more to copy files).

And I really do not care anymore. All I need is a decent terminal, a browser and BT connectivity for the communication software to just work. And with the current state of things, Windows 11 and WSL achieve this at an affordable price. I got a MateBook and a macmini at the price of a MacBook Pro and I work on the MateBook most of the time.

And they just work.

PS: The 2014 MBAir that does not run the latest MacOS also works. 22.04 makes it a pretty good couch browsing machine. So it is not expelled from the household in the end.

removing all containers via ssh

Assuming one wants to unconditionally remove all containers in a host, they would run:

$ docker rm -f $(docker ps -a -q)

Suppose now that you want to execute this in a remote host via ssh. The following won’t work:

$ ssh remote_user@remote_host "docker rm -f $(docker ps -a -q)"

because the $(docker ps -a -q) part is expanded locally on your machine and you ssh remotely after the expansion. So at best it would seek to remove your local containers over there :)

What would work though? xargs to the rescue:

$ ssh remote_user@remote_host "docker ps -a -q|xargs -n 1 docker rm -f "

Of course you can fine-tune further if you wish.

I sold two books from my library today

There’s this service called metabook that facilitates selling books that you no longer need / want and buying them from the seller. I had two in excellent condition collecting dust for many years:

  • UNIX Network Programming: Interprocess communications
  • UNIX Network Programming: The sockets networking API

I had purchased them for sentimental reasons. I’d read the first edition from the lab next to mine and at some point in time I got them. It is always nice to have a complete library.

The warm feeling I used to have by just looking at them was gone though. But I could see the spark in the eyes of their new owner. He too said he got them for sentimental reasons.

Ubuntu VM on Parallels M1 does not boot after upgrade

So I upgraded a VM running on Parallels on my M1, only to be greeted with:

This issue seems not to be unique to Parallels. It also happens with UTM. The quick fix here was to boot the machine with the previous kernel and customize grub to boot using GRUB_DEFAULT=saved and GRUB_SAVEDEFAULT=true for as long as the issue persists.

Granted this does not work when trying to install from an Ubuntu 20.04.4 ISO image, but you can start from an older one for as long as the issue persists.

Update: kernel

Linux upwork-box 5.4.0-105-generic #119-Ubuntu SMP Mon Mar 7 18:50:13 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux

seems to work

Canceling all Jenkins jobs in queue

This is a continuation from a previous post where I showed how to disable all configured jobs in a Jenkins server (when for example launching a copy for test purposes). To this end, it may be the case that you have placed your Jenkins controller in quiet mode to have some ease of mind examining what goes on with your queue, or you simply want to cleanup the queue and have the system start with no jobs submitted. Whatever the reason, if you need to erase all of your Jenkins queue, python-jenkins and a few lines come to your assistance:

import jenkins

server = jenkins.Jenkins('http://127.0.0.1:8080/',
        timeout=3600,
        username=USERNAME,
        password=PASSWORD)

queue_info = server.get_queue_info()
for i in range(len(queue_info)):
    print(queue_info[i]['id'])
    server.cancel_queue(queue_info[i]['id']) 

Mi TW Earphones 2 Basic not disconnecting when in case

It may happen that when you put your Mi TW Earphones 2 Basic back in their case they do not disconnect when you close it. The reason for this seems to be that the kid gets a tiny bit loose and as such it does not press them enough to understand that the lid is closed so they must disconnect.

Electrical tape to the rescue. Two pieces should be enough.

Update: I am now using BluTack instead.