Por @Alvy — 30 de Junio de 2022

JS Bin - Collaborative JavaScript Debugging

Revisando enlaces viejos me encontré con este programa para resolver sudokus escrito en JavaScript y creado por Andrei Kashcha. Seguramente su sencillez es su mayor virtud: son unas 80 líneas de código ligero, perfectamente estructurado en unas pocas funciones. Eso sí, elegante no es mucho: como puede verse actúa mediante fuerza bruta, probando uno por uno todos los posibles números candidatos en todas las posiciones.

En el array grid[] se pueden introducir los números conocidos, dejando con ceros las celdas que vayan en blanco. Luego basta ejecutar el programa (Run with JS) para obtener el resultado. Si el sudoku está mal planteado y es «imposible», quedarán celdas en blanco. Si tiene varias soluciones, se mostrará la primera de ellas. Se podría mejorar haciendo que de paso indicara si es un sudoku perfecto de solución única.

El sudoku más difícil del mundo

Lo he probado con el sudoku más difícil del mundo y naturalmente no ha tenido problema. Se puede usar el código para aprender, ampliarlo a sudokus más grandes o utilizar en otros proyectos, como una app que resuelva el sudoku tras leerlo con la cámara. De ese estilo hay varias por ahí.

Relacionado:

Compartir en Flipboard Tuitear
Por @Alvy — 29 de Junio de 2022

Top 8 Most Demanded Programming Languages in 2022

En DevJobsScanner han publicado la lista de los lenguajes de programación más demandados de 2022 (al menos del primer semestre, aunque estas cosas tienden a cambiar lentamente). La forma de elaborar la tabla es compleja pero interesante, porque refleja bien la realidad del mercado: básicamente escanearon 7 millones de ofertas de trabajo de todas partes del mundo, y se quedaron con los más mencionados directamente, de entre 200 lenguajes distintos que detectaron:

  1. Javascript / Typescript
  2. Python
  3. Java
  4. C#
  5. PHP
  6. C/C++
  7. Ruby
  8. Go

JavaScript sigue siendo el más requerido para los trabajos de programación, y su popularidad ha aumentado con la llegada de TypeScript, que es una especie de superconjunto de JavaScript pero con tipos seguros. Python quizá está por ser versátil y Java por aquello de que es «de los de toda la vida», y lleva en los ránkings desde 1995. Quizá descata Go, creado por Google hace 12 años para la gestión de bases de datos masivas y procesamiento en red y con varios nucleos.

Ojo que esto no es lo mismo que los lenguajes más populares, que son los que por unas u otras prefiere la gente. Entre estos también suelen aparecer R, Swift, en incluso Arduino y Matlab. Por no hablar de Cobol, con una vida más eterna que la de Jordi Hurtado.

Relacionado:

Compartir en Flipboard Tuitear
Por @Alvy — 28 de Junio de 2022

El formato JPEG para comprimir las imágenes que vemos en Internet tiene ya muchos años, pero sigue siendo extremadamente útil porque proporciona una calidad razonable con imágenes que ocupan muy poco respecto a las originales. En este vídeo de Branch Education puede verse una explicación paso a paso de cómo funciona, algo que no es precisamente fácil porque incluye muchas matemáticas y transformaciones para manejar los los espacios de color y la calidad de las imágenes.

Hay quien se sorprende de lo bien que concibieron el JPEG allá por 1992; una idea que resultó ser casi perfecta a la primera. El vídeo se entretienen en desgranar los cinco pasos que básicamente realiza el algoritmo:

  • Transformación del espacio de color
  • Submuestreo
  • Transformación discreta de coseno (DCT)
  • Cuantificación digital
  • Codificación entrópica run-length / Huffman

Las técnicas del JPEG se basan en parte en cómo el ojo humano percibe los colores, lo que permite eliminar parte de la información sin que se note mucho. Dividir la imagen en pequeños bloques permite también utilizar gradientes para representar los colores; teniendo en cuenta que en la naturaleza de las fotografías del MundoReal™ las formas y colores se transforman poco a poco. Esto permite eliminar también información redundante gracias a fórmulas matemáticas muy ingeniosas. La parte final se corresponde con una compresión sin pérdida de toda esa información calculada anteriormente.

Al final del vídeo se explica cómo se reconstruyen los bloques a partir de la información resultante, y cómo resultan casi indistinguibles del original, excepto en algunos casos en los que aparecen los famosos «artefactos» o bloques de manchas sin mucho sentido que no es fácil eliminar.

Recordemos además que JPEG está pensado principalmente para fotografías naturales, no para imágenes vectoriales (logotipos, iconos), con mucho contraste y nitidez o demasiado complejas y con detalles (los fractales son un ejemplo perfecto). Para todo lo demás, los PNG, GIF o incluso los WebP van mucho mejor.

Relacionado:

Compartir en Flipboard Tuitear
Por @Alvy — 25 de Junio de 2022

El MOS 6502 presentado según Gregorio Naçu

El gran Gregorio Naçu de C64 OS preparó esta infografía en el que el mítico procesador MOS 6502 se expone como si fuera el chip M2 de Apple –o algo mejor– en cualquiera de las presentaciones para público, desarrolladores y prensa de la compañía.

Apple M2

Recordemos que el 6502 era el microprocesador del Apple I y el Apple II, así que muy fuera de lugar no está. Eso sí, ni los 500.000 transistores del 6502 compiten con los 15.800 billones del M2 ni los 64 KB de memoria dinámica de 200 nanosegundos que puede direccionar compiten con los 25 GB de los del nuevo chip.

Y mientras que el nuevo chip incluye instrucciones y funciones específicas para la más avanzada inteligencia artificial, el venerable 6502 debe conformarse con 56 instrucciones y una ALU (unidad lógica) que permite sumas con acarreo («y me llevo una»). ¡Ah, los tiempos, que avanzan que es una barbaridad!

¡Gracias por los recuerdos, Greg!

Relacionado:

Compartir en Flipboard Tuitear

Desarrolla más rápido con Xojo