Programar. No mucho en el ámbito de sysadmin, pero necesario tener un saber tangencial sobre éste a la hora de resolver problemas en emergencias. Entré en la informática por la afición a los emuladores donde descubrí un poco sobre como funcionan los emuladores a bajo nivel, sobre todo el Spectrum con su Z80, su ROM, instrucciones... gracias al enganche que me dieron las aventuras de texto en esa plataforma. Lo mismo con la Game Boy y demás, y ver y retocar el NagraTV para ver como funciona por debajo. Si te gusta cacharrear vas a aprender a programar mucho más que cualquiera que lo haga mediante ingeniería o grado superior. Para los latinoamericanos, un grado superior es lo que en usa llaman Arts Degree o Community College, a medio camino entre bachillerato en España (bachiller esdonde aprendes a integrar y derivar, los dos años entre educación básica obligatoria y universidad) y la mencionada universidad. El temario que das son asignaturas de BBDD, algoritmia y a veces sin llegar al bajo nivel, pues aprenderás C# y Java como mucho, junto con algo de JS, CSS3, XML, y en lenguajes en sí algoritmos de ordenación y quizá notaciones como O(n). Y redes claro. Asignaturas compartidas con el grado administración de sistemas y redes, donde eres el sysadmin y básicamente configuras y normalizas BBDD, preparas servicios de redes, configuras la red entera de una empresa y cuestiones similares. Pero como dije, ni el curso de dos años de sysadmin ni de picacódigos va a formarte tanto como el crear por ejemplo un emulador de Chip8, portar un emulador de máquina Z hecho en PS a Forth o entender /dev/vbi para crearte un lector de Teletexto en Perl por ejemplo (cosa que en su día era fácil de hacer). Por supuesto he tocado C para portar CPUlimit de FreeBSD a OpenBSD por ejemplo, entre otros ajustes mínimos de plataformas de cientos de ports para por ejemplo compilar aplicaciones donde diferían algo las APIs. En casa en Forth y Scheme/Elisp por ocio; del resto tengo nociones de Bash/Perl/C (Ansi C, de POSIX solo nociones básicas) y que no trataré aquí. Para Forth uso PFE en un script y uso Forth-Mode en Emacs, no hay muchas florituras. Abres tu fichero .fth y se abre forth-mode, con C-c C-c se evalúa el buffer entero con PFE. Para Scheme, he instalado geiser y geiser-chicken desde MELPA: M-x package install RET geiser M-x package install geiser-chicken Luego he integrado la documentación de Chicken Scheme tal como dice aquí: https://wiki.call-cc.org/emacs Como Emacs ya tiene un visor Texinfo desde tiempos inmemoriales, abro el SICP en ese formato con C-u C-h i para abrir un fichero INFO a voluntad en vez del directorio por defecto. Si alguien lo quiere: http://www.neilvandyke.org/sicp-texi/sicp.info.gz La razón de usar SICP es porque con Lisp es como hablar de Cálculo Lambda donde define los numerales y operaciones como funciones, y éste último bebe de los axiomas de Peano. Es leer el SICP y hacer los ejercicios y aprender el 90% de computación teórica del mundo real. El resto sería leerse un libro de matemáticas discretas. Y para ramas más avanzadas, álgebra lineal. Quiero decir, si acabas el SICP vas a coger cualquier otro lenguaje de programación y vas a entender las nociones a la primera. Y en matemáticas no es que aprendas cálculo, es que le enseñas al intérprete LISP a derivar e integrar de modo simbólico, es decir, con reglas. Y con funciones donde hasta un alumno de primaria sería capaz de entender. Para usar Chicken abro un fichero SCM y lanzo M-x geiser. Reconozco que es algo mejor que usar nvi con un simple fichero SCM y lanzar csi con F5, pero va solito. Con C-x e evalúo una función y con C-x C-z todo el buffer. Lo pruebo en un fichero, fact.scm: (define (fact-n) (fact-iter 1 1 n)) (define (fact-iter (a b n) (cond ((> b n) a) ('t (fact-iter (* a b) (+ b 1) n))))) (fact 10) Pulso C-x e al final del paréntesis del primer 'define' y luego lo mismo con el segundo. Finalmente evalúo (fact 10) y me da el resultado en el buffer de Geiser. ¿Es lo mismo que llamar csi desde nvi? Pues, creo que no, puesto que en caso de errores con Geiser puedo ir a una función por nombre, buscar en el historial... todas esas cosas. También podría usar ORG-babel con Geiser, es decir, en vez de tener un bloque de código en edición y un intérprete leyéndolo a voluntad, lo suyo es describirlo en un fichero .org para que salgan los resultados ya 'redactados' debajo del código introducido en el mismo fichero. A eso lo llaman programación literata, donde casi compones un volúmen exquisitamente redactado de cada parte del código, comentado y ya evaluado. Sobre Elisp, es más o menos similar al manejo con Chicken, pero con el dialecto de un Lisp más posterior, el 1.5, donde es casi primo hermano del Common Lisp. Es decir, un usuario de CL lo entenderá a la primera, y en Emacs existe cl-lib donde es una librería donde hace Elisp más compatible con éste. Como curiosidad, el factorial en Elisp: (defun fact (fact-iter 1 1 n)) (defun fact-iter (a b n) (cond ((> b n) a) ('t (fact-iter (* a b) (+ b 1) n)))) (factorial 10) En Common Lisp funciona exactamente igual. De hecho hay volúmenes como el Paradigms On Artificial Intillgence con todo el código de los ejercicios del libro es pasado a Elisp donde apenas se escriben menos de una docena de funciones de apoyo, el resto es CL sin portar. Saber Elisp es interesante para configurar el propio Emacs (donde el ~/.emacs que he retocado es puro Elisp) o bien hacer cosas como, no sé, usar el código de traducción online de mensajes del Telega para traducir un párrafo de tu mensaje de correo al inglés, cosa que he probado... y funciona. O usar parte de Elisp de M-x calc para calcular distancias entre coordenadas de datos de un fichero GPX en una ruta o los datos EXIF de un fichero... O simplemente para editar y retocar los paquetes de Emacs a tu gusto. Finalmente, si eres estudiante y quieres un CAS ligero para salir del paso con Gnuplot, prueba M-x calc que es casi como un Máxima mini, (nunca mejor dicho), pero con esteroides ya que Emacs tiene cosas 'raras' que no ves en Máxima u Octave. Como usuario de Unix, yo entiendo Emacs como algo a cambiar y modificar al vuelo, donde cada función Lisp se puede llamar y entretejer con otra creando una plataforma con una potencia exponencial, siendo Unix su opuesto, donde en vez de funciones se usan programas sueltos con tuberían o bien con xargs usados paralelamente, pero todo opera en base al texto. En Elisp en vez de texto operas con funciones, y su filosofía como digo es poder realizar cosas 'al vuelo' mientras corre. De ahí su relativamente 'alto' consumo de recursos respecto a Unix escrito en C donde lanzar un proceso nuevo sale casi gratis. Por eso Unix tiende a la automatización tras pasarse unas horas previas de configuración y scripting con cron, y Lisp al pensamiento lateral y a probar cosas nuevas. Si quieres pensar un poco al principio pero dejar que el PC haga tus tareas por tí el 90% del tiempo con cron, usa Unix. De hecho el usar slrnpull, amused en modo demonio para la música, isync/msmtp para correo... dejan claro que Unix es para reducir al mínimo el tiempo de computación para que te centres en la tarea en sí. Observa groff y demás vs Texinfo en Emacs. En ese lenguaje primero redactas al 100% tu informe, libro, novela... para luego maquetarlo con macros ms o me ya hechas. Texinfo parece una madeja donde puedes llamar incluso a órdenes nativas para escructuras tu texto. Raro no sería que Emacs pudiera llamar a Máxima para 'escupir' Texinfo o LaTex con la función ya evaluada... En Unix primero se haría la ecuación/ función en papel, se computaría en C o un CAS ligero como numtools o qalc y se maquetaría el texto a lo último. Unix perdería más tiempo maquetando pero lo ganaría calculando de pleno. Emacs/Maxima con CL tendrían la maquetación ya hecha pero por muy rápido que sea SBCL, éste no puede competir con C, pero sí que supera a muchas librerías de cálculo simbólico si no quieres encharcarte con librerías como GSL. https://en.m.wikipedia.org/wiki/GNU_Scientific_Library Eso sí, va a comerse a Maxima o M-x calc en velocidad de pleno :) Si quieres cacharrear al vuelo para probar cosas nuevas y salirse de la ortodoxia del automatismo perdiendo ciclos de CPU en el camino, usa M-x calc/Emacs. Si prefieres perder el tiempo escribiendo en C para tener el resto del tiempo libre calculando tareas de forma iterativa, elige C con Unix. Emacs es para hackers, pero en el sentido antíguo de la palabra, de gente excéntrica que quiso romper con la burocracia marrón oficinista del frío computador para crear, por ejemplo, la aventura de texto 'advent' para sus hijas. O hacer de su editor de texto un cliente de correo, reproductor, intérprete de aventuras, cliente de IRC, Dunnet, chatbot de psicólogo con M-x doctor... Unix es también para hackers, pero para reducir al mínimo la computación haciendo que el ordenador se centre en pensar y los humanos, quizá, en otras cosas. Pero recordemos que si los hackers de GNU adoraban crear cosas divertidas, los de Unix inventarón este para... jugar al SpaceWar. Y pasaron de jugar a controlar el 90% de lo que se mueve en internet, los dos smartphones más conocidos en tu bolsilo y a básicamente cambiar la informática de forma impredecible. Todo por unos locos de Lisp queriendo crear un Unix libre... De hecho Emacs es un intento de dar la libertad de Lisp en Unix. Y opino que combinando la automatización de servicios en segundo plano de Unix (como isync/msmtp para correo) y usar mu4e como cliente (o GNUS con maildir) debería dar lo mejor de ambos mundos. Sé que se pierde algo de 'hackeo' al no poder tocar un Elisp de un demonio que te baja y sube correos, noticias, toots de Mastodon, fuentes RSS, pero hasta RMS usa M-x rmail que depende creo de sendmail y herramientas Unix externas. Y dired sigue dependiendo de 'coreutils'... ¿Es Emacs la shell definitiva para Unix? Eshell puede hacer muchas cosas que Bash y Zsh no pueden, como llamar a Elisp nativamente. Para gustos, colores. Y a fin de cuentas, ambos sabemos que llamaremos a Gnuplot para realizar las gráficas. Y Emacs tiene M-x viper-mode para los adictos como yo a vi, así que.... Como pega destacaría el uso monohilo de Emacs y los bloqueos de E/S, y siempre he dicho que de mejorar GNUS usaría Emacs como mi plataforma principal en vez de Tmux+ nvi y una ristra de programas ligeros como Sacc. Pero la magia está en salirse al 'otro lado' para experimentar. Si fuera un usuario de Emacs, seguramente probaría tmux, nvi, sacc y un programa en shell que me guardase la página de un gopher o gemini y que finalmente me llamase a less (cosa que se puede hacer exportando la variable PAGER a ese script para que sacc lo llame). Supongo que usando 'basename' con 'mkdir -p' no costaría demasiado imitar a offpunk, en https://offpunk.net, pero estoy seguro que los emacseros con elpher lo haría en 10 minutos, lo de dejar una memoria persistente de tus sitios visitados... Ah, lo olvidé: para Elisp hay funciones como describe-variable y describe-function donde te dicen para qué sirve cada cosa, es algo que hecho de menos en Geiser, al menos de forma tan detallada. También olvidé ayer que en Emacs hay un cliente de Mastodon llamado mastodon.el que se puede instalar con M-x install mastodon. TIene una pega: si te quieres loguear requiere abrir una web con JS. No entiendo como no puede hacerse algo similar a lo que hace https://brutaldon.online, pero bueno.