Skip to content


aToad #31: pdfescape, pdf2png, ilovepdf

Online services (“SaaS”, yuck) to edit, convert, split, merge, etc. PDF files

In my opinion, PDF is the most toxic file format ever. Not that it’s not convenient to share files that truly don’t need to be edited ever: that’s what it was created for, and at that it is decent enough. But so many people and companies use it all the fucking time to distribute bloody forms, which, as the name implies, will for sure need to be edited.

Of course, if you have the money and disk space to waste (and don’t mind installing software that poops all over your computer), you can get the official Acrobat Pro or Standard software for around 25$ a month (subscription-based local software, even more yuck than SaaS). Or they also do sell rent a SaaS version indeed. But unless you spend your days manipulating someone else’s PDFs, you can probably manage with a bunch of free tools.

I didn’t make an exhaustive comparison, the following are mostly the first tools that I found and that were fit for the job and/or tools that friends recommended me, but let’s say I’m happy enough with them. As happy as I can be when a dickhead shoves a PDF down my throat anyway.

  • PDF Escape: a PDF editor with all the basic features I ever needed: add text, fill form fields, add pictures. The user interface isn’t that great and there are a few bugs (notably, last time I used it, the whiteout zones didn’t appear in the final PDF when I opened it in Sumatra), but still they’re not major bugs and it works fine in Firefox.
  • PDF to PNG: as the name suggests, useful to convert a PDF to a PNG render. Damn useful because the assholes who give you PDF forms often want you to print them and scan them. It’s 2022 and I don’t have a printer, money is better spent elsewhere. That site also has a few other converters and tools, like PDF to and from DOC, JPG, PNG, a PDF compressor (this one is also nice for when people give you huge PDFs to send them back but put a silly low size cap on the form to send it back) and a PDF combiner / merger
  • I Love PDF: what an ironic name. Has all the tools of the previous 2 (except the PDF to PNG conversion, it only does JPG for some reason) and more, notably splitting a PDF and extracting or reordering pages

Last but not least, obviously there are privacy/security concerns with uploading your data to someone else’s computer. It’s obvious but it has to be said.
Unfortunately, I’m not aware of good and free PDF editors that you can run locally, although I was able to do some really nice edits with Inkscape… at the cost of spending way more time on it than I wish I had: that’s a tool for when you need to edit a PDF in a way that it looks like it hasn’t been edited, not for when you just need to fill a form. But otherwise, you can find tools, like PDF Suite 2021, that sell a lifetime license at the price of once month of Acrobat subscription, so that could be worth the try.

Posted in A Tool A Day, Adobe.


Unbanning an IP from fail2ban

TL;DR

fail2ban-client set [jail name] unbanip [the IP]
for instance
fail2ban-client set sshd unbanip 123.123.123.123

Details

It’s this time of the year again. Time to get a new VPS or dedicated server, put the latest LTS Ubuntu on it, and configure it as close as possible to the one I set up X years before in order to then migrate. Of course, usually, “as close as possible” still means finding wtf happened to the configuration options and features you were using before, if not wtf happened to whole pieces of software…
Anyhow, in this process, I sometimes get a bit lost in what accounts exist, what credentials they use and, after one too many tries, end up banned by fail2ban. I could just wait it out, but this time I figured, it’s my server I should unban myself damnit.

The short version is:
1) if you are the one banned, get an alternative access to the console. For instance you could use Webmin. Or a VPN, or your phone connection to log in to SSH from another IP.
2) list jail names:
fail2ban-client status
3) decide which one issued the ban (should be easy if you got your own self banned, otherwise see longer version below)
4) unban the IP:
fail2ban-client set [jail name] unbanip [the IP]
For instance, if you got banned while logging in to SSH from IP 123.123.123.123:
fail2ban-client set sshd unbanip 123.123.123.123

Longer version / some more details:
Check if the IP is banned in iptables (NB: for some reason, for me iptables didn’t list all the IPs that could be listed directly from fail2ban-client status [jail name], so if you can’t see the IP you’re looking for here here, I guess just move on to the other options):
iptables -n -L
and/or check the ban logs:
sudo zgrep 'Ban' /var/log/fail2ban.log*
(or just the latest logs, which should usually be enough)
sudo zgrep 'Ban' /var/log/fail2ban.log
(or just the end of it)
tail /var/log/fail2ban.log
The log should mention the jail name as well. If unsure, use fail2ban-client status to list jail names.
You can also use fail2ban-client status sshd to check the list of banned IPs for one particular jail (here sshd)

Sources

Fail2Ban: how to unban IPs that are blocked?
Linux: Iptables Find / Check Banned IP Address

Posted in Linux, servers.


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.