Skip to content


Looks like Mozilla is preparing a new shitty update

Among what appears to be okay-ish improvements to the download menu / panel / features / workflow, it seems that they plan to YET FUCKING AGAIN OVERRIDE a user-set preference / change a default behavior even for those who enjoy it and have been happily using it this way for years. People complaining are gently told to fuck off.

Brace yourself, this is coming in the next version, Firefox 98 (nice ridiculous version number btw, thanks Google for setting the trend and thanks ball-less Mozilla for following like a nice little poodle).

Thanks for doing all the same crap Chrome does. Sometimes I wonder why I still bother.
… oh, right, because they haven’t fucked up (yet) their proxy settings (notably SOCKS proxy support)

If I don’t forget to, I’ll probably update this post after release with the steps needed to go back to the previous, NORMAL AND SENSIBLE behavior.

Update (2022-04-03): well I didn’t completely forget to update, I just didn’t find any satisfying way to fix that crap :/ I just manually configured what to do with each file type, one by one (luckily there aren’t that many). What a user-friendly update!

Posted in Firefox, Totally pointless.


FYI, Terraform can waste a lot of space

I recently +/- ran out of space on my work PC (hurray for tiny SSDs in 2022), and since low space has been a recurrent issue for a while now, I decided to clean a bit more thoroughly than usual, so as to (hopefully) be done with it for a while.
I looked for a disk space analyzer and eventually picked JDiskReport because the UI seemed decent and I liked the “drawback” that it doesn’t have a feature to delete files itself. Eventually, as I was cleaning and spotting space wastes, I stumbled upon our Terraform repo.

I had never noticed this, but Terraform appears to keep all previously used versions of its providers, in every project. So I had 6 old AWS providers in a project (in .terraform\providers\registry.terraform.io\hashicorp\aws, and a bunch of other old versions in another project (in the same folder plus also in what appears to be former folders, which were never deleted, .terraform\plugins\registry.terraform.io\-\aws and .terraform\plugins\registry.terraform.io\hashicorp\aws).
In total, that was around 1GB of crap per project. Not that much, but considering a Terraform repo is fairly below 1MB (even including the fat state files), it’s a “mere” 1000x space waste. It’s crazy how so many dev tools have no consideration at all for the developers’ hardware (and even crazier how so few developers seem to be upset by this kind of crap – if even those people don’t care, who will?).
While I’m at it, a little thought for Rust and its 10 GB of “temporary” files (that are never removed until you delete them yourself and are okay with recompiling from scratch later) in one of our 20 MB (final compiled size) projects…

Posted in programming, software.


If you’re curious about Steam’s hardware survey…

Steam randomly runs hardware surveys on their users (then they put aggregated results there), and when you’re “selected” you get a chance to see what’s collected about you.

Here is what this contains for 2 of my (old) computers. Note that some devices weren’t quite properly detected (notably disks, monitors, and OS install dates)

Computer Information:
    Manufacturer:  MSI
    Model:  MS-7982
    Form Factor: Desktop
    No Touch Input Detected

Processor Information:
    CPU Vendor:  GenuineIntel
    CPU Brand:  Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
    CPU Family:  0x6
    CPU Model:  0x5e
    CPU Stepping:  0x3
    CPU Type:  0x0
    Speed:  3192 Mhz
    4 logical processors
    4 physical processors
    HyperThreading:  Unsupported
    FCMOV:  Supported
    SSE2:  Supported
    SSE3:  Supported
    SSSE3:  Supported
    SSE4a:  Unsupported
    SSE41:  Supported
    SSE42:  Supported
    AES:  Supported
    AVX:  Supported
    AVX2:  Supported
    AVX512F:  Unsupported
    AVX512PF:  Unsupported
    AVX512ER:  Unsupported
    AVX512CD:  Unsupported
    AVX512VNNI:  Unsupported
    SHA:  Unsupported
    CMPXCHG16B:  Supported
    LAHF/SAHF:  Supported
    PrefetchW:  Unsupported

Operating System Version:
    Windows 7 (64 bit)
    NTFS:  Supported
    Crypto Provider Codes:  Supported 311 0x0 0x0 0x0

Video Card:
    Driver:  Intel(R) HD Graphics 530
    DirectX Driver Name:  igdumdim32.dll
    Driver Version:  20.19.15.4352
    DirectX Driver Version:  20.19.15.4352
    Driver Date: 12 15 2015
    OpenGL Version: 4.4
    Desktop Color Depth: 32 bits per pixel
    Monitor Refresh Rate: 60 Hz
    DirectX Card: Intel(R) HD Graphics 530
    VendorID:  0x8086
    DeviceID:  0x1912
    Revision:  0x6
    Number of Monitors:  1
    Number of Logical Video Cards:  1
    No SLI or Crossfire Detected
    Primary Display Resolution:  1920 x 1080
    Desktop Resolution: 1920 x 1080
    Primary Display Size: 26.65" x 15.00" (30.55" diag)
                                            67.7cm x 38.1cm (77.6cm diag)
    Primary Bus Type Not Detected
    Primary VRAM: 1024 MB
    Supported MSAA Modes:  2x 4x 8x 16x 

Sound card:
    Audio device: Speakers (Realtek High Definiti

Memory:
    RAM:  16258 Mb

VR Hardware:
    VR Headset: None detected

Miscellaneous:
    UI Language:  English
    Media Type:  DVD
    Total Hard Disk Space Available:  119899 Mb
    Largest Free Hard Disk Block:  14472 Mb
    OS Install Date: Jan 01 1970
    Game Controller: None detected
    MAC Address hash: [censored by me]

Storage:
    Disk serial number hash: [censored by me]
    Number of SSDs: 0
    SSD sizes: %s1
    Number of HDDs: 0
    HDD sizes: %s1
Computer Information:
    Manufacturer:  Notebook                        
    Model:  P775DM3(-G)                     
    Form Factor: Laptop
    No Touch Input Detected

Processor Information:
    CPU Vendor:  GenuineIntel
    CPU Brand:  Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
    CPU Family:  0x6
    CPU Model:  0x5e
    CPU Stepping:  0x3
    CPU Type:  0x0
    Speed:  4008 Mhz
    8 logical processors
    4 physical processors
    HyperThreading:  Supported
    FCMOV:  Supported
    SSE2:  Supported
    SSE3:  Supported
    SSSE3:  Supported
    SSE4a:  Unsupported
    SSE41:  Supported
    SSE42:  Supported
    AES:  Supported
    AVX:  Supported
    AVX2:  Supported
    AVX512F:  Unsupported
    AVX512PF:  Unsupported
    AVX512ER:  Unsupported
    AVX512CD:  Unsupported
    AVX512VNNI:  Unsupported
    SHA:  Unsupported
    CMPXCHG16B:  Supported
    LAHF/SAHF:  Supported
    PrefetchW:  Unsupported

Operating System Version:
    Windows 10 (64 bit)
    NTFS:  Supported
    Crypto Provider Codes:  Supported 311 0x0 0x0 0x0

Video Card:
    Driver:  NVIDIA GeForce GTX 1060
    DirectX Driver Name:  nvldumd.dll
    Driver Version:  30.0.14.7196
    DirectX Driver Version:  30.0.14.7196
    Driver Date: 8 27 2021
    OpenGL Version: 4.6
    Desktop Color Depth: 32 bits per pixel
    Monitor Refresh Rate: 75 Hz
    DirectX Card: NVIDIA GeForce GTX 1060
    VendorID:  0x10de
    DeviceID:  0x1c60
    Revision:  0xa1
    Number of Monitors:  2
    Number of Logical Video Cards:  2
    No SLI or Crossfire Detected
    Primary Display Resolution:  1920 x 1080
    Desktop Resolution: 3840 x 1080
    Primary Display Size: 15.04" x 8.46" (17.24" diag)
                                            38.2cm x 21.5cm (43.8cm diag)
    Primary Bus: PCI Express 16x
    Primary VRAM: 6143 MB
    Supported MSAA Modes:  2x 4x 8x 

Sound card:
    Audio device: Speakers (Realtek High Definiti

Memory:
    RAM:  32725 Mb

VR Hardware:
    VR Headset: None detected

Miscellaneous:
    UI Language:  English
    Media Type:  Undetermined
    Total Hard Disk Space Available:  1702112 Mb
    Largest Free Hard Disk Block:  191166 Mb
    OS Install Date: Jan 01 1970
    Game Controller: None detected
    MAC Address hash: [censored by me]

Storage:
    Disk serial number hash: [censored by me]
    Number of SSDs: 3
    SSD sizes: 960G960G500G
    Number of HDDs: 0
    HDD sizes: %s1

Posted in Totally pointless.


Linux commands to find the number of CPU cores

nproc will just output the number of cores, nothing more. Actually, with multi-threading it counts the number of logical cores, not physical ones. So for instance, on an i7-6700, which is a quad core CPU with hyper-threading, I guess it would show 8 processors.

lscpu gives a lot more details about the CPU. It’s like, a recap of cat /proc/cpuinfo, with just one big section combining all cores. Example output:

Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   48 bits physical, 48 bits virtual
CPU(s):                          8
On-line CPU(s) list:             0-7
Thread(s) per core:              2
Core(s) per socket:              4
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       AuthenticAMD
CPU family:                      23
Model:                           49
Model name:                      AMD EPYC 7R32
Stepping:                        0
CPU MHz:                         3272.959
BogoMIPS:                        5599.72
Hypervisor vendor:               KVM
Virtualization type:             full
L1d cache:                       128 KiB
L1i cache:                       128 KiB
L2 cache:                        2 MiB
L3 cache:                        16 MiB
NUMA node0 CPU(s):               0-7
Vulnerability Itlb multihit:     Not affected
Vulnerability L1tf:              Not affected
Vulnerability Mds:               Not affected
Vulnerability Meltdown:          Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:        Mitigation; Full AMD retpoline, IBPB conditional, IBRS_FW, STIBP conditional, RSB filling
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Not affected
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp l
                                 m constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes
                                  xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch topoext ssbd ibrs ibpb stibp vmmcall fsgsbas
                                 e bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 clzero xsaveerptr rdpru wbnoinvd arat npt nrip_save rdpid

cat /proc/cpuinfo, which I mentioned above, give details about each logical core. Compared to lscpu, it has some additional details, and some missing ones as well. Example partial output (I just copied the 2 last cores), from the same CPU as the previous output:

processor       : 6
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 49
model name      : AMD EPYC 7R32
stepping        : 0
microcode       : 0x8301034
cpu MHz         : 3253.736
cache size      : 512 KB
physical id     : 0
siblings        : 8
core id         : 2
cpu cores       : 4
apicid          : 5
initial apicid  : 5
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch topoext ssbd ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 clzero xsaveerptr rdpru wbnoinvd arat npt nrip_save rdpid
bugs            : sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass
bogomips        : 5599.72
TLB size        : 3072 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management:

processor       : 7
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 49
model name      : AMD EPYC 7R32
stepping        : 0
microcode       : 0x8301034
cpu MHz         : 3254.011
cache size      : 512 KB
physical id     : 0
siblings        : 8
core id         : 3
cpu cores       : 4
apicid          : 7
initial apicid  : 7
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch topoext ssbd ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 clzero xsaveerptr rdpru wbnoinvd arat npt nrip_save rdpid
bugs            : sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass
bogomips        : 5599.72
TLB size        : 3072 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management:

Posted in Linux, published drafts.


aToad #30: draw.io / diagrams.net

FLOSS (Apache-2.0) software to make flowcharts, workflows, UML graphs, etc

Remember about Dia? Or about BOUML and its (epic and messy) history? Did you end up using Inkscape, LibreOffice Draw, or worse Google Draw because those weren’t really that convenient?

Well, I recently had enough of all these and looked again. I quickly found draw.io (aka diagrams.net, its new name). It’s based on Electron, which I’m generally not a fan of, but which in this case (UI-centric software, basically no backend) makes perfect sense. It also allows them to provide a web version, so you can give it a try without installing it.
Since I mentioned installing, another thing is that they provide both an installer and a “no installer” version. I didn’t try the latter, but I suspect it’s one of those Electron default craps that dump installed files into %AppData%, while the installer is, for once, a “normal” installer that lets you choose where to install (and that’s pretty much the only choice you need to do while running it).

The software itself is convenient, I find it easier to use than Dia. It comes with a bunch of templates, none of which I used but that gave me a look at all the various styles of diagrams that can be created with it. They include lots of commonly used pictures: for instance for AWS (Amazon Web Service), which I have to use at work, they include basically the icons of every service, which is great to make infrastructure workflows. They have the same for Azure and Google Cloud, also icons for MariaDB, MySQL, PHP, Apache, etc. Long story short, you probably won’t ever have to import your own pictures, unless you really want to.

I can’t share a screenshot because all I have at the moment is a workflow from work, but again you can just try it online directly. You can even view the templates there, only they don’t jump at your face by default, so if you want to see them you need to go to File -> New, and there you’ll get the templates.

Posted in A Tool A Day, programming.


If you’ve never looked at your local site storage… maybe you should

I’m a very moderate Telegram user, mostly because a community I’m part of uses it as its central communication platform. And I really really prefer computers to smartphones, so I use the web version of Telegram rather than the phone “app” most of the time.
And long story short, one day it just refused to launch. No error nothing, just a blank page.

So I opened the console (reminder: in Firefox that’s CTRL+Shift+I), and was greeted with a not very inspiring “DOMException: The quota has been exceeded.” error message. I quickly found it was about local storage of site data. So I opened this (basically, just go to Firefox settings, search for “data” and click “Manage Data…”). And it immediately struck me: Telegram was storing 2 whole freaking GBs of data. Which apparently is the (way too generous) default limit. What the hell those data were, I have no idea. Particularly since Telegram always appears to lose downloaded media from one session to the next, and even my settings as far as one of the versions (I think Telegram Z) is concerned. Funny thing: in the past, apparently local storage was by default limited to 5-10MB per site. Which seems already quite decent, for instance 20MB is enough for all but 10 sites in my (long) list of sites with stored data.

Anyway, taking a step back, I realized that Telegram wasn’t the only site storing an indecent amount of data. And that my Firefox profiles had reached a total size of over 7GB… What a mess. (NB: deleting the data for a given website does decrease profile size by that many bytes, and at the end of my cleanup I had gotten as low as 2GB)

Before cleaning that up, here’s a list of domains that I caught with way too insane local site data:
– telegram.org: 2 GiB, limit reached, yikes
– slack.com: 1.6 GiB, I guess this one was racing with Telegram for the win…
– cpy.re: 750 MiB 😮 and a special mention because it’s a site I didn’t even remember visiting, and it was a long time ago (I think it was about 3 years ago). It’s a blog from the creator of Peertube… did he sneak data there to use my browser as a peer or something? Also this made me realize that the data doesn’t seem to ever expire…
– homecomputing.fr: 197 MiB 2 years ago, it appears the website doesn’t even exist anymore but it still has all that crap in my storage
– tvlibertes.com: 87 MiB half a year ago. I wonder what the hell they can store considering they’re basically just a list of links to their Youtube-hosted videos
– epicgames.com: 46 MiB, not only their desktop client is crap but their website is too, apparently
– framatube.org: 40 MiB 8 months ago, okay for this kind of distributed video site, I get usage can get somewhat high. They’re still below the crazy above-mentioned ones though…
– bittube.video: 33 MiB a year ago – ditto
– peer.tube: 25 MiB 6 months ago – ditto again
– fastmail.com: 20 MiB, fair enough I get that they have stuff to store for improved performance, and I use them all the time

I’m cutting the list there because then it gets a bit pointless (and tedious), but I still see many sites with a significant amount of data, like, somewhere between 1 and 20 MiB. Without any good reason and/or with a last visit a very long time ago. For instance, korben.info, 15 MiB 3 years ago for an IT blog, are you kidding me?

I have yet to find a way to get old storage in check. But if you want to at least avoid getting in the situation where one or 2 websites go really, really wild on storage behind your back, Firefox has a hidden setting for it: in about:config, change the value of browser.sessionstore.dom_storage_limit, which by default is 2048 (so I assume it’s in MiB).
Based on my above-listed observations, a value of 50 should be way enough for any normal use, and you can probably lower this to about 25 MiB to catch a few more dirty websites without causing too much extra hassle.
That being said, I set it myself to 50 MiB and… websites still manage to exceed it (Slack went really fast back to 66 MiB…). So… to be continued? If you found a solution, I’d be glad to hear it in the comments as well!

Update 2021-09-13

A little addendum from my work PC (and actually it applies to my home PC as well, I just forgot to mention it): some sites in the list appear to be tracking sites, with recently (or very recently) updated data even though you’ve never directly visited them. For instance this morning I found spokeo.com with about 40MB of data, updated minutes ago (i.e. when I reopened my session). And when I manually loaded it, magically it removed most of it… I didn’t even know this site until now, yet it had crapped a significant amount of data into my browser profile, yay :s For good measure, I added it to the block list (“manage exceptions” => block”).

Also I noticed that sites with no stored data (but only cookies) will show as last accessed at the start of your session. Not very convenient to remove old stuff, sadly.

Posted in Firefox.


Cheap virtual number providers to receive SMS (Twilio and alternatives)

The web has become a privacy nightmare, and one of the causes of this is that so many websites are so comfortable with demanding that users provide them with a phone number. So naturally, I’ve started looking into ways to get alternative numbers.

It’s no news that, even though mobile plans often include them with almost no limits (the notable exception being the number of unique recipients you are allowed per month), SMS APIs are bloody expensive. However while I get why renting a number and sending texts can’t be free, I don’t see why receiving couldn’t be a lot cheaper, if not fully free. I’ll focus on receiving costs, since this receive-only is your typical use-case when getting a number to deal with websites that require SMS validation.

I was surprised to see how complicated the pricing tables are. In particular, there is often a base price and a surcharge depending on the carrier, not only when sending but also sometimes when receiving. For the sake of brevity (and for my own sanity…), I’ll just list the price that seems to be the one I’d be most likely to pay. Note that I listed them here in the order I found/browsed them, not in my order of preference.

Twilio

To the best of my knowledge, the usual “reference” for SMS APIs is Twilio. Let’s start with it:

Frankly, that receiving fee is an outrage. We see that carriers charge the sender for accepting their SMS, and to my knowledge I’ve never seen a carrier charging their customer for receiving an SMS. I would understand a small fee to cover API costs and whatever, but paying as much for receiving as for sending… This sounds like a bad joke…

Vonage (and Nexmo)

As far as I understood, those 2 merged not that long ago.
They also get a special mention. I had been sitting on writing this post’s draft for a few months, meaning I prepared the data at the time, but as often postponed composing it until now. And guess what happened in the meantime… they increased the sending and receiving prices by 5 cents per SMS, and the monthly fee per number by 8. I guess I didn’t wait for nothing.

Plivo

Finally one with free SMS reception (although a carrier fee may apply depending on the carrier, namely for Sprint and T-Mobile). Also, on the opposite to the previous one, it seems that they lowered their price since the time when I did my draft. Nice.

Bandwidth

They seemed to be the cheapest, however it looks like they only take business customers. Not sure if they have a minimum volume requirement or not.

Sinch

This one felt a bit special… I didn’t really understand the pricing nor the documentation… It seemed more expensive than the others, so I didn’t really try hard either.
Here are just a couple of links:

Voxbone

They don’t communicate their prices publicly and it seems they set a minimum volume (Monthly Minimum Contract – MMC)… Not really what I was looking for, but I have no idea if they have good prices or not if you happen to reach the volumes they want. Their pricing page is there.

Telnyx

Another one with free receiving, yay. The monthly cost of the phone number is a tiny bit higher though, but stays reasonable.
I got a bit triggered by the fact that they charge first for the phone number and then again to “enable SMS” on it (and they hide this little “extra” deep into footnotes, that’s low). On the other hand, that’s not what I was looking for, but they seem the cheapest to send SMS (if your volume is high enough to compensate for the more expensive number rental). Beware for the crazy carrier fee of Lleida though.

  • Pricing page
  • API documentation on inbound SMS
  • Monthly fee for a number: $1.10 / month ($1 base + $0.10 to have SMS: “An additional charge of $0.10 / mo applies to add SMS and MMS capabilities to a number”)
  • Sending an SMS: $0.0025 + carrier fee ($0.0020 to $0.0400 for Lleida)
  • Receiving an SMS: $0, and apparently no carrier fee

Infobip

The last in my list, doesn’t seem to be appropriate for my use, they give a price for sending SMS but not receiving. No pricing either for renting numbers. It seems to be targeted at companies who want to run a support center or ad campaigns.

That’s all folks. I haven’t actually used any of those in the end (yet), but at least, when I need to, I’ll have a starting point now.

Edit: some more ideas: https://www.simform.com/twilio-alternatives/

Posted in Uncategorized.


How can I disable suggestions when adding a new phone contact?

My 2 latest phones have been some cheap Samsungs, they are great for what I do (i.e., phoning, texting, and OsmAnd) except for one thing: whenever I add a contact, when I type their name and their number, my screen gets flooded with suggestions from my existing contacts.

This is a major annoyance to me, and I think it should be for anyone who cares a bit about privacy, as this means whoever is looking at my screen (typically the person from which I’m taking the number) gets to see a bunch of names from my contacts. NOT COOL. Sure, I can hide the screen to this person, but how asocial and unfriendly is this? Plus I typically want that person to see what I’m typing, in order to live-correct any typo I might do.

To my great surprise, I found very, very few people talking about this online. Mainly, I just found this post from 4 years ago, “How to disable suggested contacts when adding a new phone contact“, and that’s it. I note that this person has a Samsung phone as well, and I don’t remember experiencing the issue on my previous non-Samsung phones… so it could be specific to Samsung’s version of the contact manager.

My “solution” was to install a different contact manager. Namely, Simple Contacts Pro, which is FLOSS and, as such, available on F-droid. I’m not thrilled, because I find it globally inferior to the default contact manager, but at least it got me rid of the damned suggestions.

So, while keeping that solution in mind, here are 2 open questions for you:
1) Can the Samsung contact app be configured not to show those damned suggestions?
2) Not related to this post, but how can I configure the contact app (Samsung’s, my replacement, or even some other one) to format phone numbers properly? By this I mean, when I type “+33123456789”, show the country-specific formatting, which here would be “+33 1 23 45 67 89”. I have this on my previous phone, but not on my current one, despite both of them running the same Android major version (through OTA updates). I assume there’s some setting hidden somewhere, which had simply a different default value between my 2 phones… I just can’t figure out where the hell it is.

Posted in Uncategorized.


SyntaxError: Cannot use import statement outside a module (NodeJS / TypeScript)

I’ve been using TypeScript for about 5 years, and until now, I had been stuck to compiling to the ES5 target, because any time I would try something more recent, I would get an error saying: “SyntaxError: Cannot use import statement outside a module”.
This didn’t seem like a big deal, because TS is convenient in that it keeps your always newer code compatible with old JS standards, but still I finally decided to dig a little.

The first interesting thing I found was this. Basically, it says “In your package.json file, simply add “type”:“module””. That lead nowhere, however, while typing it, I noticed the only other alternative to “module” was “commonjs”.

Digging a bit more, I found that tsconfig has a similar parameter, called “module”. So I tired setting it to commonjs and… it worked. Looking back at it, this value was in the community base tsconfig for Node 14, meh. Should have just tried that in the first place. Anyway, here’s my current tsconfig:

{
  "compileOnSave": true,
  "compilerOptions": {
    "target": "es2020",
    "module": "commonjs",
    "allowSyntheticDefaultImports": true,
    "noImplicitAny" : true,
    "strictPropertyInitialization": true,
    "strictNullChecks": true,
    "esModuleInterop": true,
    "lib": [
      "es2020"
    ],
    "skipLibCheck": false,
    "alwaysStrict": true,
    "removeComments": true,
    "typeRoots": [
      "node_modules/@types"
    ],
    "moduleResolution": "node",
    "baseUrl": ".",
    "paths": {
      "*": [
        "*",
        "C:/Users/myaccount/AppData/Roaming/npm/node_modules/*",
        "/usr/local/lib/node_modules/*"
      ]
    }
  },
  "exclude": [
    "node_modules"
  ]
}

Posted in JavaScript / TypeScript / Node.js, web development.


How to enable SSH (+/- root) password login

In recent Linux server distribs provided by dedicated server or VPN hosts, root login is often disabled, as well as password login. It doesn’t really improve security as long as you don’t use crappy passwords, and it’s one hell of an inconvenience. Restoring those is however easy (it’s also easy to find, but I prefer to keep my own copy here ^^):

sudo nano /etc/ssh/sshd_config

In it, set:
PasswordAuthentication yes
PermitRootLogin yes

Then restart the SSH daemon. For this 2 possible commands:
– I’ve always used sudo /etc/init.d/ssh restart
– I’ve also seen sudo service ssh restart

Also, don’t forget sudo passwd root to set the root password 😉

Posted in Linux.