Aquí pongo las cosas que no dan para un post pero quiero conservar y compartir.

Mientras leía (bueno, leo) el SICP echaba un poco en falta programar algo en Scheme más allá de los ejercicios del libro. Me topé con este jardín digital donde el autor usa un formato de fechas diferente al gregoriano, se llama Arvelie. La idea de representar el tiempo en un formato alternativo me llamó la atención.

Hay un librería en C. Se me ocurrió hacer mi propia librería en Scheme. La empecé en verano, ayer la publiqué. Algunas reflexiones…

Tuve que meter tests. Me cuesta muchísimo trabajar en algo que lleve más de una hora o dos sin tests. Por ejemplo, para el blog tengo scripts:

$ tree | grep '\.rb'
│   ├── add_book.rb
│   ├── amazon_book.rb
│   └── generate_bookshelf.rb
│   ├── add_domains.rb
│   └── add_entry.rb

que no están testeados, pero son scripts cortos que no (me) merece la pena testear. En cambio al meter el segundo método del conversor empecé a echar en falta los tests. Si hubiese sido un lenguaje compilado quizá podría haber confiado en el compilador para evitar los errores de sintaxis. Al ser interpretado, en lugar de lanzar el REPL para ejecutar los mismos casos de usos, más fácil, cómodo y menos frustrante automatizarlo desde el principio.

Los errores de sintaxis Scheme son crípticos. Un error de sintaxis y a buscar donde falta el paréntesis. Mi entorno de desarrollo no está optimizado para Lisp supongo que si inviertes ahí, no te lo tiene que decir el intérprete.

Lisp es estético. No comparto (ahora) la idea de que tantos paréntesis lo hace feo. Visualmente me resulta muy homogéneo.

La notación polaca, bien.

Demasiadas conversiones de tipos. Tengo la sensación de que mi solución tiene demasiadas conversiones de tipos. Creo que se podría refactorizar para trabajar con listas desde el principio siendo así más sencillo.

La solución podría ser más sencilla. Hubo un momento en el que dejé de hacer la solución más sencilla y empecé a darme prisa por acabarlo. Creo que se podría hacer más sencillo, en especial las validaciones.

Encontrar información no es tan fácil. Comparado con otros lenguajes que buscas en google how to get first n elements of a list in XXXX y el primer resultado es consistente en Scheme no es tan sencillo. Desde soluciones que ya existen en la librería estándar hasta soluciones de otros sabores de Lisp (Chicken Scheme, Racket) o soluciones que ya existen en la librería estándar pero que reimplementan en la solución. Supongo que por la historia/naturaleza del lenguaje no puedes esperar el mismo nivel de información que en los populares.

Me ha gustado trabajar con listas pero al ser un problema general aplicando un lenguaje generalista no he podido ver mejoras de “productividad” en comparación con otros lenguajes que he usado.

Lectura:

Videos:

Misc:

Lectura:

Videos:

Misc:

El monkey patching trae problemas pero estaba mirando por curiosidad como hacerlo en Lisp. Un ejemplo, que el símbolo de sumar reste:

1 ]=> (define (+ . args-list)
  (apply - args-list))

;Value: +

1 ]=> (+ 1 1)

;Value: 0

Lectura:

Misc:

Structure and Interpretation of Computer Program es un libro “clásico” de la informática. La primera edición es de 1985. Se usaba para enseñar a programar en el MIT. Aunque algunos lo consideran obsoleto y favorecen otros libros como How to Design Programs.

Son 5 capítulos, he acabado el primero.

  • Me parece un libro terrible para aprender a programar si lo que se quiere es programar.
  • Las matemáticas necesarias no son de un gran alto nivel aunque sí se necesita una base mínima.
  • Si ya sabes programar (como es mi caso) pero no tienes una gran “madurez matemática” el reto de los ejercicios es la parte matemática y no la parte de programación.
  • Introduce conceptos generales de los lenguajes de programación que ya conocía pero verlos de forma aislada, con tiempo, y sin aplicación práctica es un ejercicio fabuloso.
  • Las dudas (y los ejercicios) están resueltas en Internet.
  • Lips y derivados (Scheme en este caso) son interesantes e intuitivos.
  • Está orientado a estudiantes de ingeniería tradicionales cuando quizá no había ni facultades de informática. Conocimientos fuertes en cálculo.

Hay una frase de Taleb que dice:

When you use a ruler to measure the table, you are also using the table to measure the ruler.

Me venía mucho a la cabeza por esa dualidad programación-matemáticas.

Mi motivación para empezar con este libro era aproximarme a la computación desde un punto de vista más cercano a la academia.

Lectura:

Videos:

Misc:

Lectura:

Videos:

Misc:

Últimamente me he estado interesando por los sistemas operativos ya que supone una oportunidad para usar lenguajes de “bajo nivel” (si aceptamos C como lenguaje de bajo nivel). Empecé un curso de Linux y me di cuenta que había muchas cosas que no sabía sobre el funcionamiento de los sistemas operativos. Descubrí Xv6. Es un sistema operativo mínimo que se puede virtualizar con QEMU. Es más sencillo que MINIX y de kernel monolítico. Tiene un manual donde explica en 100 páginas el funcionamiento del sistema. El código es C y es sencillo.

Aproveché también para pasar re-escribir algunas de las GNU core utils para xv6. Hay varios forks y proyectos con modificaciones/extensiones (GUI, en otras arquitecturas…) que resultan más sencillas de explorar que proyectos reales.

No estoy 100% seguro pero uno de los profesores detrás de Xv6 es Robert Morris que es el “precursor” de los virus con El gusano morris.

Con estas funciones:

    " Writer mode
    function! SpanishWriterMode()
      set spelllang=es
      set spell
    endfunction

    function! DisableSpanishWriterMode()
      set nospell
    endfunction

    noremap <leader>swm :call SpanishWriterMode()<CR>
    noremap <leader>dswm :call DisableSpanishWriterMode()<CR>

se hace más cómodo usar la ayuda para ver las faltas ortográficas al usar vim.

Con ,swm para activar o ,dswm para desactivar el corrector ortográfico.

Lista de enlaces sobre el contenido que me ha gustado/recomiendo/provoca-interés durante el mes. Hay partes que he consumido superficialmente, otras al completo y otras no pueden ser consumidas (Misc). He cogido la idea de la newsletter de Gwern.

Lectura:

Videos:

Misc: