Danielside

informática softwarelibre divagaciones música

Nim, Programación

Macros en Nim

El concepto de macro en el lenguaje de programación Nim es al mismo tiempo simple, complicado y absolutamente genial. No tiene nada que ver con las macros de C (lo más parecido en Nim son los templates).

Es «simple» porque las macros en Nim son simplemente «código Nim que produce código Nim», o más bien, un AST (Abstract Syntax Tree) que se traduce a otro AST.

Para seguir con mi aprendizaje Nim e intentar usarlo como algo diferente, en lugar de un simple sustituto de PHP o Python, necesitaba comprender -al menos algo- de las macros. Se me ha presentando la oportunidad al intentar reproducir una librería PHP que estoy utilizando en el puente Telegram<>XMPP, que es https://github.com/elvanto/litemoji. Esta librería se encarga de traducir emojis UTF8 a códigos cortos, y viceversa.

Seguir leyendo…

GNU/Linux, Nim, Programación, TDT

Analizando la EPG de DVB-T (la programación de la tele) con Nim

Siempre he sido bastante fan de grabar películas. Me gusta aprovechar lo que ponen gratis. Y como las grabo, me salto la publicidad y las puedo ver «por capítulos». Como tampoco soy fanático de «estar a la última» viendo todos los estrenos cuando salen, y por muchas vidas que viva no voy a ver todas las películas buenas que se han hecho, disfruto de las que van poniendo.

Con la aparición de algunos canales especializados en cine como el gran BeMad, con 24 horas de películas en alta calidad (alta definición y buenas copias) me estaba faltando sistematizar estas grabaciones, ya que muchas veces hay emisiones a horas poco habituales.

Seguir leyendo…

PHP, Programación

Mejorando el rendimiento de procesamientos con PHP

Le he dado el nombre de «procesamientos» para referirme a procesos largos que se ejecutan fuera del marco de la web. En otros tiempos diríamos «procesos batch» pero queda viejuno y windowsiano. Y «procesos» queda muy genérico.

El uso más extendido de PHP es procesar información en el backend, con la ayuda de FPM, para devolver contenido a un servidor web y éste a su vez devolver HTML al cliente. Pero en sistemas web complejos, tarde o temprano necesitaremos procesar cosas (ficheros grandes, tareas de mantenimiento, tareas de envíos de comunicaciones a clientes, etc). Este tipo de tareas es muy sensible a las mejoras que vamos a comentar en este post.

Seguir leyendo…

PHP, Programación

Reduciendo la complejidad ciclomática en PHP

Recientemente he estado rescatando cosas y leyendo cosas nuevas de PHP y poniéndome al día. PHP es un lenguaje que ya ha superado su lastre de ser un lenguaje confuso y «de pobres» y exclusivamente para crear webs cutrecillas. Por mencionar dos proyectazos que dan soporte a un enorme porcentaje de sitios: WordPress y Drupal.

Un excelente comienzo si te quieres modernizar y empezar a aplicar las mejores prácticas de PHP es https://phptherightway.com/. Se trata de un libro en constante evolución que puedes leer de forma gratuita y también puedes comprar al autor en formato eBook.

He estado retomando mi proyecto (framework Slim 3) para la web https://puestosdetrabajofuncionarios.nom.es/ para ver si podía ponerlo al día con las mejores prácticas y en concreto me ha parecido muy interesante el uso de PHP Mess Detector https://phpmd.org/. Le damos caña:

Nos fijamos en el primer resultado.

Seguir leyendo… 1 comentario

GNU/Linux, PHP, Software Libre, XMPP

Mi cloud con Haproxy y LXC

Me ha costado un poco pero finalmente he conseguido reestructurar mi vetusto servidor de DigitalOcean con Debian 7, donde tengo varias aplicaciones personales (nextcloud, gnusocial, prosody, etc.) a uno con Debian 10 en el que cada aplicación reside en un contenedor LXC 3 sin privilegios usando Alpine 3.10 (el mismo que usa Docker por defecto)

Seguir leyendo… 1 comentario

Administración Electrónica, Internet, Legal, Programación

Buscador de puestos de trabajo de funcionarios, la APP

Y no es que sea yo muy amigo de Google, ya sabéis, pero cuando se trata de obtener una retribución por algo en estos tiempos que corren, es difícil a no ser que sea obligatorio. Lo sé por pasadas experiencias con proyectos como LinuxAE: cientos de descargas y poco «retorno» :).

Así que me metí en el mundo app y pasé la funcionalidad del buscador de puestos de trabajo de funcionarios de la Administración General del Estado a Google Play y por menos de lo que te cuesta un café puedes hasta buscar por provincia.

GNU/Linux, PHP, Programación

PHP moderno en servidor VPS viejuno

Me encanta Debian por su estabilidad. Cuando el mundo acabe, las cucarachas vivirán sobre la faz de la tierra y quedará un servidor Debian encendido.

La desventaja es que son muy conservadores para actualizar las versiones del software, lo cual puede generar problemas de seguridad y también de rendimiento. Yo tengo un servidor virtual contratado para mis aplicaciones y en la época en la que comencé estaba disponible Debian 7 «Wheezy», eso estaba haciendo que ya no pudiera instalar versiones modernas de ciertas aplicaciones, que se habían pasado a versiones de PHP más modernas y que corrigen fallos importantes. Me encontraba en la 5.4

Seguir leyendo…

1 comentario

GNU/Linux, Internet, LUA, Programación

Recepción de mensajes Telegram en XMPP/Jabber

De entre las plataformas de mensajería instantáneas existentes, poniendo en la balanza la libertad y también la masa de usuarios, he decidido que usaría Telegram, por muchos motivos.

Aunque en apariencia sea igual a whatsucks, tiene innumerables ventajas desde el punto de vista de tu libertad. Las desventajas son las de siempre 1) que no controlas los servidores por donde pasan tus comunicaciones, 2) que no te puedes fiar al 100% de la corrección del cifrado de mensajes. Pero más allá de eso, nos ofrece:

  1. Las aplicaciones cliente son libres y su código está disponible, cualquier lo puede inspeccionar y si no le gusta instalarse la del market, compilarlo.
  2. Está en f-droid.
  3. Y más importante que eso, siempre han facilitado enormemente la creación de clientes no oficiales que usen su red, realizando esl esfuerzo de crear APIs (https://core.telegram.org/api) que permiten construir clientes con la totalidad de las funciones de la plataforma. De esta manera, podrías implementar el cifrado extremo a extremo que te diera la gana, como el omnipresente OTR el nuevo OMEMO de Conversations (https://conversations.im/omemo/)

En definitiva, siendo también un servicio opaco, creo que es una plataforma que da un amplio grado de libertad y eso la hace mucho más divertida.

Seguir leyendo…

1 comentario

Programación

Aislar y abstraer

Este es un principio de programación propio muy sencillo pero que trae muchos beneficios. Seguro que no es totalmente «propio» y tiene algún nombre en algún manual, pero es algo que suelo hacer por iniciativa propia.

Cuando estás tomando decisiones con estructuras condicionales -por ejemplo mostrar/ocultar elementos de la interfaz- en diversas partes del mismo documento -controlador, vista, etc- tienes que expresar en cada condición lo que quieres o no quieres hacer, sin basar esa condición en información o estados anteriores. Es decir, que si lo que quieres es mostrar o no un widget con un mapa, simplemente pregunta:

Seguir leyendo…

GNU/Linux, Programación

Montar tus entornos de desarrollo con virt-manager

Durante el tiempo que estuve -por motivos profesionales- trasteando con plataformas de provisión de máquinas virtuales basadas en web, como OpenNebula, OpenStack y demás, nunca me imaginé que en realidad pudiera ser tan fácil como es con virt-manager. Aunque tiene truco, porque supongo que todo lo que sufrí peleando con OpenNebula me sirvió para adquirir algunos conocimientos que me han ayudado a saber como configurar bien virt-manager con KVM.

Seguir leyendo…