Read Only Memories
Let me annoy you in inglés and español.
Hace años que escribo la mayoría de mis documentos usando pandoc porque es una de esas herramientas tan poderosas, que no usarlas es incivilizado. Aparte está escrita en Haskell, lo cual lo hace civilizado con título.
En general, edito el documento con vim
usando las extensiones
para Markdown. Casi siempre es puro texto. De vez en cuando hay
que hacer alguna curiosidad usando LaTeX para insertar una
fórmula matemática o TiKZ/PGF para programar diagramas.
En esta ocasión, quise insertar varios Emojis acompañando el texto y Nunca es Fácil®...
¿Estás en una red con acceso restringido a Internet? Quizás detrás de un filtro restrictivo de contenidos en una empresa, o en un país donde imponen control de contenidos generalizados.
Si te encuentras en esa circunstancia, pero tienes acceso SSH como usuario regular a algún servidor que está fuera de esas restricciones...
printf
is the canonical example of a variadic function.
Many people believe that kind of function is impossible
to write in a type-safe fashion, so it's often brought
into conversation with an obnoxious «Static typing, huh?
I'd like to see how you write printf
in Haskell».
Thanks to Haskell's type system capabilites, not only is
it possible to write variadic functions, but also a
type-safe, polymorphic, extensible, and composable printf
,
that is way better than your «regular» printf
.
Hay dos tareas recurrentes en la operación de bases
de datos PostgreSQL que uno toma por «automáticas»:
la recolección forzada de filas con VACUUM
, y la
reconstrucción de índices con REINDEX
.
La primera, cuando el «autovacuum» no es suficiente en una base de datos con mucho tráfico. La segunda, después de algunas migraciones, o cuando el comportamiento de las consultas sugiere que los índices tienen defectos después de una falla abrupta.
Los DBA PostgreSQL damos por descontado que siempre van a funcionar...
I always use Debian stable on my work laptop. I also tend to use the provided version for most programming languages. Sometimes I need multiple versions for work or research related reasons. This isn't a problem with languages such as Haskell or Rust, but it tends to be a pain with others, Golang being the cause of these notes.
Mi plataforma preferida para usar Linux es la portátil Thinkpad, antes IBM y ahora Lenovo. En particular, prefiero las portátiles series T o X. Además que su hardware no es «genérico barato», y está soportado perfectamente, Lenovo hace un esfuerzo bastante bueno por mantener el UEFI/BIOS al día (excepto cuando no, pero esa es otra historia). Es más, Lenovo provee las imágenes para que sean actualizadas desde Linux. Pero como «Nunca es Fácil», me toca descargar imágenes ISO.
People who are new to Haskell often wonder what's going on with «string» types. Specially those who still go by using strings and half-baked regex-based parsers, because they still don't know better. As I often say, «String is the poor man's data structure». But I digress...
This cheat sheet helps figuring out what the usual string types are, what are they useful for, and how to go back and forth among them.
Tengo una imagen de altura H
y anchura W
, oblonga
(H > W
) en original SVG. Hace falta una imagen
cuadrada de lado L
en formato PNG. Después de darle
vueltas a la página de manual de convert
, parte de
ImageMagick, esta magia funciona
convert original.svg -resize LxL -gravity center -extent LxL final.png
También funciona con un original en otro formato,
siempre y cuando H <= L
y W < L
.
El siguiente es uno de los problemas más entretenidos que he encontrado recientemente en uno de esos libros de «Acertijos y Problemas para resolver con computadora».
Demuestre que si un jugador de béisbol registra un promedio de bateo de .334, tiene que haber tomado al menos 287 turnos al bate.
El énfasis en demuestre y al menos, es mío.
Me pareció entretenido porque no es de búsqueda exhaustiva (típico en esos libros), e involucra la frontera entre números racionales e irracionales, dos infinitos diferentes.
Cuando una zona DNS está firmada con DNSSEC, a cada
registro (RR
) en la zona, se le agregan uno o más
registros con las firmas digitales (RRSIG
). Cada
RRSIG
tiene una fecha de inserción (inception)
y una fecha de caducidad (expiration). Cuando un
DNS de resolución (resolver) consulta la zona para
obtener los RR
y solicita firmas DNSSEC, una de las
cosas que hace es verificar que los RRSIG
estén
vigentes.
Not many people know that I used to do a lot of OpenGL back when I was way younger. I'll say about three or four people know that I wanted to do my MsC in Computer Graphics and Multimedia Applications, but «things happened» and I ended up switching back to good ol' Programming Languages (again).
Just today this showed up in my timeline
Hello triangle. (full res image at:https://t.co/ZUcxHRUZwW) pic.twitter.com/77xs43Ow3j
— Jari Komppa (@Sol_HSA) September 18, 2019
Since the Orange Combinator meetups have been suspended due to the COVID-19 situation, I thought I'd try to write an equivalent program using Haskell.
Lo único gracioso de pensar que la dislexia hizo que un maya escribiera 2012 en lugar de 2021, sería escribirlo en Comic-Sans.
No me tienes que explicar qué es un troll, y que ahora tienen más tiempo libre para ejercer su encomiable labor en pro de la hipertensión de otros. Tampoco es necesario explicar el valor del humor como un mecanismo de trascendencia que va más allá de las ideas preconcebidas sobre el lenguaje y la semiótica. La comedia es tragedia más tiempo, y no tengo tiempo para la tragedia que eres creyéndote comediante.
Pero me distraigo, y no hay que distraerse con trolls...
Hasta que entiendas recursión...
El uso de recursión, tanto para definir algunas estructuras de datos, como para expresar algoritmos que resuelven problemas de computación, tiene un lugar especial en mi corazón.
Las definiciones recursivas resultan compactas, libres de efectos de borde o estado mutable, y terminan presentando un problema complejo como un conjunto de relaciones entre versiones más simples del mismo problema, o de problemas más simples.
Y eso es algo que hay que enseñarle a las nuevas generaciones.
Me encontré con la necesidad de migrar varios repositorios Subversion a nuevos repositorios Git. La migración necesitaba conservar los nombres de los autores de la mejor manera posible.
Disclaimer
It's been a few years since I've tried to explain continuations to anyone, much less in English. This is my take on what, why, when, how, and WTF when using continuations for fun and profit. I'm probably not the first one explaining them this way, and I've borrowed ideas from many places.
I hope former CI3641 and CI4251 students who heard the hand-wavy «I want a sandwich» explanation realize I was trying to convey a very complicated topic that wasn't worth mentioning in class. Also hope former CI4721/CI4722 students feel my pain at having to focus on less interesting non-functional code generation instead of vastly superior continuation based code generation for functional languages.
Comments are welcome at the usual e-mail addresses.