triptico.com

Un naufragio personal

OpenBSD in a laptop, part 3

And while I was deep diving into OpenBSD 6.6 [1, 2], OpenBSD 6.7 came to life.

I thought it was a great opportunity to learn how version upgrades work under OpenBSD. This is always a hairy process; a full-system upgrade has to take so many things into account, as every system is a unique one.

Of course, there is a detailed 6.7 upgrade guide. From it I learned that this used to be a complicated process (downloading a special kernel, boot from it...) but it's no longer: there is a tool aptly named sysupgrade that makes it much easier.

In the guide I was instructed to delete a user/group (that I didn't have) and to check for available disk space. Everything was fine so I ran the sysupgrade tool and it downloaded the new system, made me reboot into a special kernel, did many system-upgrade-y things, rebooted again and I found myself with a brand-new OpenBSD 6.7 system.

I still needed to manually execute syspatch (I remember a set of patches being mentioned in the previous step, I don't know why they weren't automatically installed) and of course pkg_add -u. I did this from a console because I didn't want unnecessary jump-scares from the GUI.

Summarizing: the 6.6->6.7 upgrade process is smooth, quick and without glitches nor surprises. Again, kudos to OpenBSD people, you are awesome.

Given that I don't plan to continue these post series, I finally decided to stop intentionally delaying the setup of the CUPS printing system, so I run

pkg_add cups gtk+3-cups hpcups

My printer is an HP OfficeJet 6960 (connected by Ethernet to my local network), that's why I installed hpcups. I then needed to configure CUPS to run at system startup, so this is how my /etc/rc.conf.local ended up looking:

xenodm_flags=
multicast=YES
pkg_scripts="messagebus avahi_daemon cups_browsed cupsd"

I connected to the CUPS system web interface at localhost:631 with a browser and spent the usual huge amount of time finding the correct combination of connection type, printer model, small mammal sacrifice and PPD file until I found the one that worked (color do not look OK, though). Man do I hate CUPS. Concerning OpenBSD, this was not worse than in any other CUPS-infected system.

I also installed LibreFuckingOffice. Yes, I hate it too. I hate many, many things.

Regarding Bluetooth: I checked this laptop's specs and it does not have a Bluetooth chip, so I decided to buy a Bluetooth USB dongle, as they are cheap and capable these days. But then I learnt that OpenBSD does not support Bluetooth; it used to (at least partially), but because of lack of hardware drivers or security issues or whatever they dropped it. I think this is a mistake, but who am I to disagree. No Bluetooth headphones for Ángel in this machine, go listening to your crappy music somewhere else.

Anyway, my final opinion is that OpenBSD still fucking rocks. This great software project accepts and needs donations, so I did mine.

OpenBSD in a laptop, part 2

This is a followup to my previous post, where I accounted my experience of installing and working with OpenBSD on a laptop. This new post is less of an article but an enumeration of things I consider remarkable.

Suspending to memory works out of the box. I didn't have to do anything. I remember this used to be a nightmare under Linux, but probably also works there these days; I simply don't know because is one of the first things I disable. I don't like it: my computers are either running or switched off. I don't want my machines to stop doing things because an arbitrary slice of time has passed. Anyway, kudos to OpenBSD developers because this is a feature that is very hard to do well.

I don't remember where I got that idea, but I thought that the only locale that worked in OpenBSD is en_US.UTF-8. I was wrong: I've set it to es_ES.UTF-8 and haven't found any issue yet. Unicode support in the text console is crap but who cares about that.

I also found that locale support in the regular expression library is incomplete: maybe I'm too accustomed to GNU regex. I had to resource back to the usual but not-really-ok /[A-Za-z\xc0-\xff]+/ to match words using the latin alphabet with possible diacritics.

I've worked unplugged for two hours and apm still reports a battery charge of 18%, impressive for a second hand laptop.

After looking at /var/log/messages and ~/.xsession-errors I found that some applications were complaining about being unable to connect to dbus, so I installed it. In /usr/local/share/doc/pkg-readmes/dbus said that I must add the following to my .xsession:

eval `dbus-launch --sh-syntax --exit-with-x11`

That was not enough, though: I also needed to add the following to /etc/rc.conf.local (I don't remember where I read about this):

pkg_scripts="messagebus"

After rebooting, the MATE battery applet appeared in the upper right corner.

I also read here that to be able to shutdown the machine from the MATE desktop menu I had to add my user to the operator group:

doas usermod -G operator angel

And magically a new option to shutdown the machine appeared in the menu.

I still haven't tried installing CUPS and printer support. Printers and I do not play well, so I'm intentionally postponing that moment because I'm sure it will be hell.

As an overall impression, I'm still pretty happy and satisfied with this OpenBSD experience.

The following are links to pages I found useful:

They win 4/1 against me in the issue "on a laptop vs. in a laptop". Meh. Fuck English prepositions.

And a final note: in my previous post I said that the vi text editor is for weenies and some people got offended and outraged. Well, there is nothing intrinsically bad in vi, except for the whole concept itself. Make no mistake: I've used that awful thing since my first experience with UNIX machines in 1987 or 1988, so it's not that I'm new to it or don't understand it or something like that (I'm a competent vi user, for that matter). But real programmers use a text editor written by themselves or the real one, ed. Take this last sentence as a joke or not.

OpenBSD in a laptop

I recently purchased a second hand HP EliteBook 820 G1 laptop and installed OpenBSD 6.6 on it. In this document I write about the installation process and how it feels working on it.

This machine is a Core i5 from 2014, it has 4GB of memory, a 320GB disk, a 12" screen and Ethernet and Wireless interfaces, so it's a rather capable machine. I have 30+ years of experience in UNIX machines but it's the first time I installed OpenBSD in a real computer.

I copied the miniroot66.fs (downloaded from OpenBSD site) from my Linux machine into a pendrive using dd, inserted it into the HP and switched it on. It booted directly from USB; I have to change that.

The installation process is non-graphic and straightforward. After booting, it asked what I wanted to do and I said install; then it asked for my keyboard layout (es) and a host name and then proceeded to network configuration. It detected three devices: em0 iwm0 vlan0, querying info for the first one (Ethernet) by default. I configured it to use DHCP and it worked without hassle. I then proceeded to configure the Wireless LAN: it asked me for the SSID, encryption type and password, but failed because it didn't find the board firmware. My plan is to use this I/F as its main connection, but lets work with Ethernet by now.

I entered the requested information about a domain name, the nameservers (left the ones it got automatically), a password for root, if I want to start sshd by default (of course I want), if I want the X Window System started by xenodm. I changed the default answer to yes. I then setup my user account, answered if I want root ssh login (of course NOT), set my timezone (correctly autodetected as Europe/Madrid) and the installation process continued to main storage configuration.

I told it to use whole disk GPT partitioning and, in a traditional UNIX fashion, it offered me a suggestion for a multiple (9!) partition configuration. Yes, very cool, but I had awful experiences in my past on SunOS, IRIX and ULTRIX systems failing in strange ways while updating or compiling or working because a partition like /usr/local gets full while others like /usr/X11R6 have plenty of space. So thanks, but no, thanks, so I opted for a Custom partition layout.

The partition editor is an old-fashioned one, so I'm familiar with the procedure. I wanted to have all data in the same partition and leave the end of the disk for swap. So I typed a to create a new partition, accepted name a for it (OpenBSD names partitions this way, being c reserved for the whole disk), accepted the default offset, set its size to almost all available space (reserving the end for swap), accepted the default type of 4.2BSD and set the mountpoint to /. I created a second partition and accepted all defaults, as it correctly inferred that I wanted to create a swap partition. Typed q to exit saving and it started the filesystem creation process.

The procedure continued to the downloading and installation of the sets (system software bundles). I chose http, no HTTP proxy and the suggested server and directory. All sets were marked for installation, which is what I wanted, so I moved on. It downloaded all sets and installed them.

After that, it did some some things like choosing a multiprocessor kernel and relinking it and congratulated me for my successful installation. It wanted to reboot, so I did it.

After rebooting and (expectedly) barfing about failures in the Wireless I/F, it detected that it needed to download some additional firmware, specifically iwm-firmware interl-firmware uvideo-firmware inteldrm-firmware. It download and installed them and then it said that the CPU microcode was updated, available on reboot.

The graphic system started without problems. An ugly X login dialog with the cute OpenBSD fat fish was shown; this is xenodm, an OpenBSD rewrite of the ancient X tool. The OpenBSD guys do not hesitate in heavy patching or rewriting essential software tools if they find them faulty or insecure and this is one of the cases.

So I entered my user and my password and the classic fvwm Window Manager was shown. Ha ha ha how cute those were the days but NO. I will change this as soon as possible, but I need to fix the Wifi issue first.

Firmware updates are done with the fw_update tool, which was run just before; running it again said that there were no new files to download, which is expected. I ran ifconfig to see if my Wireless card had an IP address, but it didn't. I executed sh /etc/netstart, the script that calls dhclient on the configured interfaces, but my iwm0 had "no link". Executing ifconfig iwm0 scan showed a long list of Wireless access points, including mine, so the hardware seems to work. I rebooted to take a look at the kernel log lines about firmware, but there were no errors, just again a "no link". I looked closely at the output of the scan subcommand again and it said !wpakey: I double checked the information at /etc/hostname.iwm0 and discovered I mistyped the password. Fixed it, rerun the network setup script and my wireless got an IP almost immediately. I'm such a bonehead.

Before moving further, the syspatch utility must be run; it checks, downloads and installs any security patches for the current system. There were a bunch of them. A kernel relinking was done. I rebooted.

I logged in (OMFG this fvwm awful thing again I have to change it) and then proceeded to do my most basic configuration steps, so I copied my ssh and tmux setup from the server. It also seems that the locale is not configured by default, so I added export LANG=en_US.UTF-8 to my ~/.profile.

The first thing I do on new systems is to compile and instally my text editor Minimum Profit because, you know, I eat my own dog food and vi is for weenies. OpenBSD comes with a full UNIX development kit; the only thing not already available was the git tool.

Up to now, all installed software is an official part of the OpenBSD system. Anything else is available as a package, installed and configured into /usr/local. This may surprise you if your experience comes from Linux distributions, where everything is treated the same.

Package installation is done with the pkg_add utility. So, typing pkg_add git downloads and installs the thing and its dependencies. You can search for available packages by typing pkg_info -Q followed by the partial name of a package. Without arguments, pkg_info lists the already installed packages. Packages can be updated by typing pkg_add -u.

So I compiled and installed my text editor and set the appropriate EDITOR variable in ~/.profile. This is starting to look fine.

OpenBSD doesn't have sudo, but a similar and simpler tool named doas. I configured it to work for me by typing echo 'permit persist keepenv angel' > /etc/doas.conf.

So it was time for installing a more modern desktop system: doas pkg_add mate mate-utils mate-extras did it. A fuckton of packages were downloaded and installed (I even had to choose between two flavours of unzip, go figure). After that, df -h reported a disk usage of 3.4G. Not bad. I see a total size of 462G. What? When I bought this laptop it said 320G. Let's hope it's not a bug that will spectacularly crash the system trying to write beyond the disk's boundaries.

The MATE desktop will be launched by xenodm, so it must be configured in the ~/.xsession file. This is the content of mine:

. ~/.profile
exec ck-launch-session mate-session

I import ~/.profile for my environment settings (not very orthodox, I know) and launch mate-session from there. I cargo-culted the ck-launch-session from somewhere; it's a consolekit2 thing that I don't remember what is was for.

So I relogged and found a default MATE desktop configuration. It's snappy, fast and delicious. I then proceeded to do my usual configuration tweaks: changed desktop and terminal themes to something darker, set a wallpaper, configured keyboard shortcuts for workspace switching to Win+number, terminal launch to Ctrl-Alt-T, tile window to east / west corner to Win+left / Win+right and changed the Compose key to Caps-Lock in Keyboard/Layouts/Options.

I also installed Firefox. The web looks fine, even JavaScript-infested behemoths like Facebook. Youtube works fine as well: Tears for Fears are now singing Shout, video flows very smoothly. Sound also works very well, even the Fn+volume keys work. I'm seeing ads in Youtube; though Adblock was automatically installed when I logged into the firefox sync thing it seems to not be working.

My first impression: OpenBSD fucking rocks. The installation is smooth and with very reasonable defaults. Hardware just work out of the box. External package integration is fantastic.

I'll write a followup to this post after some days of work with this machine. I still have to try Bluetooth (does this machine even has it?), external USB mounts and the biggest pain in the pass in UNIX systems: printing and scanning.

Tor

He escrito este email a un amigo sobre cómo configurar Tor para el servicio SSH en clientes y servidores Linux:

[...]

Respecto al cliente (azazel, portátil con Ubuntu): instalar tor y ya está. Desde ese momento corre como un proceso que monta un túnel SOCKS5 en el puerto 9050. Nada más montarlo yo ya puedo hacer:

ssh angel@samael.triptico.com -o ProxyCommand="nc -X 5 -x localhost:9050 %h %p"

Esto lo que hace es abrir una conexión normal ssh pero a través de las múltiples capas de cebolla del Tor, haciéndolo súper-seguro, intrazable y bla bla bla. Es interesante esto:

Last login: Fri Mar 13 08:52:21 2020 from 185.220.103.243

Esa IP no es la mía, sino la de uno de los nodos de salida del Tor. Todo esto ya funciona sin haber instalado aún Tor en samael.triptico.com.

Para un servidor (lucifer, servidor casero con Debian sin puertos abiertos desde el router): instalar tor y abrir un «Tor Hidden Service» añadiendo lo siguiente a /etc/tor/torrc:

HiddenServiceDir /var/lib/tor/ssh/
HiddenServicePort 1234 127.0.0.1:1234

Tras reiniciar tor (1234 es el puerto en el que corre mi SSH) te crea un servicio oculto, lo ha configurado y se lo ha notificado a la red Tor. El contenido de /var/lib/tor/ssh/hostname es:

tlnm26rl4fskwzzpxzvj25slznioajxv4afi2yb6a4fjkceraguvvaqo.onion

Mola, ¿eh? (apunta, que te lo dicto). La magia es que eso ya es accesible desde el mundo exterior con algún cliente que tenga instalado Tor:

ssh tlnm26rl4fskwzzpxzvj25slznioajxv4afi2yb6a4fjkceraguvvaqo.onion -p 1234 -o ProxyCommand="nc -X 5 -x localhost:9050 %h %p"

Aunque mola escribir eso todo el tiempo lo propio es configurarlo (tanto el host como el ProxyCommand) en ~/.ssh/config.

El lastlog te mostrará que la conexión ha ocurrido desde 127.0.0.1 (desde el punto de vista del servidor todo llega desde el túnel local).

Ojo a una cosa: la línea de comando del nc es para el de openbsd. Por alguna razón, en Ubuntu tengo el de openbsd pero en Debian el tradicional. He instalado netcat-openbsd en Debian para que todo sea consistente.

Tor proporciona un servicio para saber algo más sobre los «Exit Nodes» en el url https://metrics.torproject.org/rs.html#search/IP_EN_TU_LOG.

Espero que te sirva de ayuda.

Un abrazo,
Ángel

Más: https://www.comparitech.com/blog/vpn-privacy/how-to-set-up-a-tor-hidden-service/

HOWTO compact a Virtualbox disk

In this entry I explain how to compact the Virtualbox hard disk of a virtualized MS Windows 7 running inside a Linux host.

Steps:

1. Run the MS Windows virtual machine and execute the Disk Defragmentation tool. Wait for it to finish.

2. Also from inside Windows, download a command-line program named sdelete from Microsoft (search for it). Run the following command from a console:

sdelete c: -z

This tool supposedly fills with zeroes the full filesystem. It takes a while. Once it finishes, close Windows and exit the Virtualbox GUI.

3. Open a Linux console and move to the directory where your virtual machine files are stored.

4a. If your virtual disk is already in vdi format, run the following command:

vboxmanage modifyhd windows_7-disk001.vdi --compact

And you'll be done.

4b. Instead, if you need to convert the virtual disk from vmdk to vdi, run the following command:

vboxmanage clonehd --format vdi windows_7-disk001.vmdk windows_7-disk001.vdi

Wait for it to finish, open the Virtualbox GUI, select the virtual machine, click on setup, go to storage, select the current vmdk file, click on a little icon resembling a hard disk to the right of the file, click on the virtual hard disk change option and select the new vdi file. This operation also compacts the virtual disk on its way.

Adventures in Unicode's math plane

The Unicode charset has a complete plane (a subset of codepoints) dedicated to the humungous plethora of symbols used in math formula and definitions. For some reason, the creators felt that re-defining the usual latin characters in varios stylings was a necessity. I won't argue on that.

We can benefit from this odd inclusion to use special text effects in places where it's not possible, e.g. social networks. So, given that we have this text snippet:

From George Orwell's 1984:

He gazed up at the enormous face. Forty years it had taken him to learn
what kind of smile was hidden beneath the dark moustache. O cruel, needless
misunderstanding! O stubborn, self-willed exile from the loving breast! Two
gin-scented tears trickled down the sides of his nose. But it was all
right, everything was all right, the struggle was finished. He had won the
victory over himself. He loved Big Brother.

We can play with several styles. For example, using bold serif symbols:

𝐅𝐫𝐨𝐦 𝐆𝐞𝐨𝐫𝐠𝐞 𝐎𝐫𝐰𝐞𝐥𝐥'𝐬 𝟏𝟗𝟖𝟒:

𝐇𝐞 𝐠𝐚𝐳𝐞𝐝 𝐮𝐩 𝐚𝐭 𝐭𝐡𝐞 𝐞𝐧𝐨𝐫𝐦𝐨𝐮𝐬 𝐟𝐚𝐜𝐞. 𝐅𝐨𝐫𝐭𝐲 𝐲𝐞𝐚𝐫𝐬 𝐢𝐭 𝐡𝐚𝐝 𝐭𝐚𝐤𝐞𝐧 𝐡𝐢𝐦 𝐭𝐨 𝐥𝐞𝐚𝐫𝐧 𝐰𝐡𝐚𝐭 𝐤𝐢𝐧𝐝 𝐨𝐟 𝐬𝐦𝐢𝐥𝐞 𝐰𝐚𝐬 𝐡𝐢𝐝𝐝𝐞𝐧 𝐛𝐞𝐧𝐞𝐚𝐭𝐡 𝐭𝐡𝐞 𝐝𝐚𝐫𝐤 𝐦𝐨𝐮𝐬𝐭𝐚𝐜𝐡𝐞. 𝐎 𝐜𝐫𝐮𝐞𝐥, 𝐧𝐞𝐞𝐝𝐥𝐞𝐬𝐬 𝐦𝐢𝐬𝐮𝐧𝐝𝐞𝐫𝐬𝐭𝐚𝐧𝐝𝐢𝐧𝐠! 𝐎 𝐬𝐭𝐮𝐛𝐛𝐨𝐫𝐧, 𝐬𝐞𝐥𝐟-𝐰𝐢𝐥𝐥𝐞𝐝 𝐞𝐱𝐢𝐥𝐞 𝐟𝐫𝐨𝐦 𝐭𝐡𝐞 𝐥𝐨𝐯𝐢𝐧𝐠 𝐛𝐫𝐞𝐚𝐬𝐭! 𝐓𝐰𝐨 𝐠𝐢𝐧-𝐬𝐜𝐞𝐧𝐭𝐞𝐝 𝐭𝐞𝐚𝐫𝐬 𝐭𝐫𝐢𝐜𝐤𝐥𝐞𝐝 𝐝𝐨𝐰𝐧 𝐭𝐡𝐞 𝐬𝐢𝐝𝐞𝐬 𝐨𝐟 𝐡𝐢𝐬 𝐧𝐨𝐬𝐞. 𝐁𝐮𝐭 𝐢𝐭 𝐰𝐚𝐬 𝐚𝐥𝐥 𝐫𝐢𝐠𝐡𝐭, 𝐞𝐯𝐞𝐫𝐲𝐭𝐡𝐢𝐧𝐠 𝐰𝐚𝐬 𝐚𝐥𝐥 𝐫𝐢𝐠𝐡𝐭, 𝐭𝐡𝐞 𝐬𝐭𝐫𝐮𝐠𝐠𝐥𝐞 𝐰𝐚𝐬 𝐟𝐢𝐧𝐢𝐬𝐡𝐞𝐝. 𝐇𝐞 𝐡𝐚𝐝 𝐰𝐨𝐧 𝐭𝐡𝐞 𝐯𝐢𝐜𝐭𝐨𝐫𝐲 𝐨𝐯𝐞𝐫 𝐡𝐢𝐦𝐬𝐞𝐥𝐟. 𝐇𝐞 𝐥𝐨𝐯𝐞𝐝 𝐁𝐢𝐠 𝐁𝐫𝐨𝐭𝐡𝐞𝐫.

Or serif italic:

𝐹𝑟𝑜𝑚 𝐺𝑒𝑜𝑟𝑔𝑒 𝑂𝑟𝑤𝑒𝑙𝑙'𝑠 1984:

𝐻𝑒 𝑔𝑎𝑧𝑒𝑑 𝑢𝑝 𝑎𝑡 𝑡𝑕𝑒 𝑒𝑛𝑜𝑟𝑚𝑜𝑢𝑠 𝑓𝑎𝑐𝑒. 𝐹𝑜𝑟𝑡𝑦 𝑦𝑒𝑎𝑟𝑠 𝑖𝑡 𝑕𝑎𝑑 𝑡𝑎𝑘𝑒𝑛 𝑕𝑖𝑚 𝑡𝑜 𝑙𝑒𝑎𝑟𝑛 𝑤𝑕𝑎𝑡 𝑘𝑖𝑛𝑑 𝑜𝑓 𝑠𝑚𝑖𝑙𝑒 𝑤𝑎𝑠 𝑕𝑖𝑑𝑑𝑒𝑛 𝑏𝑒𝑛𝑒𝑎𝑡𝑕 𝑡𝑕𝑒 𝑑𝑎𝑟𝑘 𝑚𝑜𝑢𝑠𝑡𝑎𝑐𝑕𝑒. 𝑂 𝑐𝑟𝑢𝑒𝑙, 𝑛𝑒𝑒𝑑𝑙𝑒𝑠𝑠 𝑚𝑖𝑠𝑢𝑛𝑑𝑒𝑟𝑠𝑡𝑎𝑛𝑑𝑖𝑛𝑔! 𝑂 𝑠𝑡𝑢𝑏𝑏𝑜𝑟𝑛, 𝑠𝑒𝑙𝑓-𝑤𝑖𝑙𝑙𝑒𝑑 𝑒𝑥𝑖𝑙𝑒 𝑓𝑟𝑜𝑚 𝑡𝑕𝑒 𝑙𝑜𝑣𝑖𝑛𝑔 𝑏𝑟𝑒𝑎𝑠𝑡! 𝑇𝑤𝑜 𝑔𝑖𝑛-𝑠𝑐𝑒𝑛𝑡𝑒𝑑 𝑡𝑒𝑎𝑟𝑠 𝑡𝑟𝑖𝑐𝑘𝑙𝑒𝑑 𝑑𝑜𝑤𝑛 𝑡𝑕𝑒 𝑠𝑖𝑑𝑒𝑠 𝑜𝑓 𝑕𝑖𝑠 𝑛𝑜𝑠𝑒. 𝐵𝑢𝑡 𝑖𝑡 𝑤𝑎𝑠 𝑎𝑙𝑙 𝑟𝑖𝑔𝑕𝑡, 𝑒𝑣𝑒𝑟𝑦𝑡𝑕𝑖𝑛𝑔 𝑤𝑎𝑠 𝑎𝑙𝑙 𝑟𝑖𝑔𝑕𝑡, 𝑡𝑕𝑒 𝑠𝑡𝑟𝑢𝑔𝑔𝑙𝑒 𝑤𝑎𝑠 𝑓𝑖𝑛𝑖𝑠𝑕𝑒𝑑. 𝐻𝑒 𝑕𝑎𝑑 𝑤𝑜𝑛 𝑡𝑕𝑒 𝑣𝑖𝑐𝑡𝑜𝑟𝑦 𝑜𝑣𝑒𝑟 𝑕𝑖𝑚𝑠𝑒𝑙𝑓. 𝐻𝑒 𝑙𝑜𝑣𝑒𝑑 𝐵𝑖𝑔 𝐵𝑟𝑜𝑡𝑕𝑒𝑟.

Please take note that what you see is completely dependent on the fonts you have installed in your system. For example, on my Ubuntu 19.10 I don't see the h letter. I have no clue on why (I also don't give a damn).

There is even a bold+italic set of serif characters:

𝑭𝒓𝒐𝒎 𝑮𝒆𝒐𝒓𝒈𝒆 𝑶𝒓𝒘𝒆𝒍𝒍'𝒔 1984:

𝑯𝒆 𝒈𝒂𝒛𝒆𝒅 𝒖𝒑 𝒂𝒕 𝒕𝒉𝒆 𝒆𝒏𝒐𝒓𝒎𝒐𝒖𝒔 𝒇𝒂𝒄𝒆. 𝑭𝒐𝒓𝒕𝒚 𝒚𝒆𝒂𝒓𝒔 𝒊𝒕 𝒉𝒂𝒅 𝒕𝒂𝒌𝒆𝒏 𝒉𝒊𝒎 𝒕𝒐 𝒍𝒆𝒂𝒓𝒏 𝒘𝒉𝒂𝒕 𝒌𝒊𝒏𝒅 𝒐𝒇 𝒔𝒎𝒊𝒍𝒆 𝒘𝒂𝒔 𝒉𝒊𝒅𝒅𝒆𝒏 𝒃𝒆𝒏𝒆𝒂𝒕𝒉 𝒕𝒉𝒆 𝒅𝒂𝒓𝒌 𝒎𝒐𝒖𝒔𝒕𝒂𝒄𝒉𝒆. 𝑶 𝒄𝒓𝒖𝒆𝒍, 𝒏𝒆𝒆𝒅𝒍𝒆𝒔𝒔 𝒎𝒊𝒔𝒖𝒏𝒅𝒆𝒓𝒔𝒕𝒂𝒏𝒅𝒊𝒏𝒈! 𝑶 𝒔𝒕𝒖𝒃𝒃𝒐𝒓𝒏, 𝒔𝒆𝒍𝒇-𝒘𝒊𝒍𝒍𝒆𝒅 𝒆𝒙𝒊𝒍𝒆 𝒇𝒓𝒐𝒎 𝒕𝒉𝒆 𝒍𝒐𝒗𝒊𝒏𝒈 𝒃𝒓𝒆𝒂𝒔𝒕! 𝑻𝒘𝒐 𝒈𝒊𝒏-𝒔𝒄𝒆𝒏𝒕𝒆𝒅 𝒕𝒆𝒂𝒓𝒔 𝒕𝒓𝒊𝒄𝒌𝒍𝒆𝒅 𝒅𝒐𝒘𝒏 𝒕𝒉𝒆 𝒔𝒊𝒅𝒆𝒔 𝒐𝒇 𝒉𝒊𝒔 𝒏𝒐𝒔𝒆. 𝑩𝒖𝒕 𝒊𝒕 𝒘𝒂𝒔 𝒂𝒍𝒍 𝒓𝒊𝒈𝒉𝒕, 𝒆𝒗𝒆𝒓𝒚𝒕𝒉𝒊𝒏𝒈 𝒘𝒂𝒔 𝒂𝒍𝒍 𝒓𝒊𝒈𝒉𝒕, 𝒕𝒉𝒆 𝒔𝒕𝒓𝒖𝒈𝒈𝒍𝒆 𝒘𝒂𝒔 𝒇𝒊𝒏𝒊𝒔𝒉𝒆𝒅. 𝑯𝒆 𝒉𝒂𝒅 𝒘𝒐𝒏 𝒕𝒉𝒆 𝒗𝒊𝒄𝒕𝒐𝒓𝒚 𝒐𝒗𝒆𝒓 𝒉𝒊𝒎𝒔𝒆𝒍𝒇. 𝑯𝒆 𝒍𝒐𝒗𝒆𝒅 𝑩𝒊𝒈 𝑩𝒓𝒐𝒕𝒉𝒆𝒓.

Isn't it ugly? Some styles have numerals and other don't. Watch out for "double-struck" characters:

𝔽𝕣𝕠𝕞 𝔾𝕖𝕠𝕣𝕘𝕖 𝕆𝕣𝕨𝕖𝕝𝕝'𝕤 𝟙𝟡𝟠𝟜:

𝔿𝕖 𝕘𝕒𝕫𝕖𝕕 𝕦𝕡 𝕒𝕥 𝕥𝕙𝕖 𝕖𝕟𝕠𝕣𝕞𝕠𝕦𝕤 𝕗𝕒𝕔𝕖. 𝔽𝕠𝕣𝕥𝕪 𝕪𝕖𝕒𝕣𝕤 𝕚𝕥 𝕙𝕒𝕕 𝕥𝕒𝕜𝕖𝕟 𝕙𝕚𝕞 𝕥𝕠 𝕝𝕖𝕒𝕣𝕟 𝕨𝕙𝕒𝕥 𝕜𝕚𝕟𝕕 𝕠𝕗 𝕤𝕞𝕚𝕝𝕖 𝕨𝕒𝕤 𝕙𝕚𝕕𝕕𝕖𝕟 𝕓𝕖𝕟𝕖𝕒𝕥𝕙 𝕥𝕙𝕖 𝕕𝕒𝕣𝕜 𝕞𝕠𝕦𝕤𝕥𝕒𝕔𝕙𝕖. 𝕆 𝕔𝕣𝕦𝕖𝕝, 𝕟𝕖𝕖𝕕𝕝𝕖𝕤𝕤 𝕞𝕚𝕤𝕦𝕟𝕕𝕖𝕣𝕤𝕥𝕒𝕟𝕕𝕚𝕟𝕘! 𝕆 𝕤𝕥𝕦𝕓𝕓𝕠𝕣𝕟, 𝕤𝕖𝕝𝕗-𝕨𝕚𝕝𝕝𝕖𝕕 𝕖𝕩𝕚𝕝𝕖 𝕗𝕣𝕠𝕞 𝕥𝕙𝕖 𝕝𝕠𝕧𝕚𝕟𝕘 𝕓𝕣𝕖𝕒𝕤𝕥! 𝕋𝕨𝕠 𝕘𝕚𝕟-𝕤𝕔𝕖𝕟𝕥𝕖𝕕 𝕥𝕖𝕒𝕣𝕤 𝕥𝕣𝕚𝕔𝕜𝕝𝕖𝕕 𝕕𝕠𝕨𝕟 𝕥𝕙𝕖 𝕤𝕚𝕕𝕖𝕤 𝕠𝕗 𝕙𝕚𝕤 𝕟𝕠𝕤𝕖. 𝔹𝕦𝕥 𝕚𝕥 𝕨𝕒𝕤 𝕒𝕝𝕝 𝕣𝕚𝕘𝕙𝕥, 𝕖𝕧𝕖𝕣𝕪𝕥𝕙𝕚𝕟𝕘 𝕨𝕒𝕤 𝕒𝕝𝕝 𝕣𝕚𝕘𝕙𝕥, 𝕥𝕙𝕖 𝕤𝕥𝕣𝕦𝕘𝕘𝕝𝕖 𝕨𝕒𝕤 𝕗𝕚𝕟𝕚𝕤𝕙𝕖𝕕. 𝔿𝕖 𝕙𝕒𝕕 𝕨𝕠𝕟 𝕥𝕙𝕖 𝕧𝕚𝕔𝕥𝕠𝕣𝕪 𝕠𝕧𝕖𝕣 𝕙𝕚𝕞𝕤𝕖𝕝𝕗. 𝔿𝕖 𝕝𝕠𝕧𝕖𝕕 𝔹𝕚𝕘 𝔹𝕣𝕠𝕥𝕙𝕖𝕣.

Fraktur!

𝔉𝔯𝔬𝔪 𝔊𝔢𝔬𝔯𝔤𝔢 𝔒𝔯𝔴𝔢𝔩𝔩'𝔰 1984:

𝔋𝔢 𝔤𝔞𝔷𝔢𝔡 𝔲𝔭 𝔞𝔱 𝔱𝔥𝔢 𝔢𝔫𝔬𝔯𝔪𝔬𝔲𝔰 𝔣𝔞𝔠𝔢. 𝔉𝔬𝔯𝔱𝔶 𝔶𝔢𝔞𝔯𝔰 𝔦𝔱 𝔥𝔞𝔡 𝔱𝔞𝔨𝔢𝔫 𝔥𝔦𝔪 𝔱𝔬 𝔩𝔢𝔞𝔯𝔫 𝔴𝔥𝔞𝔱 𝔨𝔦𝔫𝔡 𝔬𝔣 𝔰𝔪𝔦𝔩𝔢 𝔴𝔞𝔰 𝔥𝔦𝔡𝔡𝔢𝔫 𝔟𝔢𝔫𝔢𝔞𝔱𝔥 𝔱𝔥𝔢 𝔡𝔞𝔯𝔨 𝔪𝔬𝔲𝔰𝔱𝔞𝔠𝔥𝔢. 𝔒 𝔠𝔯𝔲𝔢𝔩, 𝔫𝔢𝔢𝔡𝔩𝔢𝔰𝔰 𝔪𝔦𝔰𝔲𝔫𝔡𝔢𝔯𝔰𝔱𝔞𝔫𝔡𝔦𝔫𝔤! 𝔒 𝔰𝔱𝔲𝔟𝔟𝔬𝔯𝔫, 𝔰𝔢𝔩𝔣-𝔴𝔦𝔩𝔩𝔢𝔡 𝔢𝔵𝔦𝔩𝔢 𝔣𝔯𝔬𝔪 𝔱𝔥𝔢 𝔩𝔬𝔳𝔦𝔫𝔤 𝔟𝔯𝔢𝔞𝔰𝔱! 𝔗𝔴𝔬 𝔤𝔦𝔫-𝔰𝔠𝔢𝔫𝔱𝔢𝔡 𝔱𝔢𝔞𝔯𝔰 𝔱𝔯𝔦𝔠𝔨𝔩𝔢𝔡 𝔡𝔬𝔴𝔫 𝔱𝔥𝔢 𝔰𝔦𝔡𝔢𝔰 𝔬𝔣 𝔥𝔦𝔰 𝔫𝔬𝔰𝔢. 𝔅𝔲𝔱 𝔦𝔱 𝔴𝔞𝔰 𝔞𝔩𝔩 𝔯𝔦𝔤𝔥𝔱, 𝔢𝔳𝔢𝔯𝔶𝔱𝔥𝔦𝔫𝔤 𝔴𝔞𝔰 𝔞𝔩𝔩 𝔯𝔦𝔤𝔥𝔱, 𝔱𝔥𝔢 𝔰𝔱𝔯𝔲𝔤𝔤𝔩𝔢 𝔴𝔞𝔰 𝔣𝔦𝔫𝔦𝔰𝔥𝔢𝔡. 𝔋𝔢 𝔥𝔞𝔡 𝔴𝔬𝔫 𝔱𝔥𝔢 𝔳𝔦𝔠𝔱𝔬𝔯𝔶 𝔬𝔳𝔢𝔯 𝔥𝔦𝔪𝔰𝔢𝔩𝔣. 𝔋𝔢 𝔩𝔬𝔳𝔢𝔡 𝔅𝔦𝔤 𝔅𝔯𝔬𝔱𝔥𝔢𝔯.

There is a consistent fail for the H in my system, but what the hell. Wait, Fraktur bold!:

𝕱𝖗𝖔𝖒 𝕲𝖊𝖔𝖗𝖌𝖊 𝕺𝖗𝖜𝖊𝖑𝖑'𝖘 1984:

𝕳𝖊 𝖌𝖆𝖟𝖊𝖉 𝖚𝖕 𝖆𝖙 𝖙𝖍𝖊 𝖊𝖓𝖔𝖗𝖒𝖔𝖚𝖘 𝖋𝖆𝖈𝖊. 𝕱𝖔𝖗𝖙𝖞 𝖞𝖊𝖆𝖗𝖘 𝖎𝖙 𝖍𝖆𝖉 𝖙𝖆𝖐𝖊𝖓 𝖍𝖎𝖒 𝖙𝖔 𝖑𝖊𝖆𝖗𝖓 𝖜𝖍𝖆𝖙 𝖐𝖎𝖓𝖉 𝖔𝖋 𝖘𝖒𝖎𝖑𝖊 𝖜𝖆𝖘 𝖍𝖎𝖉𝖉𝖊𝖓 𝖇𝖊𝖓𝖊𝖆𝖙𝖍 𝖙𝖍𝖊 𝖉𝖆𝖗𝖐 𝖒𝖔𝖚𝖘𝖙𝖆𝖈𝖍𝖊. 𝕺 𝖈𝖗𝖚𝖊𝖑, 𝖓𝖊𝖊𝖉𝖑𝖊𝖘𝖘 𝖒𝖎𝖘𝖚𝖓𝖉𝖊𝖗𝖘𝖙𝖆𝖓𝖉𝖎𝖓𝖌! 𝕺 𝖘𝖙𝖚𝖇𝖇𝖔𝖗𝖓, 𝖘𝖊𝖑𝖋-𝖜𝖎𝖑𝖑𝖊𝖉 𝖊𝖝𝖎𝖑𝖊 𝖋𝖗𝖔𝖒 𝖙𝖍𝖊 𝖑𝖔𝖛𝖎𝖓𝖌 𝖇𝖗𝖊𝖆𝖘𝖙! 𝕿𝖜𝖔 𝖌𝖎𝖓-𝖘𝖈𝖊𝖓𝖙𝖊𝖉 𝖙𝖊𝖆𝖗𝖘 𝖙𝖗𝖎𝖈𝖐𝖑𝖊𝖉 𝖉𝖔𝖜𝖓 𝖙𝖍𝖊 𝖘𝖎𝖉𝖊𝖘 𝖔𝖋 𝖍𝖎𝖘 𝖓𝖔𝖘𝖊. 𝕭𝖚𝖙 𝖎𝖙 𝖜𝖆𝖘 𝖆𝖑𝖑 𝖗𝖎𝖌𝖍𝖙, 𝖊𝖛𝖊𝖗𝖞𝖙𝖍𝖎𝖓𝖌 𝖜𝖆𝖘 𝖆𝖑𝖑 𝖗𝖎𝖌𝖍𝖙, 𝖙𝖍𝖊 𝖘𝖙𝖗𝖚𝖌𝖌𝖑𝖊 𝖜𝖆𝖘 𝖋𝖎𝖓𝖎𝖘𝖍𝖊𝖉. 𝕳𝖊 𝖍𝖆𝖉 𝖜𝖔𝖓 𝖙𝖍𝖊 𝖛𝖎𝖈𝖙𝖔𝖗𝖞 𝖔𝖛𝖊𝖗 𝖍𝖎𝖒𝖘𝖊𝖑𝖋. 𝕳𝖊 𝖑𝖔𝖛𝖊𝖉 𝕭𝖎𝖌 𝕭𝖗𝖔𝖙𝖍𝖊𝖗.

There are also combinations of sans-serif:

𝖥𝗋𝗈𝗆 𝖦𝖾𝗈𝗋𝗀𝖾 𝖮𝗋𝗐𝖾𝗅𝗅'𝗌 𝟣𝟫𝟪𝟦:

𝖧𝖾 𝗀𝖺𝗓𝖾𝖽 𝗎𝗉 𝖺𝗍 𝗍𝗁𝖾 𝖾𝗇𝗈𝗋𝗆𝗈𝗎𝗌 𝖿𝖺𝖼𝖾. 𝖥𝗈𝗋𝗍𝗒 𝗒𝖾𝖺𝗋𝗌 𝗂𝗍 𝗁𝖺𝖽 𝗍𝖺𝗄𝖾𝗇 𝗁𝗂𝗆 𝗍𝗈 𝗅𝖾𝖺𝗋𝗇 𝗐𝗁𝖺𝗍 𝗄𝗂𝗇𝖽 𝗈𝖿 𝗌𝗆𝗂𝗅𝖾 𝗐𝖺𝗌 𝗁𝗂𝖽𝖽𝖾𝗇 𝖻𝖾𝗇𝖾𝖺𝗍𝗁 𝗍𝗁𝖾 𝖽𝖺𝗋𝗄 𝗆𝗈𝗎𝗌𝗍𝖺𝖼𝗁𝖾. 𝖮 𝖼𝗋𝗎𝖾𝗅, 𝗇𝖾𝖾𝖽𝗅𝖾𝗌𝗌 𝗆𝗂𝗌𝗎𝗇𝖽𝖾𝗋𝗌𝗍𝖺𝗇𝖽𝗂𝗇𝗀! 𝖮 𝗌𝗍𝗎𝖻𝖻𝗈𝗋𝗇, 𝗌𝖾𝗅𝖿-𝗐𝗂𝗅𝗅𝖾𝖽 𝖾𝗑𝗂𝗅𝖾 𝖿𝗋𝗈𝗆 𝗍𝗁𝖾 𝗅𝗈𝗏𝗂𝗇𝗀 𝖻𝗋𝖾𝖺𝗌𝗍! 𝖳𝗐𝗈 𝗀𝗂𝗇-𝗌𝖼𝖾𝗇𝗍𝖾𝖽 𝗍𝖾𝖺𝗋𝗌 𝗍𝗋𝗂𝖼𝗄𝗅𝖾𝖽 𝖽𝗈𝗐𝗇 𝗍𝗁𝖾 𝗌𝗂𝖽𝖾𝗌 𝗈𝖿 𝗁𝗂𝗌 𝗇𝗈𝗌𝖾. 𝖡𝗎𝗍 𝗂𝗍 𝗐𝖺𝗌 𝖺𝗅𝗅 𝗋𝗂𝗀𝗁𝗍, 𝖾𝗏𝖾𝗋𝗒𝗍𝗁𝗂𝗇𝗀 𝗐𝖺𝗌 𝖺𝗅𝗅 𝗋𝗂𝗀𝗁𝗍, 𝗍𝗁𝖾 𝗌𝗍𝗋𝗎𝗀𝗀𝗅𝖾 𝗐𝖺𝗌 𝖿𝗂𝗇𝗂𝗌𝗁𝖾𝖽. 𝖧𝖾 𝗁𝖺𝖽 𝗐𝗈𝗇 𝗍𝗁𝖾 𝗏𝗂𝖼𝗍𝗈𝗋𝗒 𝗈𝗏𝖾𝗋 𝗁𝗂𝗆𝗌𝖾𝗅𝖿. 𝖧𝖾 𝗅𝗈𝗏𝖾𝖽 𝖡𝗂𝗀 𝖡𝗋𝗈𝗍𝗁𝖾𝗋.

What an eyesore! sans-serif-bold:

𝗙𝗿𝗼𝗺 𝗚𝗲𝗼𝗿𝗴𝗲 𝗢𝗿𝘄𝗲𝗹𝗹'𝘀 𝟭𝟵𝟴𝟰:

𝗛𝗲 𝗴𝗮𝘇𝗲𝗱 𝘂𝗽 𝗮𝘁 𝘁𝗵𝗲 𝗲𝗻𝗼𝗿𝗺𝗼𝘂𝘀 𝗳𝗮𝗰𝗲. 𝗙𝗼𝗿𝘁𝘆 𝘆𝗲𝗮𝗿𝘀 𝗶𝘁 𝗵𝗮𝗱 𝘁𝗮𝗸𝗲𝗻 𝗵𝗶𝗺 𝘁𝗼 𝗹𝗲𝗮𝗿𝗻 𝘄𝗵𝗮𝘁 𝗸𝗶𝗻𝗱 𝗼𝗳 𝘀𝗺𝗶𝗹𝗲 𝘄𝗮𝘀 𝗵𝗶𝗱𝗱𝗲𝗻 𝗯𝗲𝗻𝗲𝗮𝘁𝗵 𝘁𝗵𝗲 𝗱𝗮𝗿𝗸 𝗺𝗼𝘂𝘀𝘁𝗮𝗰𝗵𝗲. 𝗢 𝗰𝗿𝘂𝗲𝗹, 𝗻𝗲𝗲𝗱𝗹𝗲𝘀𝘀 𝗺𝗶𝘀𝘂𝗻𝗱𝗲𝗿𝘀𝘁𝗮𝗻𝗱𝗶𝗻𝗴! 𝗢 𝘀𝘁𝘂𝗯𝗯𝗼𝗿𝗻, 𝘀𝗲𝗹𝗳-𝘄𝗶𝗹𝗹𝗲𝗱 𝗲𝘅𝗶𝗹𝗲 𝗳𝗿𝗼𝗺 𝘁𝗵𝗲 𝗹𝗼𝘃𝗶𝗻𝗴 𝗯𝗿𝗲𝗮𝘀𝘁! 𝗧𝘄𝗼 𝗴𝗶𝗻-𝘀𝗰𝗲𝗻𝘁𝗲𝗱 𝘁𝗲𝗮𝗿𝘀 𝘁𝗿𝗶𝗰𝗸𝗹𝗲𝗱 𝗱𝗼𝘄𝗻 𝘁𝗵𝗲 𝘀𝗶𝗱𝗲𝘀 𝗼𝗳 𝗵𝗶𝘀 𝗻𝗼𝘀𝗲. 𝗕𝘂𝘁 𝗶𝘁 𝘄𝗮𝘀 𝗮𝗹𝗹 𝗿𝗶𝗴𝗵𝘁, 𝗲𝘃𝗲𝗿𝘆𝘁𝗵𝗶𝗻𝗴 𝘄𝗮𝘀 𝗮𝗹𝗹 𝗿𝗶𝗴𝗵𝘁, 𝘁𝗵𝗲 𝘀𝘁𝗿𝘂𝗴𝗴𝗹𝗲 𝘄𝗮𝘀 𝗳𝗶𝗻𝗶𝘀𝗵𝗲𝗱. 𝗛𝗲 𝗵𝗮𝗱 𝘄𝗼𝗻 𝘁𝗵𝗲 𝘃𝗶𝗰𝘁𝗼𝗿𝘆 𝗼𝘃𝗲𝗿 𝗵𝗶𝗺𝘀𝗲𝗹𝗳. 𝗛𝗲 𝗹𝗼𝘃𝗲𝗱 𝗕𝗶𝗴 𝗕𝗿𝗼𝘁𝗵𝗲𝗿.

Sans-serif italic:

𝘍𝘳𝘰𝘮 𝘎𝘦𝘰𝘳𝘨𝘦 𝘖𝘳𝘸𝘦𝘭𝘭'𝘴 1984:

𝘏𝘦 𝘨𝘢𝘻𝘦𝘥 𝘶𝘱 𝘢𝘵 𝘵𝘩𝘦 𝘦𝘯𝘰𝘳𝘮𝘰𝘶𝘴 𝘧𝘢𝘤𝘦. 𝘍𝘰𝘳𝘵𝘺 𝘺𝘦𝘢𝘳𝘴 𝘪𝘵 𝘩𝘢𝘥 𝘵𝘢𝘬𝘦𝘯 𝘩𝘪𝘮 𝘵𝘰 𝘭𝘦𝘢𝘳𝘯 𝘸𝘩𝘢𝘵 𝘬𝘪𝘯𝘥 𝘰𝘧 𝘴𝘮𝘪𝘭𝘦 𝘸𝘢𝘴 𝘩𝘪𝘥𝘥𝘦𝘯 𝘣𝘦𝘯𝘦𝘢𝘵𝘩 𝘵𝘩𝘦 𝘥𝘢𝘳𝘬 𝘮𝘰𝘶𝘴𝘵𝘢𝘤𝘩𝘦. 𝘖 𝘤𝘳𝘶𝘦𝘭, 𝘯𝘦𝘦𝘥𝘭𝘦𝘴𝘴 𝘮𝘪𝘴𝘶𝘯𝘥𝘦𝘳𝘴𝘵𝘢𝘯𝘥𝘪𝘯𝘨! 𝘖 𝘴𝘵𝘶𝘣𝘣𝘰𝘳𝘯, 𝘴𝘦𝘭𝘧-𝘸𝘪𝘭𝘭𝘦𝘥 𝘦𝘹𝘪𝘭𝘦 𝘧𝘳𝘰𝘮 𝘵𝘩𝘦 𝘭𝘰𝘷𝘪𝘯𝘨 𝘣𝘳𝘦𝘢𝘴𝘵! 𝘛𝘸𝘰 𝘨𝘪𝘯-𝘴𝘤𝘦𝘯𝘵𝘦𝘥 𝘵𝘦𝘢𝘳𝘴 𝘵𝘳𝘪𝘤𝘬𝘭𝘦𝘥 𝘥𝘰𝘸𝘯 𝘵𝘩𝘦 𝘴𝘪𝘥𝘦𝘴 𝘰𝘧 𝘩𝘪𝘴 𝘯𝘰𝘴𝘦. 𝘉𝘶𝘵 𝘪𝘵 𝘸𝘢𝘴 𝘢𝘭𝘭 𝘳𝘪𝘨𝘩𝘵, 𝘦𝘷𝘦𝘳𝘺𝘵𝘩𝘪𝘯𝘨 𝘸𝘢𝘴 𝘢𝘭𝘭 𝘳𝘪𝘨𝘩𝘵, 𝘵𝘩𝘦 𝘴𝘵𝘳𝘶𝘨𝘨𝘭𝘦 𝘸𝘢𝘴 𝘧𝘪𝘯𝘪𝘴𝘩𝘦𝘥. 𝘏𝘦 𝘩𝘢𝘥 𝘸𝘰𝘯 𝘵𝘩𝘦 𝘷𝘪𝘤𝘵𝘰𝘳𝘺 𝘰𝘷𝘦𝘳 𝘩𝘪𝘮𝘴𝘦𝘭𝘧. 𝘏𝘦 𝘭𝘰𝘷𝘦𝘥 𝘉𝘪𝘨 𝘉𝘳𝘰𝘵𝘩𝘦𝘳.

And sans-serif bold+italic:

𝙁𝙧𝙤𝙢 𝙂𝙚𝙤𝙧𝙜𝙚 𝙊𝙧𝙬𝙚𝙡𝙡'𝙨 1984:

𝙃𝙚 𝙜𝙖𝙯𝙚𝙙 𝙪𝙥 𝙖𝙩 𝙩𝙝𝙚 𝙚𝙣𝙤𝙧𝙢𝙤𝙪𝙨 𝙛𝙖𝙘𝙚. 𝙁𝙤𝙧𝙩𝙮 𝙮𝙚𝙖𝙧𝙨 𝙞𝙩 𝙝𝙖𝙙 𝙩𝙖𝙠𝙚𝙣 𝙝𝙞𝙢 𝙩𝙤 𝙡𝙚𝙖𝙧𝙣 𝙬𝙝𝙖𝙩 𝙠𝙞𝙣𝙙 𝙤𝙛 𝙨𝙢𝙞𝙡𝙚 𝙬𝙖𝙨 𝙝𝙞𝙙𝙙𝙚𝙣 𝙗𝙚𝙣𝙚𝙖𝙩𝙝 𝙩𝙝𝙚 𝙙𝙖𝙧𝙠 𝙢𝙤𝙪𝙨𝙩𝙖𝙘𝙝𝙚. 𝙊 𝙘𝙧𝙪𝙚𝙡, 𝙣𝙚𝙚𝙙𝙡𝙚𝙨𝙨 𝙢𝙞𝙨𝙪𝙣𝙙𝙚𝙧𝙨𝙩𝙖𝙣𝙙𝙞𝙣𝙜! 𝙊 𝙨𝙩𝙪𝙗𝙗𝙤𝙧𝙣, 𝙨𝙚𝙡𝙛-𝙬𝙞𝙡𝙡𝙚𝙙 𝙚𝙭𝙞𝙡𝙚 𝙛𝙧𝙤𝙢 𝙩𝙝𝙚 𝙡𝙤𝙫𝙞𝙣𝙜 𝙗𝙧𝙚𝙖𝙨𝙩! 𝙏𝙬𝙤 𝙜𝙞𝙣-𝙨𝙘𝙚𝙣𝙩𝙚𝙙 𝙩𝙚𝙖𝙧𝙨 𝙩𝙧𝙞𝙘𝙠𝙡𝙚𝙙 𝙙𝙤𝙬𝙣 𝙩𝙝𝙚 𝙨𝙞𝙙𝙚𝙨 𝙤𝙛 𝙝𝙞𝙨 𝙣𝙤𝙨𝙚. 𝘽𝙪𝙩 𝙞𝙩 𝙬𝙖𝙨 𝙖𝙡𝙡 𝙧𝙞𝙜𝙝𝙩, 𝙚𝙫𝙚𝙧𝙮𝙩𝙝𝙞𝙣𝙜 𝙬𝙖𝙨 𝙖𝙡𝙡 𝙧𝙞𝙜𝙝𝙩, 𝙩𝙝𝙚 𝙨𝙩𝙧𝙪𝙜𝙜𝙡𝙚 𝙬𝙖𝙨 𝙛𝙞𝙣𝙞𝙨𝙝𝙚𝙙. 𝙃𝙚 𝙝𝙖𝙙 𝙬𝙤𝙣 𝙩𝙝𝙚 𝙫𝙞𝙘𝙩𝙤𝙧𝙮 𝙤𝙫𝙚𝙧 𝙝𝙞𝙢𝙨𝙚𝙡𝙛. 𝙃𝙚 𝙡𝙤𝙫𝙚𝙙 𝘽𝙞𝙜 𝘽𝙧𝙤𝙩𝙝𝙚𝙧.

There is even a script styling, very ugly and incomplete:

𝒡𝓇𝓄𝓂 𝒢𝒺𝓄𝓇𝒼𝒺 𝒪𝓇𝓌𝒺𝓁𝓁'𝓈 1984:

𝒣𝒺 𝒼𝒶𝓏𝒺𝒹 𝓊𝓅 𝒶𝓉 𝓉𝒽𝒺 𝒺𝓃𝓄𝓇𝓂𝓄𝓊𝓈 𝒻𝒶𝒸𝒺. 𝒡𝓄𝓇𝓉𝓎 𝓎𝒺𝒶𝓇𝓈 𝒾𝓉 𝒽𝒶𝒹 𝓉𝒶𝓀𝒺𝓃 𝒽𝒾𝓂 𝓉𝓄 𝓁𝒺𝒶𝓇𝓃 𝓌𝒽𝒶𝓉 𝓀𝒾𝓃𝒹 𝓄𝒻 𝓈𝓂𝒾𝓁𝒺 𝓌𝒶𝓈 𝒽𝒾𝒹𝒹𝒺𝓃 𝒷𝒺𝓃𝒺𝒶𝓉𝒽 𝓉𝒽𝒺 𝒹𝒶𝓇𝓀 𝓂𝓄𝓊𝓈𝓉𝒶𝒸𝒽𝒺. 𝒪 𝒸𝓇𝓊𝒺𝓁, 𝓃𝒺𝒺𝒹𝓁𝒺𝓈𝓈 𝓂𝒾𝓈𝓊𝓃𝒹𝒺𝓇𝓈𝓉𝒶𝓃𝒹𝒾𝓃𝒼! 𝒪 𝓈𝓉𝓊𝒷𝒷𝓄𝓇𝓃, 𝓈𝒺𝓁𝒻-𝓌𝒾𝓁𝓁𝒺𝒹 𝒺𝓍𝒾𝓁𝒺 𝒻𝓇𝓄𝓂 𝓉𝒽𝒺 𝓁𝓄𝓋𝒾𝓃𝒼 𝒷𝓇𝒺𝒶𝓈𝓉! 𝒯𝓌𝓄 𝒼𝒾𝓃-𝓈𝒸𝒺𝓃𝓉𝒺𝒹 𝓉𝒺𝒶𝓇𝓈 𝓉𝓇𝒾𝒸𝓀𝓁𝒺𝒹 𝒹𝓄𝓌𝓃 𝓉𝒽𝒺 𝓈𝒾𝒹𝒺𝓈 𝓄𝒻 𝒽𝒾𝓈 𝓃𝓄𝓈𝒺. 𝒝𝓊𝓉 𝒾𝓉 𝓌𝒶𝓈 𝒶𝓁𝓁 𝓇𝒾𝒼𝒽𝓉, 𝒺𝓋𝒺𝓇𝓎𝓉𝒽𝒾𝓃𝒼 𝓌𝒶𝓈 𝒶𝓁𝓁 𝓇𝒾𝒼𝒽𝓉, 𝓉𝒽𝒺 𝓈𝓉𝓇𝓊𝒼𝒼𝓁𝒺 𝓌𝒶𝓈 𝒻𝒾𝓃𝒾𝓈𝒽𝒺𝒹. 𝒣𝒺 𝒽𝒶𝒹 𝓌𝓄𝓃 𝓉𝒽𝒺 𝓋𝒾𝒸𝓉𝓄𝓇𝓎 𝓄𝓋𝒺𝓇 𝒽𝒾𝓂𝓈𝒺𝓁𝒻. 𝒣𝒺 𝓁𝓄𝓋𝒺𝒹 𝒝𝒾𝒼 𝒝𝓇𝓄𝓉𝒽𝒺𝓇.

And the same set, but in bold (for some reason, on my computer it looks less bold than the non-bold version):

𝓕𝓻𝓸𝓶 𝓖𝓮𝓸𝓻𝓰𝓮 𝓞𝓻𝔀𝓮𝓵𝓵'𝓼 1984:

𝓗𝓮 𝓰𝓪𝔃𝓮𝓭 𝓾𝓹 𝓪𝓽 𝓽𝓱𝓮 𝓮𝓷𝓸𝓻𝓶𝓸𝓾𝓼 𝓯𝓪𝓬𝓮. 𝓕𝓸𝓻𝓽𝔂 𝔂𝓮𝓪𝓻𝓼 𝓲𝓽 𝓱𝓪𝓭 𝓽𝓪𝓴𝓮𝓷 𝓱𝓲𝓶 𝓽𝓸 𝓵𝓮𝓪𝓻𝓷 𝔀𝓱𝓪𝓽 𝓴𝓲𝓷𝓭 𝓸𝓯 𝓼𝓶𝓲𝓵𝓮 𝔀𝓪𝓼 𝓱𝓲𝓭𝓭𝓮𝓷 𝓫𝓮𝓷𝓮𝓪𝓽𝓱 𝓽𝓱𝓮 𝓭𝓪𝓻𝓴 𝓶𝓸𝓾𝓼𝓽𝓪𝓬𝓱𝓮. 𝓞 𝓬𝓻𝓾𝓮𝓵, 𝓷𝓮𝓮𝓭𝓵𝓮𝓼𝓼 𝓶𝓲𝓼𝓾𝓷𝓭𝓮𝓻𝓼𝓽𝓪𝓷𝓭𝓲𝓷𝓰! 𝓞 𝓼𝓽𝓾𝓫𝓫𝓸𝓻𝓷, 𝓼𝓮𝓵𝓯-𝔀𝓲𝓵𝓵𝓮𝓭 𝓮𝔁𝓲𝓵𝓮 𝓯𝓻𝓸𝓶 𝓽𝓱𝓮 𝓵𝓸𝓿𝓲𝓷𝓰 𝓫𝓻𝓮𝓪𝓼𝓽! 𝓣𝔀𝓸 𝓰𝓲𝓷-𝓼𝓬𝓮𝓷𝓽𝓮𝓭 𝓽𝓮𝓪𝓻𝓼 𝓽𝓻𝓲𝓬𝓴𝓵𝓮𝓭 𝓭𝓸𝔀𝓷 𝓽𝓱𝓮 𝓼𝓲𝓭𝓮𝓼 𝓸𝓯 𝓱𝓲𝓼 𝓷𝓸𝓼𝓮. 𝓑𝓾𝓽 𝓲𝓽 𝔀𝓪𝓼 𝓪𝓵𝓵 𝓻𝓲𝓰𝓱𝓽, 𝓮𝓿𝓮𝓻𝔂𝓽𝓱𝓲𝓷𝓰 𝔀𝓪𝓼 𝓪𝓵𝓵 𝓻𝓲𝓰𝓱𝓽, 𝓽𝓱𝓮 𝓼𝓽𝓻𝓾𝓰𝓰𝓵𝓮 𝔀𝓪𝓼 𝓯𝓲𝓷𝓲𝓼𝓱𝓮𝓭. 𝓗𝓮 𝓱𝓪𝓭 𝔀𝓸𝓷 𝓽𝓱𝓮 𝓿𝓲𝓬𝓽𝓸𝓻𝔂 𝓸𝓿𝓮𝓻 𝓱𝓲𝓶𝓼𝓮𝓵𝓯. 𝓗𝓮 𝓵𝓸𝓿𝓮𝓭 𝓑𝓲𝓰 𝓑𝓻𝓸𝓽𝓱𝓮𝓻.

Oh isn't it naïve and cute. And finally, you have monospace, ugly as fuck:

𝙵𝚛𝚘𝚖 𝙶𝚎𝚘𝚛𝚐𝚎 𝙾𝚛𝚠𝚎𝚕𝚕'𝚜 𝟷𝟿𝟾𝟺:

𝙷𝚎 𝚐𝚊𝚣𝚎𝚍 𝚞𝚙 𝚊𝚝 𝚝𝚑𝚎 𝚎𝚗𝚘𝚛𝚖𝚘𝚞𝚜 𝚏𝚊𝚌𝚎. 𝙵𝚘𝚛𝚝𝚢 𝚢𝚎𝚊𝚛𝚜 𝚒𝚝 𝚑𝚊𝚍 𝚝𝚊𝚔𝚎𝚗 𝚑𝚒𝚖 𝚝𝚘 𝚕𝚎𝚊𝚛𝚗 𝚠𝚑𝚊𝚝 𝚔𝚒𝚗𝚍 𝚘𝚏 𝚜𝚖𝚒𝚕𝚎 𝚠𝚊𝚜 𝚑𝚒𝚍𝚍𝚎𝚗 𝚋𝚎𝚗𝚎𝚊𝚝𝚑 𝚝𝚑𝚎 𝚍𝚊𝚛𝚔 𝚖𝚘𝚞𝚜𝚝𝚊𝚌𝚑𝚎. 𝙾 𝚌𝚛𝚞𝚎𝚕, 𝚗𝚎𝚎𝚍𝚕𝚎𝚜𝚜 𝚖𝚒𝚜𝚞𝚗𝚍𝚎𝚛𝚜𝚝𝚊𝚗𝚍𝚒𝚗𝚐! 𝙾 𝚜𝚝𝚞𝚋𝚋𝚘𝚛𝚗, 𝚜𝚎𝚕𝚏-𝚠𝚒𝚕𝚕𝚎𝚍 𝚎𝚡𝚒𝚕𝚎 𝚏𝚛𝚘𝚖 𝚝𝚑𝚎 𝚕𝚘𝚟𝚒𝚗𝚐 𝚋𝚛𝚎𝚊𝚜𝚝! 𝚃𝚠𝚘 𝚐𝚒𝚗-𝚜𝚌𝚎𝚗𝚝𝚎𝚍 𝚝𝚎𝚊𝚛𝚜 𝚝𝚛𝚒𝚌𝚔𝚕𝚎𝚍 𝚍𝚘𝚠𝚗 𝚝𝚑𝚎 𝚜𝚒𝚍𝚎𝚜 𝚘𝚏 𝚑𝚒𝚜 𝚗𝚘𝚜𝚎. 𝙱𝚞𝚝 𝚒𝚝 𝚠𝚊𝚜 𝚊𝚕𝚕 𝚛𝚒𝚐𝚑𝚝, 𝚎𝚟𝚎𝚛𝚢𝚝𝚑𝚒𝚗𝚐 𝚠𝚊𝚜 𝚊𝚕𝚕 𝚛𝚒𝚐𝚑𝚝, 𝚝𝚑𝚎 𝚜𝚝𝚛𝚞𝚐𝚐𝚕𝚎 𝚠𝚊𝚜 𝚏𝚒𝚗𝚒𝚜𝚑𝚎𝚍. 𝙷𝚎 𝚑𝚊𝚍 𝚠𝚘𝚗 𝚝𝚑𝚎 𝚟𝚒𝚌𝚝𝚘𝚛𝚢 𝚘𝚟𝚎𝚛 𝚑𝚒𝚖𝚜𝚎𝚕𝚏. 𝙷𝚎 𝚕𝚘𝚟𝚎𝚍 𝙱𝚒𝚐 𝙱𝚛𝚘𝚝𝚑𝚎𝚛.

I promise I'll use this on Tweeter.

Remember that all this is not "text": just symbols that happen to look like letters, so they won't appear when searching.

I need to finish this post with 𝖚𝖓𝖉 𝖉𝖆𝖘 𝖎𝖘𝖙 𝖆𝖑𝖑𝖊𝖘.

New ActivityPub support in Gruta

I have implemented partial ActivityPub support in pygruta, the Python port of my decades-old web CMS software Gruta. It has been implemented as two big blocks; the first one is a daemon process that, getting queries redirected from the web server,

  • Answers to webfinger GET method requests,
  • Answers to ActivityPub actor (user) GET method requests,
  • Accepts (and confirms) follow commands from POST method requests and registers the follower,
  • Accepts un-following commands from POST method requests and de-registers the follower,
  • Accepts messages (direct or public) from any ActivityPub user from POST method requests and stores them in a special topic as Gruta stories.

On the other hand, a command-line tool (triggered by cron) does the following:

  • Collects a story feed (the same set of stories that would be used in an ATOM or RSS feed) and sends it to all registered followers as public ActivityPub notes.

As of now, you cannot answer to a message sent from this network. I've yet to find a way of doing it, but most probably it would be by writing a standard story and using a special destination field or searching for a mention inside the story content matching the @user@host standard way of mentioning.

It has been a very tedious work, as the documentation is poor and confusing and you never get helpful feedback from errors. I did the development against different software (Mastodon, Friendica and Pleroma), but only got it working for the first one (it's the most common out there, though).

You can follow my id @angel@triptico.com from this network.

A function to decode utf-8 in streaming mode

This is my C language function to decode utf-8 into wide characters, a byte at a time. It also detects encoding errors.

/**
 * mpdm_utf8_to_wc - Converts from utf8 to wchar (streaming).
 * @w: convert wide char
 * @s: temporal state
 * @c: char read from stream
 *
 * Converts a stream of utf8 characters to wide char ones. The input
 * stream is read one byte at a time from @c and composed into @w
 * until a Unicode codepoint is ready. The @s integer keeps an internal
 * state change and must be set to 0 before the stream is read. It
 * detects encoding errors; in this case, the special Unicode
 * char U+FFFD is returned.
 *
 * When 0 is returned, a new wide char is available into @w. If
 * the stream is interrupted in the middle of a multibyte character,
 * the @s state variable will not be 0.
 */
int mpdm_utf8_to_wc(wchar_t *w, int *s, char c)
{
    if (!*s && (c & 0x80) == 0) { /* 1 byte char */
        *w = c;
    }
    else
    if (!*s && (c & 0xe0) == 0xc0) { /* 2 byte char */
        *w = (c & 0x1f) << 6; *s = 1;
    }
    else
    if (!*s && (c & 0xf0) == 0xe0) { /* 3 byte char */
        *w = (c & 0x0f) << 12; *s = 2;
    }
    else
    if (!*s && (c & 0xf8) == 0xf0) { /* 4 byte char */
        *w = (c & 0x07) << 18; *s = 3;
    }
    else
    if (*s && (c & 0xc0) == 0x80) { /* continuation byte */
        switch (*s) {
        case 3: *w |= (c & 0x3f) << 12; break;
        case 2: *w |= (c & 0x3f) << 6;  break;
        case 1: *w |= (c & 0x3f);       break;
        }

        (*s)--;
    }
    else {
        *w = L'\xfffd';
        *s = 0;
    }

    return *s;
}

Sobre la creación de canales de Telegram

Hace unos días investigué para un amigo cómo crear y usar canales de Telegram y le envié este email contándole lo que he averiguado. Lo adjunto aquí para que no se pierda:

Hola. He investigado sobre los canales de Telegram y cómo automatizarlo. Como siempre todo es complicado y confuso. Te lo cuento aquí porque mañana seguro que se me ha olvidado.

Lo primero es crear un canal. Eso ya lo has hecho.

Lo segundo es crear un bot. Es una especie de usuario de Telegram que no es un usuario pero que puede postear en canales. Para crearlo hay que hablar con otro bot que se llama BotFather. Ahí hay que darle comandos tipo IRC para crear tu bot (sí, es así de confuso). Hay que mandarle el mensaje /newbot y él (como en un chat robótico) te pide el nombre del bot y el nombre del usuario del bot (no sé muy bien cuál es la diferencia ni por qué hacen falta dos nombres y por qué no puedes ponerle el mismo). Después de esto te da una cadena de texto mágica que es un identificador autenticado del bot para poder postear desde fuera.

Luego tienes que ir al canal y añadir al bot como administrador. Solo funciona si lo haces desde el móvil, desde el ordenador no lo he conseguido. Tienes que buscar el nombre del bot desde la lupa porque no te sale automáticamente tu lista de bots.

Una vez hecho esto un par de veces (a la primera no me ha funcionado), ya le puedes mandar comandos al bot por HTTP para postear en aquellos canales en los que está autorizado. Esto se hace con una query como la que sigue:

https://api.telegram.org/botIDENTIFICADOR_DEL_BOT/sendMessage?chat_id=@CANAL&text=Hola%20caraculo

Esto se puede hacer directamente con el comando curl del Linux o desde algún programa, es una petición HTTP normal.

Eso publica en modo texto. Hay un modo especial HTML que es MUY limitado y solo acepta negrilla, cursiva, enlaces y poco más. Con eso hay que montárselo todo. En concreto, NO acepta tags p para separar líneas ni títulos h1, h2, etc ni nada de eso, así que hay que hacer una especie de conversión (no es que ignore los tags, es que casca y te rechaza el envío).

Leyendo por ahí he descubierto que el modo HTML sí acepta cortes de párrafo pero hay que meterlos a pelo, es decir, metiendo %0A (ascii del line feed). Para añadir imágenes hay otro truco, que es ponerlas como enlaces (NO como imágenes). Si dejas el texto del enlace vacío o con un espacio lo ignora. La gente dice que le pone un carácter Unicode especial que es el "separador que no ocupa espacio" pero a mí me lo rechaza.

Este comando funciona y genera una entrada más o menos bonita:

curl 'https://api.telegram.org/botBLA_BLA_BLA/sendMessage?chat_id=@nutriguia&parse_mode=HTML&disable_web_page_preview=false&text=<b>Title</b>%0AThis is a <i>test</i>. <a href="https://triptico.com/img/mp.png">·</a>'

Así que se podría hacer un programita que instalado en un cron coja, por ejemplo, el feed ATOM o RSS de Nutriguía, magree un poco las entradas, las deje aceptables para el Telegram y las envíe con sendas peticiones HTTP como las que te he comentado arriba.

Quizá alguien ha hecho ya ese programa, no he investigado más allá.

On selecting text in the Minimum Profit Text Editor

As this is a question I have to answer periodically here are my final words on it.

The Minimum Profit Text Editor has three selection modes: "movement", "block" and "vertical".

The "movement" one is the way of selecting text that is implemented everywhere and is somewhat of a standard: by pressing the shift key and using any of the movement actions (left, right, word left, word right, up, down, page up, page down, beginning of line, end of line, beginning of document or end of document) or by left clicking and dragging with the mouse. Additionally, you can right-click and drag to extend the selection. Once the block is marked any movement key deselects it. Typing something replaces the selection. Hitting del or backspace erases the selected text. Though this mode is what new users expect, it works weakly on non-GUI interfaces because of lacking or defective support in the underlying libraries and systems.

The "block" selection mode is an older style one (and the first one that MP had): by pressing a key (f9 by default) you mark the beginning or end of the marked text. The selection survives any movement (indeed, it's the only way block selection can be done, by moving to another place and marking the other end) and you can extend the block above or below whenever you want. Replacing and erasing works as expected. Additionally, most operations like search, replace, etc. only apply to the marked text if there is one (this is very useful). The selection only disappears when copying, erasing, replacing, mouse-clicking or unmarking (by pressing the f8 key). This is the way I copy and paste; I never use the standard way (I know you don't care).

The "vertical" selection mode also works by marking the beginning or the end of the block, but the selection forms a square shape (x, y to x', y') instead of a line-flow one. By default it's done by hitting ctrl-b. The selection can also be extended repeatedly. As in "block" mode, marked text is disabled after copying or by pressing f8. I never use this option and never did (it was implemented by a fellow programmer).

I agree that the "movement", "block" and "vertical" terms are a sloppy way to describe the operations they do.

Why the Minimum Profit Text Editor is not part of Debian

Yesterday I received three different emails asking me why the Minimum Profit text editor is not included in the Debian linux distribution, a question most probably arised due to the recent release of Debian 10. One of the messages even mentioned that it was called mped there, so he must be a very long time user. Anyway, this is a briefing I gave to a user many years ago (2011):

"And regarding linux distrubutions, I know for sure that it's at least part of Gentoo, Puppy Linux and there is even a *BSD port. It also used to be part of Debian, but I had very bad luck there: someone picked it up and became its maintainer, for later forgetting about it and not following version updates. It happened that when the first stable distribution that became UTF-8-enabled by default (don't remember what was its name, maybe sarge), "Upstream" MP was already at its 5.x version, but Debian got still a 3.x, which had the very nasty habit of destroying UTF-8 files. I posted an RC bug regarding this, but it went released anyway, probably mangling every user file that tried it and most probably losing users. Later, the maintainer was considered as Missing-in-action and the package orphaned; another time later the QA equipment took control and updated it to the latest 5.x version, what made me happy for a time; but just on the verge of the release of current stable version the package was deleted with the message "few users; alternatives exist" and disappeared from their database. This last version is still what got migrated to Ubuntu, where it still exists, but probably unmaintained and forgotten."

Those "latest stable versions" of Minimum Profit and Debian I talked about in that paragraph were the ones back on 2011 (whichever they were). MP is no longer on Ubuntu and I don't know nor care if Gentoo or Puppy Linux even still exist (they were popular distributions those days).

Anyway, the Minimum Profit text editor is alive and well and having periodic updates. It's public domain software and can be built from source code for virtually any platform. Portable (i.e. no installation needed) binaries exist for MS Windows (32 or 64 bits, GUI or console versions). It's probably better that the text editor you are using now.

I also think that few users, alternatives exist is a reason can be given for the deletion of most of us.


MP: Not only for text-editing but also for pipe-turning.

Disk partitions and UDF formatting on MS Windows

Partition manager

Open cmd.exe and run

 diskmgmt.msc

Formatting a disk as UDF

 format x: /fs:UDF

Using the UDF filesystem in USB sticks

The best way of using USB sticks for sharing information between Linux and MS Windows systems is to have them formatted with the UDF filesystem. On MS Windows it's fully supported (read-only on XP, though) while on Linux is much better that FAT monstrosities because permissions and owners are preserved.

To format an USB stick, use the mkudffs program:

 mkudffs -b 512 --media-type=hd /dev/{full disk device}

You also probably want to delete all partitions in the stick to avoid it being wrongly detected.

Someone said these UDF-formatted sticks also work correctly on MacOS (didn't try).

Doorway - interesante efecto óptico

Esto lo vi hace muchos años y por fin he vuelto a encontrarlo.

La siguiente imagen logra un efecto sorprendente. No es inmediato, necesitas fijar la vista en la puerta que aparece al fondo durante un rato. No tengo ni idea de cómo lo han conseguido: no parece ser un estereograma ni nada parecido. Desenfocar un poco la vista parece que favorece el efecto.

🔗 ...

Filtración 0-day: los números PIN más comunes

Recientemente se ha filtrado la lista de los números PIN más usados. Estos números son cadenas de cuatro dígitos que sirven como contraseña para teléfonos móviles, tarjetas de crédito y otros dispositivos que potencialmente contienen información sensible. Si tu número está en esta lista, se considera vulnerable y deberías cambiarlo inmediatamente.

🔗 ...

Cómo ponerle una radio normal a un Jeep KJ / Liberty / Cherokee

Hace falta lo siguiente:

  1. Un adaptador ISO para alimentación y altavoces (10,03 €)
  2. Un adaptador para la antena (7,99 $)
  3. Un adaptador/carcasa para encajar la radio (11,98 $)
  4. Una radio (35,63 €)

La radio vale cualquiera siempre que lleve doble conector ISO. Como yo no quería CDs ni mierdas, compré la más barata, que tuviera radio, tarjeta SD y USB. Ya que los Jeep llevan el reloj en la radio y la vamos a sustituir, también conviene que la radio tenga reloj.

Además de lo mencionado arriba tuve que comprar cuatro tornillos para enganchar la radio a la nueva carcasa. En casa siempre tengo un millón de tornillos pero como era de esperar no me valía ninguno.

Para cambiarla hay que seguir los pasos obvios:

  • Montar la radio en la nueva carcasa.
  • Enchufar el nº 1 y el nº 2 en la radio.
  • Quitar el cenicero de al lado de los cargadores de mechero y sacar el tornillo que hay ahí.
  • Tirar para sacar todo el frontal.
  • Sacar la radio quitando los cuatro tornillos de las esquinas (que nos valdrán luego para poner la nueva carcasa).
  • Quitar el cable de datos y el de antena.
  • Conectar el nº 2 al cable de la antena.
  • Conectar el nº 1 al cable de la radio.
  • Meter con cuidado, atornillar y volver a colocar el frontal.

La única contrapartida es que los mandos del volante ya no sirven, pero puedo sobrevivir sin ellos.

El calendario de la revolución francesa

A contar desde el equinoccio de otoño.

Mes Comienzo
vendimiario 22, 23 ó 24 de septiembre
brumario 22, 23 ó 24 de octubre
frimario 22, 22 ó 23 de noviembre
nivoso 21, 22 ó 23 de diciembre
pluvioso 20, 21 ó 22 de enero
ventoso 19, 20 ó 21 de febrero
germinal 20 ó 21 de marzo
floreal 20 ó 21 de abril
pradeal 20 ó 21 de mayo
mesidor 19 ó 20 de junio
termidor 19 ó 20 de julio
frutidor 18 ó 19 de agosto

http://es.wikipedia.org/wiki/Calendario_republicano_franc%C3%A9s

HOWTO Enter Android Engineer Mode

 *#*#3646633#*#*

BtSync

Es un bittorrent personal, que hace que puedas compartir archivos que se sincronizan en todos tus ordenadores, a la forma de Dropbox o Google Drive. Una de las diferencias es que, al no depender de una «nube» externa, no tienes ninguna limitación de espacio de almacenamiento ni nadie puede mirar lo que guardas.

Está basado en «secretos»; cada vez que se instala el programa en un equipo, pregunta si ya tienes un secreto (proporcionado por instalaciones previas) o si crea uno nuevo. Todos los equipos que compartan un secreto comparten los archivos asociados. Un secreto es sólo una cadena larga de caracteres.

No se limita a un directorio; puedes tener todos los que quieras con sus correspondientes secretos, así que puedes compartir con diferente gente diferentes directorios, incluso con permisos limitados (es decir, por ejemplo, puedes compartir conmigo tu carpeta de MP3 en modo sólo lectura, de forma que yo no pueda borrarte ni añadir nada).

Este es el secreto (sólo lectura) para mi colección de imprescindibles de música clásica, que siempre mantengo por debajo de 1GB y que cambio a menudo:

 R2FWMUHX7AX5CMJ7NZHR5PFP5FN5ICAKR

Para usarlo, instala BtSync, créate una carpeta y dile al BtSync que la añada dándole este secreto.

Existen versiones para MS Windows, Mac y Linux (no es software libre).

http://labs.bittorrent.com/experiments/sync.html

Este equipo no está ejecutando una copia de windows original

Desactivar la actualización de Windows KB971033:

  • Panel de control / programas / Programas y características, ver actualizaciones instaladas
  • Seleccionar KB971033 y desinstalar
  • Ir a Windows Update, buscar actualizaciones
  • Sobre KB971033, botón derecho y ocultar actualización