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)
Supongo que nada me impide modificar caracteres varias veces... ¯\_(ツ)_/¯
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:
"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...
La mayúscula "Σ" griega se convierte en minúscula "ς" únicamente si es la última letra de la palabra, en caso contrario "σ".
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
Hoy quiero contaros sobre Dante Agileni, un devrel italiano de la Edad PreIA, autor de La Divina Techcomedia.
Dentro hilo 🧵⬇️
En su obra narra un viaje a través de las tres etapas de la evolución profesional de un empleado en nuestro sector:
* el Infierno (carrerum profesionalum plenum)
* el Purgatorio (lo mismum, pero con mas responsabilidadum sin incrementun de sueldum)
* el Paraíso (jubilacium)
Sandro Bocetti, diseñador freelance especializado en la creación de bocetos con @Sketch, hizo un fan art basado en la obra de Dante (licencia Creative Commons), el cual usaré a lo largo de este hilo.
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).
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.
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
¿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.
¿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...