A setup for remote piano lesson over Zoom

First create a new sink:

`pactl load-module module-null-sink sink_name=zoom_input sink_properties=device.description=zoom_input`

then remap into a Zoom monitor source that Zoom will allow selection of:

`pactl load-module module-remap-source master=zoom_input.monitor source_name=zoom_mic source_properties=device.description=”zoom_mic”`

Then create as many new virtual sources as microphones you need to merge together with `pactl load-module module-loopback` and finally go into Pavucontrol, select Virtual streams, and assign different physical sources in the dropdowns. Then select zoom_input in Zoom as source.

Good reference: Play audio output as input to Zoom


How to implement the 6-hour workday in a company

It is difficult to argue that the current, wide popular 8-hour workday in cognitive-demanding jobs is in any way efficient. It is bad both for employees and employers. Quoting the Harvard Business Review,

Many of today’s organizations sabotage flow by setting counter-productive expectations on availability, responsiveness, and meeting attendance, with research by Adobe finding that employees spend an average of six hours per day on email. Another study found that the average employee checks email 74 times a day, while people touch their smartphones 2,617 times a day. Employees are in a constant state of distraction and hyper-responsiveness.

This is insane. And if you yourself think that you do indeed work productively 8 hours a day, think again. I know nobody who will honestly say that they get productive work done 8 hours a day. Three options there:

  • we do work 8 hours, but not getting 8 hours of real work done (someone said meetings?);
  • we are at the desk for 8 hours, but we don’t work for that long (someone said procrastination and non-work related tasks?);
  • we do work productively for 8 hours, but that is not sustainable. When I truly get demanding stuff done for 8 hours, the strain is so high that I take half the day afterwards off. So it is technically true that people can work productively for 8 hours, but only at the cost of burning out in a couple years. (I have had the experience of truly working long hours in my youth, only at the price of feeling I couldn’t get any meaningful work done for months after a couple years of that routine.)

Once, when coming back home from work, I started wondering: how would it be possible to reduce the amount of hours a company expects employees to work, and yet retain the same output? How, if I had a company, would I achieve this? How could I have happier employees with more free time and yet a successful firm?

The problem with the 8 hours workday

My thinking stem from two assumptions:

  1. we can only expect to work productively 2-4 hours a day, with the exact amount depending on boundary conditions (after all, there are bad, better and good days). I would not expect anybody to focus deeply for more than 4 hours a day. Like, true focus for 4 true hours. Not fragile focus interrupted by dling of emails or random questions by passers-by.
  2. we are often asked to be in (often long) meetings where our presence is not of severe importance, or that are altogether useless for the whole team.

Clearly, point 1 is the time when the company goes forward and makes money, since it is the time work gets actually done. We want to protect those hours. Point 2 is the time no employee looks forward to. It is customary to allocate time for point 2 just to keep employees busy, relying on a well-spread disrespect for other people’s time. These hours we want to peel away.

Of course though, every company must also deal with the biggest challenge of humankind collaboration: communication. Every employee is a separate human entity, whose brain is detached from all other colleagues’ ones. Information needs to be shared among people in an effective manner, i.e. in a way in which others understand and can act as a result of the exchanged information. This is by far the most difficult part of any job: getting what you have in your head out of it and into someone else’s head. The value of an employee is often in direct proportion to his skill in this field.

To make it harder, there is an outrageous amount of oral communication happening these days in (tech) companies. When you think that you can have effective technical communication verbally, think that even USA presidents have scripts when delivering speeches. Any verbal communication needs to be carefully planned, otherwise it just ends up being wasted time.

We so often require people to be in meetings just because we are too lazy to write a well-structured and -thought text that everybody can read when they want, at the pace they want, and to which they can refer to a month later. Oral communication is instead lost, and, especially if the company has a high turnover, the same stuff needs to explained multiple times.

So how do we fix this all?

The recipe for the 6 (or less) hours workday

As often, an efficient schedule is our best friend. As part of their onboarding, employees will be asked for several time slots:

Continue reading “How to implement the 6-hour workday in a company”

Setup OpenWRT on Raspberry Pi 3 B+ to avoid data trackers

I am definitely not an expert in networking, so take all of this with some salt. Still, I found it valuable to have my home internet powered by open source software as much as possible, rather than some shitty closed black-box provided by my ISP.

There are already lots of valuable resources on setting up OpenWRT on a Raspberry Pi as a home router. To cite some:

Upon first setup, I had issues connecting the Raspberry to my Ubuntu laptop and make the first setup. Only later did I learn that I could have simply edited the config file on the microSD and avoided the pain, but anyway, I was able to have it work through ethernet on my laptop by setting the ethernet interface to be unmanaged.

I found the wifi adapter of the Raspberry do be strong enough to cover a 3-room apartment, and also go outside. When all the confi was right, I just disable DHCP on my ISP router, enable DMZ to the Raspberry (which had a static address by then), and let the Raspberry be the only DHCP server in the network.

You can check if the Raspberry really is the only DHCP server by running the command `udhcpc -n -q -s /bin/true -t 1`. You should get `udhcpc: no lease, failing` as last line of output; if you don’t, then there is still another DHCP server active in the network.

Ads and trackers blocking through dnsmasq

I then wanted to block ads and data trackers through a DNS filter. Starting from this, I eventually ended up using the first of these lists as DNS blacklist, with a handy bash script that would update the list on a regular basis. Note that data in /tmp is lost on reboot, and data not in /etc is lost on firmware re-flashing.

Continue reading “Setup OpenWRT on Raspberry Pi 3 B+ to avoid data trackers”

Automate spam/pending comments deletion in WordPress + bbPress

If you expose your bbPress forums to the public, it is likely you will be getting loads of spam every day. Most of it is actually caught either by WordPress itself, and set as pending, or by Akismet, and set as spam. Either way,

  1. bulk purging pending content is not possible from wp-admin; one needs to go through each page of comments individually.
  2. spam comments bulk removal can timeout wp-admin if you have many.

That is why it is best to schedule the deletion of spam and pending topics as a cron job. The following two commands will delete spam and pending topics for the previous week (not the current one, so there is some time to review them, if something legitimate is actually marked as spam). Just add them to cron (on Linux) through crontab -e (but care to change the --path value).

0 1 * * 6 wp post delete $(wp post list --post_type='topic' --post_status='spam' --field=ID --path=/var/www/html --w=$(echo $(date +%V)-1 | bc)) --force --path=/var/www/html
0 2 * * 6 wp post delete $(wp post list --post_type='topic' --post_status='pending' --field=ID --path=/var/www/html --w=$(echo $(date +%V)-1 | bc)) --force --path=/var/www/html

Doing the same for regular comments is unfortunately not possible, since WP-CLI does not support array input yet, so it is not possible to filter comments by date.

A fix for broken (physical) buttons and dead touch area on Android phones

My old Android smartphone fell too many times and had its physical buttons (back, home, recent apps) not working, which was problematic to do anything. You can go back with in-app buttons most of the times, but there is no way to switch app or to go back to the desktop.

One good fix is to use an app that will put the back and home button functions as touch gestures, for example swiping from the borders of the screen. To this avail I suggest Fluid Navigation Gestures. In case you absolutely needed to trigger the home button, for example, you can connect the phone to the computer, enable ADB, and trigger any key you would like with it.

Navigation gestures are a good fix until you realized that not even the spacebar (or the whole lower row of keyboard keys) would not work. So in the end, the real solution is to prevent Android from drawing anything in the bottom part of the screen (or, at any rate, the broken part, wherever it is — as long as it is on some side and not central). And it turns out it is actually possible to resize the screen area in Android!

Continue reading “A fix for broken (physical) buttons and dead touch area on Android phones”

FOSS Android Apps and my quest for going Google free on OnePlus 6

A while ago I decided I did not want to be a product anymore, and start paying for services. I started by breaking free from all the free-but-commercial company services such as Dropbox and Gmail, and ultimately ended up ditching all non open source software on my phone, doing away with anything that was Google-run.

There is an alternative: follow through as we embark on the journey of moving to Free and Open Source Software (FOSS) for Android.

Easy replacement for essential services

The problem with non-open source software is that they have to keep building new features into their products, or the market will tag them as dead. They have to keep moving, and some occasional bugfixing is not enough. On the other hand, open source software does often not have this drive. These projects’ maintainers just tend to make sure their software runs smoothly and that it has all it should have.

So, after Dropbox kept implementing useless features and, most of all, would force me to move my folder to a partition formatted with ext4 instead of ntfs, I was fed up. My first step was thus to self-host an instance of Nextcloud. I chose self-host because I wanted control and because I already had a server to host it on, but there are options where you can rely on someone else’s instance and register for a share, pretty much as Dropbox does.

And Nextcloud is really, by all means, a valid alternative to Dropbox. There are clients for all operating systems, including mobile ones, with all the needed features, and they are actively maintained. Actually, it’s more than an alternative to Dropbox! I started with just file hosting, but there are countless apps that can boost your Nextcloud instance. I added Notes and did away with Google Keep, but most importantly Contacts and Calendar so that I could sync my phone contacts and meetings not with Google, but with my own server (using the DAVx Android app, freely available on F-Droid). I also tried the Passwords app to ditch Lastpass, but the Firefox addon was not working super well (end thus ended up signing up for Bitwarden instead). I switched to Bitwarden in the end.

I then scouted for (paid) privacy-focused email services. First to grab my interest was Tutanota, but after using it a few days it was clear to me that they were still far from being something one could rely on as a power user (no conversations, no option to receive mails from other domains, and more missing). I then went with ProtonMail, which I am very happy with — true, some features miss there as well, but they are minor. I now have a primary protonmail address, and (as a paying user) I could link my other addresses so I handle all from one dashboard. It came with a subscription to ProtonVPN as well, but commercial VPNs for privacy are just nono. And so Gmail was gone as well.

Continue reading “FOSS Android Apps and my quest for going Google free on OnePlus 6”

The spiritual similarities between playing music and table tennis

As a fellow table tennis player and piano player, I have noticed some interesting spiritual similarities between the two arts. I’m pretty sure they are also common to other sports anyway.

Always think ahead: the next stroke, the next note

In table tennis, one should not think about scoring a point with the current stroke, but rather be prepared for the next. What ball will I get back given my current playing? What do I expect? How am I going to handle it? If we do not think ahead, we will always fall short when the ball comes back, we will not be prepared. In a similar fashion, when playing an instrument, it is vital to know what the next note will be, what the next musical phrase will be. Giving meaning to a speech is impossible if we do not know how it goes on beyond the very current moment.

Mistakes do not matter. If you make them matter, you lose

It is a common phenomenon to make a mistake followed by more mistakes, mostly in the attempt of correcting that mistake/with the case of overthinking the mistake that has already happened. It does happen to make the wrong choice when playing table tennis, or to not get our best stroke, as much as getting a note wrong. This is not a problem as long as we are able to go on and forget that single mistake. Instead, if we focus on that, we end up stressing it and it becomes much heavier.

Continue reading “The spiritual similarities between playing music and table tennis”

FEniCS differences between Function, TrialFunction and TestFunction

The FEniCS project allows for simple solution of partial differential equations. However, getting started from examples is so quick, it is easy to miss how the inner-workings of it behave. This should not happen (especially if it is a PhD project). There are three vital pieces of the puzzle that it might not be clear what they are for, and the documentation does not help here: the functions TrialFunction, TestFunction, and Function.

The thing is that, in the usual Finite Element Methods, we only have the distinction between the trial function u \in V_h and test function v \in V, and even then the distinction is often blurry. In fact, technically, the spaces V_h and V can be different. However, most of the time we take them to be the same (for example, the same discrete space of piecewise linear functions). The names we give them is just to have clearer in our heads what role they play in the game, but we could as well say “two functions in V“. Then why would FEniCS have even a three-fold difference? You can quickly check for yourself that, for example, if you swap the TrialFunction for a Function, FEniCS will complain.

There is no documentation on the topic as far as I have found, so these are my (maybe mistaken) deductions.

The meaning of the TrialFunction is to let FEniCS know what function we are solving for. In fact, when we call

solve(A, u_.vector(), b)

FEniCS expects to find a TrialFunction in A, which is supposed to be the function we are looking for. On the other hand, u_ is the symbol in which the result will be stored, and this needs to be a Function (not `Trial`, not `Test`, just a regular `Function`).

Continue reading “FEniCS differences between Function, TrialFunction and TestFunction”

How to give a scientific talk

I have listened to so many talks in so many different fields and topics, that I feel confident enough to provide advice on how to give a proper talk. I have listened to talks ranging from public speaking contests to PhD level seminars. I draw mainly from science talks, but this pretty much applies to any field, really.

0. Prepare your talk

If you do not feel like preparing for your talk, then please just refrain from giving one and save the people from the hassle of listening to a terrible talk. Everybody needs preparation for a talk – their experience may make the preparation quicker, but it is still needed. No preparation, no talk.

1. Define your audience

Who is your talk for? This is the single most important question you need to ask yourself. Who are you speaking for? What background can you expect them to have? Always remember that you are giving a talk for people, so they should be your first focus. Not your work, your presentation, your show – the audience come first! Two presentations on the very same topic can turn out pretty different, if they are aimed at different audiences. If you do not plan for the right audience, you are likely to give a talk that is just wrong (and useless to the world).

The most common mistake is to make the talk too hard and high level with respect to the audience it will be delivered to. This is most usually a lack of confidence, which results in the perceived need of making something difficult to understand so that
a) people can believe the speaker is very smart;
b) make people believe that the subject is worth.
The latter is based on the widespread implicit assumption that anything that is hard to understand is worth, which is just bullshit. Beware of anything you do not understand.
It is also easy to just copy and paste some formulas or graphs and show those off, without giving away any real understanding.

So, when your talk is ready, revise the material and make sure it can be understood (to a good extent!) by a person having the background you expect from the audience. Most importantly, avoid all jargon unless it is really strictly required. And even then, question your choice of using it. It is fine to use some jargon at advanced talks, just bear in mind that if a listener has to pause and ponder about the meaning some word, you have lost them for the time being. Thus, all jargon used should be sufficiently ingrained in people’s head to come without thought.

2. Define what you want to take across

What content are you trying to deliver (if any)? List around 3 points and make sure they are thoroughly covered, and that your audience clearly understands those basic pieces of information. A good measure of success is whether 90% of the audience went home with the ability of re-telling those 3 points with clarity and sufficient detail. If not, then the talk was a failure.

Always make a point of cutting out non-essential stuff. It is true that you might be telling a year worth of work in just 30 minutes, and you may be tempted to detail all the things that make it look like you have done a lot of work, but again ask yourself: is this useful to the audience’s understanding? 95% of the times the answer is a sharp no.

3. Bring the material together and tell a story

The fact that you are communicating some objective piece of science does not mean that your talk should be dull. Of course, you should not aim for entertainment for its own sake. But still, strive to link all your material together and build a narrative with it, make clear to the audience how each piece is linked to the others. Aim to be a storyteller.

Also, a good question to cover, from the point of view of the audience, is “why should I care?”. Do not just show your work, make it meaningful to the audience.

Continue reading “How to give a scientific talk”