Diario de un picateclas Profile picture
May 14, 2021 24 tweets 7 min read Read on X
Sheldon tenía un "Fun with Flags", yo tengo un "Fun with Strings". Por demanda popular, ¡DENTRO HILO! ⬇
Todo empezó hace un porrón de años cuando los arcanos de los 0 y los 1 inventaron la tabla ASCII.
Majestuosa tabla que contenía absolutamente todas las letras, números y símbolos. Todos los
que se les ocurrieron en 1 tarde, quiero decir.
Y todo era maravilloso, porque con 1 byte representábamos cualquier carácter.
Y para medir "la longitud" de una cadena nos bastaba con contar cuántos bytes tenía, porque 1 letra = 1 byte.
Y para pasar de mayusculas a minúsculas sumabas 32 al valor decimal del carácter y pista.
Luego vino una gente muy rara (fuera de yankilandia) y dijo algo de usar tildes, runas, escribir al revés en plan posesión demoniaca. En fin, una flipada del copón...
Unicode al rescate! Ponemos 4bytes por letra y con eso ya podemos crear una tabla ASCII XXL

Y por un momento parecía que todo estaba apañado. Excepto que no, porque eso de meter 4 donde antes cabía solo 1 no termina de funcionar bien, ni siquiera comprando la licencia del Winrar
"Pues hagamos que a veces los caracteres sean de 1 byte, a veces de 4, a veces de 2 o de 3, según por donde sople el viento".

Dicho y hecho! "UTF-8", "UTF-16", "ISO-8859-1" y 9157238 otros "charsets" al rescate! Porque cuantos más estándares, mejor!
Ahora metes "¡Qué mañana llevo!" en tu formulario de React, lo mandas a tu backend de PHP que lo lee como "!Qué manana llevo!" y este lo manda a tu base de datos MySQL que lo guarda como "�Qu� ma�ana llevo!"
"Bueno, pero una vez controlado el tema de charsets y usando el mismo en todos los sitios, todo funciona bien, no?"

Mmm.... casi!

Lo que dije antes, lo de "medir la longitud de las cadenas"... Os vais a reír, pero... resulta que ahora ya no sabemos ni como medirlas, porque...
"a" es 1 byte

"ñ" son 2 bytes

"ƒ" son 3 bytes

el glifo (emoji) "😂" son 4 bytes (1 codepoint)

el glifo "👩‍👩‍👦‍👦" en realidad son 4 glifos "unidos" (👩+👩+👦+👦), que son 4 codepoints unidos con 3 "caracteres de union"), 25 bytes en total (7 codepoints, pero sólo 1 glifo)
Eso ocurre porque Unicode define caracteres que pueden modificar e incluso unir otros caracteres, entre otras cosas...
Gracias a esos "modificadores" la letra "ñ"

(U+00F1, 1 carácter, 1 codepoint, 2 bytes)

también puede representarse como la union del carácter "n"

(U+006E, 1 carácter, 1 codepoint, 2 bytes)

y el carácter "~"

(U+0342, 2 bytes)

➡ "n͂" (1 carácter, 2 codepoints, 4 bytes) Image
Supongo que nada me impide modificar caracteres varias veces... ¯\_(ツ)_/¯ Image
Ese último garabato que se ve ahi es un único glifo con 16 codepoints y un total de 31 bytes. Si nos ponemos tontos... A̷̢̢̛̛̛̱̳͚̺̙͙̗͎̱̖̲̙̬͚̳̟͔̤̲̻̪͇̪͕͖͓͔̤̟̫̬̙̯̻͙̥̣̝̮̭͓̱̥͇͔̗̗̳̜͚͊̉̐̐̀͋̋͑͐̅̑̆̌̇̂̓̂̅̆̌̈́́́̎̊̏͋̿̎͌̐̎̕̚̕͘͘͜ͅ ...😂
Entonces que miden las funciones tipo strlen()? Miden caracteres? Miden bytes? Miden codepoints? Miden glifos?

Ni nos ponemos de acuerdo en decidir que deberían medir: ImageImageImage
"Vale, me queda claro. No se pueden 'medir' cadenas de texto. Pero excepto esto, el resto bien, verdad?"

Pues... tampoco sabemos como convertir entre minúsculas y mayusculas...😂
Verás... La letra "ß" (aleman) ni siquiera tiene mayúscula. No existe!

Pero las funciones "toUpperCase()" de los lenguajes de programación algo deben hacer, así que... Image
La mayúscula "Σ" griega se convierte en minúscula "ς" únicamente si es la última letra de la palabra, en caso contrario "σ". Image
En holandés, el dígrafo "IJ/ij" se capitaliza entero, es decir, "IJsland" en vez de "Ijsland".
En hawaiano la "okina" (U+02BB) (visualmente se representa con un apóstrofo) es una consonante que modifica el sonido de la letra que precede. Al capitalizar una palabra con okina, debe ser la letra después de la okina la que se transforme: 'okina -> 'Okina
¿Vamos bien? ¿Seguimos?
Os acordáis de los poseídos que querían escribir al revés? Para esos también hay sitio en Unicode!
Unicode tiene un "carácter" especial llamado "RLM" que modifica la posición de los caracteres adyacentes. Dependiendo de dicha posición, los caracteres pueden ser completamente distintos.

Darle la vuelta a una cadena de texto rompe por completo ese orden.
Vamos con el ejemplo!

Ya hemos visto los caracteres que modifican otros caracteres (la "ñ").

Pongamos que tengo los caracteres "A" y "U+0301" ("tilde en el carácter anterior").

El resultado es "Á".

Pero si le damos la vuelta nos queda "́A", porque el "U+301" no actúa al revés
Por cierto! ¿Os había mencionado que U+202e hace que todos los caracteres que le siguen se pinten visualmente en orden inverso y que todo eso se puede usar con RLM?

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Diario de un picateclas

Diario de un picateclas Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @devruso

Mar 30
¿Os acordáis de nuestro amigo Jia Tan, el prota de la historia de ayer?

Acompañadme en este pequeño hilo que cubre el drama de hoy v2 🧵⬇️
Resulta que xz usa Landlock[0] (una característica en el kernel de linux) para limitar (deliberadamente) sus propias capacidades (para evitar fallos de seguridad).

[0] docs.kernel.org/userspace-api/…
Jia, en uno de sus tantos commits que hizo a lo largo de los últimos 2 años, modificó[1] la manera en la que se usaba landlock por xz

[1] git.tukaani.org/?p=xz.git;a=bl…
Image
Read 21 tweets
Mar 29
Acompañadme en este pequeño hilo que cubre el drama de hoy 🧵⬇️

La historia empieza con Jia Tan (JiaT75 en github), un maintainer de xz (librería de compresión que se usa en monton de sitios).
El susodicho puja este commit[0] que, mirándolo por encima, no tiene nada raro (un par de archivos de prueba para los unit tests).

[0]: github.com/tukaani-projec…
Image
el paquete con la nueva versión de la librería (que contiene dicho commit) se genera y se distribuye a las distros para las pruebas de validación, integración, etc... lo normal para que los betatesters hagan lo suyo, vaya.

Y aquí es donde entra en escena "Andres Freund".
Read 12 tweets
Jan 18
JIRA se ha caído. Próximos pasos:

1⃣Crear un ticket para investigar el problema
2⃣Documentar los descubrimientos en el ticket, poner en copia a upper management y al resto del equipo
3⃣Hacer un meeting (mínimo 15 personas) para discutir los descubrimientos
4⃣Asignar
...puntos de historia al ticket (votación con mínimo 15 personas)
5⃣Mover el ticket basandose en su prioridad y puntos
6⃣Esperar a que alguien se lo asigne (porque los equipos AGILE son multifacéticos y todos hacen todo)
7⃣Quien se lo haya asignado tendrá que documentar el
...proceso del fix, todas funcionalidades que afecta el parche, los sistemas en los que se ha de desplegar, etc...
8⃣Mover el ticket a la columna de QA
9⃣Esperar a que QA realice pruebas exhaustivas de todas las funcionalidades que nada tienen que ver con lo que se ha
Read 6 tweets
Jan 19, 2022
¿Queríais rant sobre el lamentable estado del stack de audio de Linux (porque el rant sobre el lamentable estado del stack gráfico se os quedó corto)? ¡Pues allá vamos! ⬇
El "stack de audio" es esa parte del OS que te permite escuchar los diálogos ̶d̶e̶l̶ ̶p̶o̶r̶n̶o̶ de las películas, música, tener notificaciones con sonido, etc...
MacOS lo tiene. Windows lo tiene. Arrancas el ordenador, enchufas cualquier altavoz comprado en el todo-a-cien, abres una o varias aplicaciones a la vez y todo se escucha. Sin dramas, sin complicaciones. Es lo *único* que pide y se espera el 836% de los usuarios en desktop. Fin.
Read 69 tweets
Nov 8, 2021
¿Queríais rant sobre el lamentable estado del stack gráfico de Linux? ¡Pues allá vamos! ⬇

⚠ hilo extremadamente largo y algo técnico (aunque he intentado simplificar)
Antes de nada, para los despistados: el "stack gráfico" es esa parte del OS que te permite ver porno ventanas e interactuar con ellas (moverlas. minimizarlas, etc...) usando el ratón, el teclado, un lápiz táctil, etc...
MacOS lo tiene. Windows lo tiene. Arrancas el ordenador, enchufas una o varias pantallas (a lo mejor con distinta resolución / DPI, a lo mejor con HDR). Se pintan las ventanas. Se pintan los colores...
Read 90 tweets
Oct 25, 2021
WhatsApp escaló a 1000M usuarios [0], y para hacerlo:

* escalaron en vertical lo máximo posible
* mantuvieron todo lo mas simple posible
* mantuvieron todo lo mas pequeño posible

Y luego estáis tu y el mostrenco kubernetiano de infra que has montado

[0] marketplace.atlassian.com/apps/1214509/e…
"WhatsApp prefers to use a smaller number of servers and vertically scale each server to the highest extent possible. Having a fewer number of servers means fewer things breaking down, which makes it easier for the team to handle."

Procesa eso con tu Kafka instalado con Helm
"One of the key factors when they make technical choices is “what is the simplest approach?”"

Un saludo a la bola de servicios que has montado, porque era imperativo que tu app descubra el único Redis que tienes a través de Consul en vez de por una IP local
Read 6 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(